EmiBSD
An operating system in Rust, grown from the faithful port of the OpenBSD kernel.
Ferffy — half Ferris (Rust's crab), half Puffy (OpenBSD's pufferfish).
What is this
EmiBSD is derived from EmiBSD.LZ, the file-by-file port of the OpenBSD kernel to Rust. LZ ports OpenBSD; EmiBSD redesigns what LZ ported.
- OpenBSD's behaviour is the specification. The system-call ABI and everything userland sees never change: OpenBSD's own userland runs unmodified.
- The inside changes, subsystem by subsystem. The goal is zero
unsafein the kernel:sys/kernel/andsys/abi/are#![forbid(unsafe_code)]crates;sys/hal/is the only crate withunsafe, every site proved. - A standalone
#![no_std]kernel for amd64 and arm64, booted by its own boot(8)/efiboot or by Limine, run in QEMU.
Status
kernel::vm whole, both pmaps in halFull detail in STATUS, the plan in ROADMAP, the record of what went well and what failed in JOURNAL.
Documentation
- Setup
Build and run EmiBSD in QEMU on macOS (Apple Silicon) or Linux.
- Architecture
Why the tree looks the way it does: crates, boundaries, the HAL.
- Zero unsafe in the kernel
The design and the decisions behind a kernel the compiler refuses to build with one
unsafe. - Roadmap
Native milestones N0 onward, each with its exit criteria.
- Status
Where the work is right now: last milestone met, what is next, blockers.
- The native process
How a subsystem moves from the LZ tree into the native kernel.
- C → Rust idioms
One row per settled idiom: what OpenBSD C does, what we write, why.
- LZ shape → native shape
What the faithful port writes to mirror C, and what the native system writes instead.
- Journal
One section per milestone: what worked, what failed, rules that had to change.
- Syncing with EmiBSD.LZ
The monthly procedure for pulling the port's commits into this tree.
- Zero unsafe, v1
The superseded first version, kept as the record of how it was measured and why it was dropped.
Quick start
git clone https://github.com/enavarre-cl/EmiBSD
cd EmiBSD
just build # arm64 kernel (amd64 waits for N10)
just run-arm64 # boots it in QEMU, serial on stdio
Toolchain and QEMU setup, per platform, in SETUP.