/nix

Rust friendly bindings to *nix APIs

Primary LanguageRustMIT LicenseMIT

Rust bindings to *nix APIs

Build Status crates.io

Documentation (Releases)

Documentation (Development)

Nix seeks to provide friendly bindings to various *nix platform APIs (Linux, Darwin, ...). The goal is to not provide a 100% unified interface, but to unify what can be while still providing platform specific APIs.

For many system APIs, Nix provides a safe alternative to the unsafe APIs exposed by the libc crate. This is done by wrapping the libc functionality with types/abstractions that enforce legal/safe usage.

As an example of what Nix provides, examine the differences between what is exposed by libc and nix for the gethostname system call:

// libc api (unsafe, requires handling return code/errno)
pub unsafe extern fn gethostname(name: *mut c_char, len: size_t) -> c_int;

// nix api (returns a nix::Result)
pub fn gethostname(name: &mut [u8]) -> Result<()>;

Supported Platforms

nix target support consists of three tiers:

  • Tier 1 - Target is supported and CI both builds and tests
  • Tier 2 - Target is supported and CI builds the target
  • Tier 3 - Target is supported and CI both builds and tests but test failures do not block merging code

The following targets are all supported by nix on Rust 1.13.0 or newer:

Tier 1:

  • i686-unknown-linux-gnu
  • x86_64-unknown-linux-gnu
  • i686-apple-darwin
  • x86_64-apple-darwin
  • aarch64-unknown-linux-gnu
  • armv7-unknown-linux-gnueabihf
  • arm-unknown-linux-gnueabi

Tier 2:

  • i686-unknown-freebsd
  • x86_64-unknown-freebsd
  • x86_64-unknown-netbsd

Tier 3:

  • i686-unknown-linux-musl
  • x86_64-unknown-linux-musl
  • mips-unknown-linux-gnu
  • mipsel-unknown-linux-gnu
  • powerpc-unknown-linux-gnu

Usage

To use nix, first add this to your Cargo.toml:

[dependencies]
nix = "0.8.0"

Then, add this to your crate root:

extern crate nix;

Contributing

Contributions are very welcome. Please See CONTRIBUTING for additional details.

License

Nix is licensed under the MIT license. See LICENSE for more details.