Build it yourself
The fastest way to understand a system is to build a small one. Each project here tells you why it’s worth doing, breaks it into milestones you can finish one weekend at a time, names the ideas each milestone teaches and the traps that catch everyone, and points you at the chapters and references that fill in the rest. You write the code.
A game engine
A small 2D engine with a fixed-timestep loop, an entity-component system, a batched sprite renderer, input, collisions and sound, built so it can grow a third dimension later.
A web browser engine
A browser that fetches real pages over HTTPS, parses HTML into a DOM, applies CSS, lays out boxes and text, paints them to a window and follows links, with JavaScript as the final stretch.
A tiny kernel with a superpower
A kernel that boots in QEMU on x86-64 or RISC-V, handles interrupts, pages memory, runs user programs on a preemptive scheduler, and then does one thing general-purpose kernels don't: run a single app, meet deadlines, or pass messages.
Docker, from scratch
A container runtime in a few hundred lines: namespaces, a root filesystem, cgroup limits, layered images and a network, until docker run stops being magic.
A database storage engine
A key-value store that grows into a real engine: fixed-size pages on disk, a B+tree or an LSM tree, a write-ahead log, crash recovery and a buffer pool, with a small SQL layer on top if you keep going.
A Redis clone
A single-threaded server that speaks RESP to the real redis-cli, holds strings, lists, hashes and sorted sets, expires keys, persists to disk with snapshots and an append-only file, and streams its writes to a replica.
A TCP/IP stack in userspace
A network stack that runs as an ordinary process on a TAP device: Ethernet, ARP, IPv4, ICMP and UDP, then a TCP that handshakes, retransmits, respects windows and backs off under congestion, until curl can fetch a page through it.
A replicated key-value store with Raft
A key-value store that runs on three or five nodes, elects a leader, replicates every write through a Raft log, survives crashes and restarts, compacts with snapshots, and stays linearizable while a test harness cuts the network apart.
A programming language
A small language of your own design, first as a tree-walking interpreter and then as a bytecode VM with a garbage collector, fast enough to run real programs.
A Unix shell
A working interactive shell with pipes, redirection, builtins and job control, small enough to read in one sitting and good enough to use for a day.
A Game Boy emulator
A CHIP-8 interpreter in a weekend, then a Game Boy emulator with a real CPU, memory map, cartridge banking, timers, graphics, input and sound that plays the cartridges you own.
Git, from scratch
A version control tool that writes real Git objects, so the actual git binary can read your commits and yours can read its repositories, packfiles included.