EmiBSD

An operating system in Rust, grown from the faithful port of the OpenBSD kernel.

View on GitHub
Ferffy, the EmiBSD mascot: a spiky orange crab in front of a shield

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).

  • License: ISC
  • Rust: stable
  • Targets: amd64 · arm64
  • Runs in: QEMU
Not for production. EmiBSD is an experiment. It runs only in QEMU, and its crypto, network and storage code is unaudited. Do not use it to protect real data or real networks.

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 unsafe in the kernel: sys/kernel/ and sys/abi/ are #![forbid(unsafe_code)] crates; sys/hal/ is the only crate with unsafe, 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

Milestone met
N3 — Memory
2026-10-18 · kernel::vm whole, both pmaps in hal
Under way
N4 — Processes
timeout, task, extent done (N4.1); proc, credentials, fork, exit, scheduling next
Unsafe in crates (2026-10-21)
kernel 0 · abi 0 · hal 106
bsd (LZ tree, being replaced) 10 103

Full 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.