#kernel #macos #darwin

no-std mach2

A Rust interface to the user-space API of the Mach 3.0 kernel that underlies OSX

2 releases

Uses old Rust 2015

0.4.1 Jun 7, 2022
0.4.0 Nov 15, 2021

#36 in Operating systems

Download history 3638/week @ 2022-08-07 2375/week @ 2022-08-14 4849/week @ 2022-08-21 4095/week @ 2022-08-28 4635/week @ 2022-09-04 4266/week @ 2022-09-11 4898/week @ 2022-09-18 4877/week @ 2022-09-25 3573/week @ 2022-10-02 4620/week @ 2022-10-09 4614/week @ 2022-10-16 4808/week @ 2022-10-23 3571/week @ 2022-10-30 5118/week @ 2022-11-06 3786/week @ 2022-11-13 2727/week @ 2022-11-20

15,623 downloads per month
Used in 34 crates (11 directly)

BSD-2-Clause OR MIT OR Apache-2.0

1.5K SLoC


Latest Version docs

A Rust interface to the user-space API of the Mach 3.0 kernel exposed in /usr/include/mach that underlies macOS and is linked via libSystem (and libsystem_kernel).

This library does not expose the kernel-space API of the Mach 3.0 kernel exposed in SDK/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/mach.

That is, if you are writing a kernel-resident device drivers or some other kernel extensions you have to use something else. The user-space kernel API is often API-incompatible with the kernel space one, and even in the cases where they match, they are sometimes ABI incompatible such that using this library would have undefined behavior.


Add the following to your Cargo.toml to conditionally include mach on those platforms that support it.

[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.mach]
version = "0.4"

Available crate feature:

  • unstable (disabled by default): Exposes newly changed APIs. Enabling this may bring breaking changes (see the breaking change policy).

Breaking change policy

We do the following steps when an item is changed/removed on latest toolchain:

  1. Deprecate an existing one
  2. Declare a new one under the unstable feature
  3. After a month or more since releasing a new version that contains that change, remove/change an older one

For instance, if const FOO value is changed from 3 to 4, we expose the newer one, i.e. 4, under unstable first. So the unstable users should notice the change on the first release since deprecating. After a month or more, all the users should notice it.

Platform support

The following table describes the current CI set-up:

Target Min. Rust XCode build ctest run
x86_64-apple-darwin 1.33.0 10.3.0 - 13.1.0
aarch64-apple-darwin nightly 13.1.0 - -
aarch64-apple-ios nightly 13.1.0 - -
aarch64-apple-ios-sim nightly 13.1.0 - -
x86_64-apple-ios nightly 13.1.0 - -


This project is licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in mach by you, as defined in the Apache-2.0 license, shall be triple licensed as above, without any additional terms or conditions.

To locally test the library, run:

TARGET=x86_64-apple-darwin RUST_VERSION=nightly ./ci/run.sh

where you can replace the TARGET and RUST_VERSION with the target you want to test (e.g. aarch64-apple-darwin) and the Rust version you want to use for the tests (e.g. stable, 1.33.0, etc.).