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.

mbrkit

miniximg

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.

yuan-xy/Linux-0.11

Many parts of this project were also inspired by or implemented with

reference to rcore-os/rCore-Tutorial-v3.

rcore-os/rCore-Tutorial-v3

📄 License

See LICENSE.

LICENSE