Build your own container runtime
Build a container runtime from scratch. Isolate processes with namespaces, cgroups and chroot to understand how Docker starts an image.
Go · C · Rust
Build a POSIX shell from scratch. Use fork, exec, pipes and redirection to write a 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.
Project in preparation: we are completing and verifying the implementation path and its tests. The capabilities below describe the project goal; starting the project is not enabled yet.
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.
Build a container runtime from scratch. Isolate processes with namespaces, cgroups and chroot to understand how Docker starts an image.
Go · C · Rust
Build a garbage collector from scratch. Implement mark and sweep, track live objects and reclaim memory like the runtimes you use every day.
C · C++ · Rust
Build a neural network from scratch. Implement the forward pass, loss functions and gradient descent, then train and run your own model.
Python · TypeScript