2014-08-17 01:45:34 +00:00
|
|
|
# Rust bindings to *nix APIs
|
2014-08-07 20:02:28 +00:00
|
|
|
|
2020-10-12 15:06:18 +00:00
|
|
|
[![Cirrus Build Status](https://api.cirrus-ci.com/github/nix-rust/nix.svg)](https://cirrus-ci.com/github/nix-rust/nix)
|
2021-08-14 06:10:42 +00:00
|
|
|
[![crates.io](https://img.shields.io/crates/v/nix.svg)](https://crates.io/crates/nix)
|
2016-07-10 06:27:13 +00:00
|
|
|
|
2016-12-03 13:36:47 +00:00
|
|
|
[Documentation (Releases)](https://docs.rs/nix/)
|
|
|
|
|
2016-07-10 06:27:13 +00:00
|
|
|
Nix seeks to provide friendly bindings to various *nix platform APIs (Linux, Darwin,
|
2015-02-21 00:24:42 +00:00
|
|
|
...). The goal is to not provide a 100% unified interface, but to unify
|
|
|
|
what can be while still providing platform specific APIs.
|
2014-08-17 01:45:34 +00:00
|
|
|
|
2016-07-10 06:27:13 +00:00
|
|
|
For many system APIs, Nix provides a safe alternative to the unsafe APIs
|
|
|
|
exposed by the [libc crate](https://github.com/rust-lang/libc). This is done by
|
|
|
|
wrapping the libc functionality with types/abstractions that enforce legal/safe
|
|
|
|
usage.
|
2015-05-28 22:17:49 +00:00
|
|
|
|
|
|
|
|
2016-07-10 06:27:13 +00:00
|
|
|
As an example of what Nix provides, examine the differences between what is
|
|
|
|
exposed by libc and nix for the
|
2021-05-14 04:37:16 +00:00
|
|
|
[gethostname](https://man7.org/linux/man-pages/man2/gethostname.2.html) system
|
2016-07-10 06:27:13 +00:00
|
|
|
call:
|
2015-05-28 22:17:49 +00:00
|
|
|
|
2016-07-10 06:27:13 +00:00
|
|
|
```rust,ignore
|
|
|
|
// libc api (unsafe, requires handling return code/errno)
|
|
|
|
pub unsafe extern fn gethostname(name: *mut c_char, len: size_t) -> c_int;
|
|
|
|
|
2022-06-25 01:29:07 +00:00
|
|
|
// nix api (returns a nix::Result<OsString>)
|
|
|
|
pub fn gethostname() -> Result<OsString>;
|
2016-07-10 06:27:13 +00:00
|
|
|
```
|
2014-08-07 20:02:28 +00:00
|
|
|
|
2017-04-15 19:12:33 +00:00
|
|
|
## Supported Platforms
|
|
|
|
|
2017-04-17 22:16:22 +00:00
|
|
|
nix target support consists of two tiers. While nix attempts to support all
|
|
|
|
platforms supported by [libc](https://github.com/rust-lang/libc), only some
|
|
|
|
platforms are actively supported due to either technical or manpower
|
2017-12-24 19:54:34 +00:00
|
|
|
limitations. Support for platforms is split into three tiers:
|
2017-04-15 19:12:33 +00:00
|
|
|
|
2017-04-17 22:16:22 +00:00
|
|
|
* Tier 1 - Builds and tests for this target are run in CI. Failures of either
|
|
|
|
block the inclusion of new code.
|
|
|
|
* Tier 2 - Builds for this target are run in CI. Failures during the build
|
|
|
|
blocks the inclusion of new code. Tests may be run, but failures
|
|
|
|
in tests don't block the inclusion of new code.
|
2017-06-30 17:25:57 +00:00
|
|
|
* Tier 3 - Builds for this target are run in CI. Failures during the build
|
|
|
|
*do not* block the inclusion of new code. Testing may be run, but
|
|
|
|
failures in tests don't block the inclusion of new code.
|
2017-04-15 19:12:33 +00:00
|
|
|
|
2019-03-10 15:23:52 +00:00
|
|
|
The following targets are supported by `nix`:
|
2017-04-15 19:12:33 +00:00
|
|
|
|
|
|
|
Tier 1:
|
|
|
|
* aarch64-unknown-linux-gnu
|
|
|
|
* arm-unknown-linux-gnueabi
|
2017-07-09 18:28:34 +00:00
|
|
|
* armv7-unknown-linux-gnueabihf
|
2017-10-14 23:57:59 +00:00
|
|
|
* i686-unknown-freebsd
|
2017-07-09 18:28:34 +00:00
|
|
|
* i686-unknown-linux-gnu
|
|
|
|
* i686-unknown-linux-musl
|
|
|
|
* mips-unknown-linux-gnu
|
2017-07-09 20:19:41 +00:00
|
|
|
* mips64-unknown-linux-gnuabi64
|
|
|
|
* mips64el-unknown-linux-gnuabi64
|
2017-07-09 18:28:34 +00:00
|
|
|
* mipsel-unknown-linux-gnu
|
2017-06-19 22:02:12 +00:00
|
|
|
* powerpc64le-unknown-linux-gnu
|
2017-07-09 18:28:34 +00:00
|
|
|
* x86_64-apple-darwin
|
|
|
|
* x86_64-unknown-freebsd
|
|
|
|
* x86_64-unknown-linux-gnu
|
2017-04-18 00:34:02 +00:00
|
|
|
* x86_64-unknown-linux-musl
|
2017-04-15 19:12:33 +00:00
|
|
|
|
|
|
|
Tier 2:
|
2022-01-30 05:25:29 +00:00
|
|
|
* aarch64-apple-darwin
|
2017-07-04 17:40:23 +00:00
|
|
|
* aarch64-apple-ios
|
2017-07-03 23:07:21 +00:00
|
|
|
* aarch64-linux-android
|
|
|
|
* arm-linux-androideabi
|
2017-11-22 06:27:15 +00:00
|
|
|
* arm-unknown-linux-musleabi
|
2017-07-03 23:07:21 +00:00
|
|
|
* armv7-linux-androideabi
|
2017-11-22 06:27:15 +00:00
|
|
|
* i686-linux-android
|
2017-07-19 03:24:48 +00:00
|
|
|
* powerpc-unknown-linux-gnu
|
2017-07-09 19:13:32 +00:00
|
|
|
* s390x-unknown-linux-gnu
|
2017-07-04 17:40:23 +00:00
|
|
|
* x86_64-apple-ios
|
2017-11-22 06:27:15 +00:00
|
|
|
* x86_64-linux-android
|
2021-08-23 23:22:07 +00:00
|
|
|
* x86_64-unknown-illumos
|
2017-07-04 17:40:23 +00:00
|
|
|
* x86_64-unknown-netbsd
|
2017-02-24 19:09:38 +00:00
|
|
|
|
2020-05-20 02:48:11 +00:00
|
|
|
Tier 3:
|
2021-12-07 21:57:52 +00:00
|
|
|
* armv7-unknown-linux-uclibceabihf
|
2020-08-05 17:25:03 +00:00
|
|
|
* x86_64-fuchsia
|
2021-09-04 22:25:52 +00:00
|
|
|
* x86_64-unknown-dragonfly
|
2022-04-23 04:56:51 +00:00
|
|
|
* x86_64-unknown-haiku
|
2021-02-13 08:30:39 +00:00
|
|
|
* x86_64-unknown-linux-gnux32
|
2021-09-04 22:25:52 +00:00
|
|
|
* x86_64-unknown-openbsd
|
|
|
|
* x86_64-unknown-redox
|
2020-05-20 02:48:11 +00:00
|
|
|
|
2021-09-29 03:16:42 +00:00
|
|
|
## Minimum Supported Rust Version (MSRV)
|
2015-02-21 00:24:42 +00:00
|
|
|
|
2022-08-11 23:29:31 +00:00
|
|
|
nix is supported on Rust 1.56.1 and higher. Its MSRV will not be
|
2021-09-29 03:16:42 +00:00
|
|
|
changed in the future without bumping the major or minor version.
|
2015-02-21 00:24:42 +00:00
|
|
|
|
2016-02-27 12:02:25 +00:00
|
|
|
## Contributing
|
|
|
|
|
2016-07-10 06:27:13 +00:00
|
|
|
Contributions are very welcome. Please See [CONTRIBUTING](CONTRIBUTING.md) for
|
|
|
|
additional details.
|
|
|
|
|
2017-06-03 19:17:19 +00:00
|
|
|
Feel free to join us in [the nix-rust/nix](https://gitter.im/nix-rust/nix) channel on Gitter to
|
|
|
|
discuss `nix` development.
|
|
|
|
|
2016-07-10 06:27:13 +00:00
|
|
|
## License
|
|
|
|
|
|
|
|
Nix is licensed under the MIT license. See [LICENSE](LICENSE) for more details.
|