A modern Rust rewrite of the Linux 0.11 kernel — boots on
i386in QEMU, runs a self-hosted Unix-style userland.
$ cd kernel && make run … Welcome to linux-0.11-rs. https://github.com/Poseidon-fan/linux-0.11-rs (login: 0 @ linux-rs :: Wed May 27 09:35:43 UTC 2026) [root@linux-rs /root]# ls /bin | wc -l 69
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.
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.sh) with pipelines, control flow, functions, glob, command and arithmetic substitution, and an interactive line editor with Tab completion and history.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.mbrkit and miniximg are standalone crates, useful on their own for any project that touches MBR or Minix v1 images.make run.tools/build-disk.sh
cd kernel && make run # VGA console cd kernel && make run-console # serial console (-nographic)
You'll land at a shell prompt in /root. Try:
ls /bin # browse what's installed echo $((1 + 2 * 3)) # arithmetic expansion for f in /etc/*; do echo $f; done # for loop + glob fact() { if [ $1 -le 1 ]; then echo 1; else echo $(($1 * $(fact $(($1-1))))); fi; } fact 7 # → 5040 ec<TAB> # completes to `echo ` ↑ # walks command history
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:
tools/install-tools.sh # installs mbrkit, miniximg, ktest onto PATH
End-to-end tests boot the kernel under QEMU and drive the serial console from short .ktest scripts under ktest/suites/.
tools/run-tests.sh # run everything tools/run-tests.sh --suite=shell # one suite tools/run-tests.sh --test-set=shell.basic # one test tools/run-tests.sh --disable-reboot # share one QEMU across tests
kernel/ The kernel itself
user_lib/ std-style user-space library
user_lib_macros/ proc-macro: #[user_lib::main]
user_program/ ~80 coreutils + the `sh` shell
ktest/ end-to-end test runner driving QEMU over serial
mbrkit/ MBR disk-image CLI (also on crates.io)
miniximg/ Minix-fs image CLI and library
rootfs/ disk-image content template (/etc, /root, …)
tools/ developer scripts (build-disk.sh, run-tests.sh, …)
tutorial/ mdbook walkthrough (work in progress)
.devcontainer/ ready-to-use dev environment
cargo install mdbook cd tutorial && mdbook serve --open
See LICENSE.