linux-0.11-rs
A modern Rust rewrite of the Linux 0.11 kernel — boots on i386 in
QEMU, runs a self-hosted Unix-style userland.
linux-0.11-rs rebuilds the 1991 Linux 0.11 kernel from scratch in modern
Rust. It keeps the original system's semantics — what it does — while
rethinking how it's expressed: stronger types, clearer module boundaries,
idiomatic abstractions everywhere. The kernel boots on emulated i386
hardware, runs a full init → shell → coreutils stack, and ships with the
tooling to build your own bootable image in one command.
✨ Highlights
A kernel with most of what Linux 0.11 had — processes, virtual memory
with demand paging and CoW fork, the Minix v1 filesystem, ATA disk
driver, VGA + PS/2 console, 8250 serial console, TTY layer, signals, and
the complete syscall table.
A Rust user-space "std" — user_lib mirrors the public shape of
std::{fs, io, path, env, process, time} so user programs read like
ordinary Rust, not like syscall plumbing.
A real userland — 80+ coreutils plus a hand-written POSIX-subset
shell (sh) with pipelines, control flow, functions, glob, command and
arithmetic substitution, and an interactive line editor with Tab
completion and history.
One-command images — tools/build-disk.sh compiles every user
program, lays them out into a Unix-style filesystem, and packs the
result into a bootable disk image.
Companion image tools — mbrkit and
miniximg are standalone crates, useful on their own for
any project that touches MBR or Minix v1 images.
Devcontainer included — clone, open in VS Code, hit "Reopen in
Container", run make run.
🚀 Quick start
You'll land at a shell prompt in /root. Try:
Outside a devcontainer you'll also need a recent Rust nightly (pinned in
rust-toolchain.toml), qemu-system-i386, the x86_64-linux-gnu-*
cross-binutils, and the local image/test tools:
✅ Tests
End-to-end tests boot the kernel under QEMU and drive the serial console
from short .ktest scripts under ktest/suites/.
🗂️ Repository layout
🛣️ Project status
Kernel — substantially feature-complete relative to Linux 0.11.
Floppy support is intentionally out of scope; ongoing work is on polish
and tooling.
User library — covers what the shell and coreutils need today.
Userland — usable for real interactive work.
Tutorial — early draft; the long-term plan is a complete
build-from-scratch walkthrough.
📚 Tutorial
🙏 Acknowledgements
Thanks to yuan-xy/Linux-0.11 for
providing the original Linux 0.11 kernel source used as an important
reference during development.
Many parts of this project were also inspired by or implemented with
reference to rcore-os/rCore-Tutorial-v3.
📄 License
See LICENSE.