Build your own container
namespaces, cgroups and chroot. Isolate a process by hand and understand what Docker does when it starts an image.
Go · C · Rust
fork, exec, pipes and redirection. Build a POSIX command interpreter that runs real programs.
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 shell is the program you talk to your operating system with every single day: it reads a line, works out what it means and puts the kernel to work. Inside it is surprisingly small, and understanding it changes how you read a terminal error forever.
In this challenge you build your own: an interpreter that spawns real processes, chains commands with pipes, redirects input and output and returns correct exit codes. By the end you'll run ls | grep .txt > out.txt in a shell you wrote yourself.
12 stages across 4 phases. Every stage comes with its guide and its tests: you move on when they pass.
Read a line, run a binary and wait for it to finish. Your first child process.
cd, pwd and exit, PATH lookup, and correct exit codes.
Connect processes with pipe, redirect files with dup2 and chain several commands.
A Ctrl-C that doesn't kill you, background jobs and zombie cleanup.
namespaces, cgroups and chroot. Isolate a process by hand and understand what Docker does when it starts an image.
Go · C · Rust
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