Skip to content
Back to the catalog
Project shellSystemsIntermediateComing soon

Build your own shell

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.

Guide language

The stage guides read in this language. Only languages this project is fully translated into show up here; the interface language does not change.

What this project is about

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.

Roadmap

12 stages across 4 phases. Every stage comes with its guide and its tests: you move on when they pass.

  1. Phase 13 stages

    The minimal loop

    Read a line, run a binary and wait for it to finish. Your first child process.

  2. Phase 23 stages

    Built-ins and the PATH

    cd, pwd and exit, PATH lookup, and correct exit codes.

  3. Phase 34 stages

    Pipes and redirection

    Connect processes with pipe, redirect files with dup2 and chain several commands.

  4. Phase 42 stages

    Signals and background jobs

    A Ctrl-C that doesn't kill you, background jobs and zombie cleanup.

Before you start

An interactive command interpreter covering the essentials of POSIX: a prompt, command line parsing, built-ins (cd, exit, pwd), running binaries found on the PATH, chained pipes, input and output redirection, and foreground and background process management.

  • container-runtime
    Coming soon

    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.

    Expert8 stages~16 hSystems
    namespacescgroupsprocesses

    Go · C · Rust

  • garbage-collector
    Coming soon

    Build your own garbage collector

    Build a garbage collector from scratch. Implement mark and sweep, track live objects and reclaim memory like the runtimes you use every day.

    Expert9 stages~18 hSystems
    memorymark and sweeppointers

    C · C++ · Rust

  • neural-network
    Beta

    Build your own neural network

    Build a neural network from scratch. Implement the forward pass, loss functions and gradient descent, then train and run your own model.

    Beginner6 stages~6 hSystems
    machine learningneural networksmath+1

    Python · TypeScript