Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fitzgen/mach
A rust interface to the Mach 3.0 kernel that underlies OSX.
https://github.com/fitzgen/mach
ffi mach macos osx rust
Last synced: about 2 months ago
JSON representation
A rust interface to the Mach 3.0 kernel that underlies OSX.
- Host: GitHub
- URL: https://github.com/fitzgen/mach
- Owner: fitzgen
- License: other
- Created: 2015-02-01T02:26:53.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2022-08-19T20:25:59.000Z (about 2 years ago)
- Last Synced: 2024-05-09T09:54:00.725Z (5 months ago)
- Topics: ffi, mach, macos, osx, rust
- Language: Rust
- Homepage: https://docs.rs/mach
- Size: 146 KB
- Stars: 79
- Watchers: 7
- Forks: 28
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
[![Build Status][travis_ci_badge]][travis_ci] [![Latest Version]][crates.io] [![docs]][docs.rs]
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**.# Usage
Add the following to your `Cargo.toml` to conditionally include mach on those
platforms that support it.```toml
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.mach]
version = "0.3"
```The following crate features are available:
* **deprecated** (disabled by default): exposes deprecated APIs that have been
removed from the latest versions of the MacOS SDKs. The behavior of using
these APIs on MacOS versions that do not support them is undefined (hopefully
a linker error).# 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 | 6.4 - 10.0 | ✓ | ✓ | ✓ |
| `i686-apple-darwin` | 1.33.0 | 6.4 - 10.0 | ✓ | ✓ | ✓ |
| `i386-apple-ios` | 1.33.0 | 6.4 - 9.4 [0] | ✓ | - | - |
| `x86_64-apple-ios` | 1.33.0 | 6.4 - 10.0 | ✓ | - | - |
| `armv7-apple-ios` | nightly | 6.4 - 10.0 | ✓ | - | - |
| `aarch64-apple-ios` | nightly | 6.4 - 10.0 | ✓ | - | - |[0] `i386-apple-ios` is deprecated in XCode 10.0.
# License
This project is licensed under either of
* A 2-clause BSD License ([LICENSE-BSD](LICENSE-BSD)), or
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or
http://opensource.org/licenses/MIT)at your option.
# Contribution
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 TRAVIS_RUST_VERSION=nightly ./ci/run.sh
```where you can replace the `TARGET` and `TRAVIS_RUST_VERSION` with the target you
want to test (e.g. `i686-apple-darwin`) and the Rust version you want to use for
the tests (e.g. `stable`, `1.33.0`, etc.).[travis_ci]: https://travis-ci.org/fitzgen/mach
[travis_ci_badge]: https://travis-ci.org/fitzgen/mach.png?branch=master
[crates.io]: https://crates.io/crates/mach
[Latest Version]: https://img.shields.io/crates/v/mach.svg
[docs]: https://docs.rs/mach/badge.svg
[docs.rs]: https://docs.rs/mach/