Using libc leads to several issues when dealing with multiarch that make things quite frustrating, and rustix does provide nicer APIs (for the most part -- some are a little wonky). One major annoyance is that building for musl leads to annoying build failures because musl uses differently-sized or differently-signed types, which we don't want to care about because we just want to use the actual kernel APIs. Also, musl is missing wrappers for things like statx(2) which we need to use.
We still need syscall wrappers to provide nice error information, but we can remove most of the internal-only bitflags and unsafe blocks. The only syscall wrapper we don't switch to rustix is openat2 because rustix's API is not designed to be extensible and so we can stick with libc for now.
In the future we might want to consider migrating away from libc entirely (to linux_raw_sys) to reduce the code bloat of having two different syscall wrappers.
Using libc leads to several issues when dealing with multiarch that make things quite frustrating, and rustix does provide nicer APIs (for the most part -- some are a little wonky). One major annoyance is that building for musl leads to annoying build failures because musl uses differently-sized or differently-signed types, which we don't want to care about because we just want to use the actual kernel APIs. Also, musl is missing wrappers for things like statx(2) which we need to use.
We still need syscall wrappers to provide nice error information, but we can remove most of the internal-only bitflags and unsafe blocks. The only syscall wrapper we don't switch to rustix is openat2 because rustix's API is not designed to be extensible and so we can stick with libc for now.
In the future we might want to consider migrating away from libc entirely (to linux_raw_sys) to reduce the code bloat of having two different syscall wrappers.
Fixes #1 Signed-off-by: Aleksa Sarai cyphar@cyphar.com
I hit two issues while working on this, but have applied workarounds so we can merge this without fixing those issues: