Inside the environment
A small, disposable Linux machine makes the important parts visible: processes, namespaces, packet bytes, and the hardware registers your code touches.
Open the first lab- Browser applicationNext.js · lazy CodeMirror editor · xterm.js terminal · IndexedDB work
- WebAssembly emulatorTinyEMU · RISC-V 64-bit · controlled device interface
- Purpose-built Linux environmentBusyBox · TinyCC · disposable machine state
Real guest execution
The terminal connects to a Linux serial console. Shell commands and C programs run inside the emulated machine. Container checks observe filesystem and namespace behavior. The packet lesson compiles a C parser and tests it with binary inputs. The sensor lesson maps an emulator device through Linux’s /dev/mem interface.
Small on purpose
Machine artifacts download when you start an environment. The base includes the kernel, a small userspace, and the C tools used by these lessons. The browser caches assets, and student files are stored separately.
| VM artifact | Compressed size* |
|---|---|
| bbl64.bin | 0.010 MB |
| kernel-riscv64.bin.gz | 1.953 MB |
| rootfs.bin.gz | 3.705 MB |
| tinyemu.wasm.gz | 0.068 MB |
| tinyemu.js | 0.009 MB |
| worker.js | 0.003 MB |
* Binary artifacts are measured precompressed files. JavaScript and BIOS figures use gzip compression estimates; the repository’s browser report measures actual network responses.
Your work, your device
The editor saves to IndexedDB as you type. Run, test, restart, and Save /work also snapshot guest files. Use Save /work after creating files directly in the terminal. Restarting restores that snapshot into a clean machine. Reset exercise replaces the editor’s starter file after confirmation.
Browser storage can be cleared or evicted. Export code you want to keep elsewhere. Accounts are optional; the learning environment does not need a database connection.
The security boundary
Root access applies to the emulated machine. Guest code has no host filesystem access, remote execution endpoint, or arbitrary Internet connection. Network fixtures and the virtual link stay inside the browser. Educational tests provide feedback, not tamper-proof certification.
Current limits
- TinyEMU is compact and inspectable, but its upstream release and bundled Linux kernel are old. The kernel is a contained teaching environment, not a production security reference.
- The driver exercise is a Linux userspace MMIO driver. Loadable kernel modules, interrupt handlers, and DMA exercises are planned.
- The packet inspector replays labeled reference traffic. The initial exercise parses packet bytes in Linux; live guest NIC traffic also passes through a controlled wire with an ARP peer. A student TCP stack is future work.
- Modern Chromium is the primary browser target. Other engines need separate validation.
- Offline reuse depends on a production build, a prior visit to the lesson, and cached VM assets. A first visit needs the application server.
Extend the lab
The repository includes ARCHITECTURE.md, COURSE_AUTHORING.md, guest sources, reproducible artifact scripts, and automated tests. New tracks use the same lesson schema and guest protocol.