The kernel
UEFI hands off to a Rust kernel without bootstrap assembly. It runs preemptive tasks on multiple
processors, uses an EEVDF scheduler and checks that memory is never both writable and executable.
Linux programs, unchanged
Ferrix implements the Linux system-call ABI used by threads, signals, fork,
execve and more. Programs can use glibc's dynamic loader. It also runs 32-bit x86 programs.
Drivers in ring 3
devmgr starts the virtio disk, network, graphics, input and console drivers as
processes. An IOMMU limits their device access on x86-64 and AArch64. A crashed driver can restart.
btrfs, read and write
The root filesystem is a persistent btrfs volume. A power-failure test kills QEMU during a write,
mounts the volume again and checks it with the host's btrfs check. It has run across 249 seeds.
Networking
Inside Ferrix, curl can fetch over HTTPS and git can clone a repository.
The network stack includes TCP, UDP, IPv6 and netlink; Ferrix also serves SSH.
A userland of its own
ferrousli is Ferrix's C library, written in Rust. The zinc shell runs oh-my-zsh.
There is also an init and service manager, plus the uutils command-line tools.
A desktop
hyprix is Ferrix's Wayland compositor. It reads hyprland.conf, tiles windows
and draws through virgl. Chrome can play video with sound on the desktop.
Real hardware
Ferrix has booted from the SD card of an STM32MP157D-DK1 board and on all eight cores of a
Pixel 7. Most of the tests run in QEMU, where --accel auto selects KVM, HVF or WHPX.