Learn systems
by building them.

Go below the abstractions. Build a container runtime, follow a packet, and write code that talks to hardware.

Real code. A real Linux machine.
Right here in your browser.

Start with containers No setup. No account. Your work stays on this device.
Container lab01 / Root filesystem
Containerfile
FROM minimal-rootfs
COPY hello /hello
CMD ["/hello"]
An image is a filesystem.
/
├── bin/ the tools
│ └── busybox
├── hello your program
└── proc/ the kernel’s view
root@lab:/work# chroot rootfs /hello
Hello from the other side.Lesson preview
Inspect the primitive. Then build the abstraction.

Choose a system to build

Small exercises. Visible consequences.

01

Containers

Start here

Build a container runtime from Linux primitives.

Root filesystems → namespaces → isolation
02

TCP & networking

Build a protocol. Watch every packet.

Raw bytes → packet parsing → controlled networks
03

Linux drivers

Program hardware that lives in your browser.

MMIO registers → device control → instrumentation

A disposable machine.
A lasting understanding.

Start a small RISC-V machine, boot Linux, and get root access. Your code runs in the browser’s sandbox. Restart the machine whenever you need a clean slate.

Look inside the environment
  1. Your browserEditor · terminal · instruments
  2. WebAssembly machineTinyEMU · RISC-V 64-bit
  3. Linux + your codeReal processes · real syscalls