Build your own shell
fork, exec, pipes and redirection. Build a POSIX command interpreter that runs real programs.
C · Rust · Go · Zig
namespaces, cgroups and chroot. Isolate a process by hand and understand what Docker does when it starts an image.
Build it in your language
The tester treats your program as a black box: any language works. These are just the most convenient ones for this project.
A container is not a virtual machine, nor a new technology: it's an ordinary Linux process that the kernel has lied to about what it can see. This challenge teaches you to tell those lies.
You'll isolate a process by hand with namespaces, change its filesystem root, limit its CPU and memory with cgroups, and drop its privileges. By the end you'll have your own run able to boot the filesystem of a real image.
8 stages across 4 phases. Every stage comes with its guide and its tests: you move on when they pass.
Spawn a child with its own PID, UTS and mount namespaces.
An extracted rootfs, pivot_root, and mounting /proc.
cgroups v2 for CPU and memory, and behaviour when they're reached.
Network namespace, user namespaces, and capability dropping.
run-style command-line interface.fork, exec, pipes and redirection. Build a POSIX command interpreter that runs real programs.
C · Rust · Go · Zig
Build and train a neural network from first principles: forward pass, loss functions, and gradient descent optimization.
Python · TypeScript
Mark-and-sweep from scratch. Manage memory the way the runtimes you use daily do without you noticing.
C · C++ · Rust