7+The shell and a cave
builtA text adventure where rooms are folders and items are files. The kid learns cd, ls and cat without knowing they are learning anything. Twelve lessons with a tutor that watches what they type and nudges in purple.
KidDOS is a free, open-source fake computer inside your real one, for kids about 7 to 13. It opens fullscreen, hides everything else, and shows a CRT terminal with a blinking cursor. A real Unix shell, a virtual drive, a manual, BASIC, sandboxed C and Go, and games whose source code sits right there to be read and changed.
No internet. No mouse. Nothing to break.
The kid types hi. The machine talks back.
KidDOS 0.5.0 (80 cols x 25 rows) Welcome to your computer. It is all yours. You cannot break it. Hello! I am KidDOS. Type hi and press Enter. kid@kiddos:~$ hi Hi! I'm your computer. What's your name? > Kiddo Nice to meet you, Kiddo. I'll remember that. ☺ That's the machine saying hello back. It only knows words from its list. ☺ Now type help. It shows every word the machine knows. kid@kiddos:~$ echo "I am a robot" > /dev/speaker (the computer says it out loud) kid@kiddos:~$ ls bin games welcome.txt kid@kiddos:~$ cat welcome.txt Hi! This is your computer. Everything in it is yours. kid@kiddos:~$
Why
The computers a lot of us grew up on were finite, knowable objects. A bored kid could sit down and read the whole thing. Every file had a reason to exist. Every config was text. That is how a lot of us became programmers, and nobody planned it.
Sit a kid in front of a modern computer and tell them to explore it. Windows sells them things. Linux moves everything every release. macOS hides the file system entirely. All three have more configuration surface than a person can read in a lifetime, and the browser is one click away with an infinite feed engineered so they never get bored again.
KidDOS is small on purpose. Every file in it was put there by a person with a reason, and the kid can read the reason. It is a computer sized for one small human with time on their hands.
The whole argument is in the original post, and the teaching side of it is in the guide for parents.
It grows with the kid
The vocabulary is Unix, never DOS, so the muscle memory transfers. A kid who spends a year in KidDOS should open a real terminal and feel at home.
A text adventure where rooms are folders and items are files. The kid learns cd, ls and cat without knowing they are learning anything. Twelve lessons with a tutor that watches what they type and nudges in purple.
PRINT, INPUT, FOR. Snake, Tetris, Hangman and the rest are BASIC listings the kid can cat, copy into their home folder, change the speed, break, and fix. Every game is something to steal from.
Real compilers, in a pack a parent installs. cc and goc compile to WebAssembly and run in a sandbox with a fuel meter, so a while(1) cannot hang the machine and a bad pointer only crashes the kid’s own program. Rogue ships as the example, source included.
ARM assembly on a small fake CPU, with a debugger that shows the source, the registers and memory one instruction at a time, so “what is a computer actually doing” stops being a mystery. And when they are done with the sandbox, an earned way out into the real operating system.
vi is on the machine, but locked. Prison Escape teaches :q! by trapping the kid inside it. Then vi-quest walks ten lands where hjkl are movement spells, and finishing earns /bin/vi for good. This shipped in v0.5, and we still want to see the kid's face.
What's inside today
Not a plan. Built and public. A kid can boot, explore, make files, read the manual, follow the lessons, write in BASIC, compile C and Go in a sandbox, earn vi, and play ten games they can take apart.
ls, cd, cat, mkdir, rm, pipes, redirects, globbing, history, tab completion. Unknown commands get “Did you mean ls?”, never an error code.
One SQLite file. The kid can rm -rf the whole thing and the only consequence is a lesson. Reset is one command in parent mode.
Games, lessons, man pages, the tutor’s progress, high scores. If it is on the drive, the kid can ls it, cat it, cp it, and learn from that.
man ls works. So does man -k. Sixty pages written for a child, not a sysadmin.
Hello, Where am I?, Files, Building, Reading the manual, The machine can talk, Pipes, Editing, Scripts, Variables, Your first program, Make a game.
EndBASIC bound to the screen and the drive, with SPEAK, BEEP, KEY$ and TICK. edit opens any file. newgame rocket scaffolds a cartridge.
cc and goc compile to WebAssembly and run under wasmtime with fuel and memory limits. The compilers come as packs a parent installs; the machine ships without them.
A real modal editor, locked at first. Prison Escape teaches :q!, vi-quest teaches the rest, and /bin/vi appears when the kid finishes.
echo "I am a robot" > /dev/speaker makes the computer talk. That one line keeps a seven-year-old busy for an hour. That is the hook.
A password-protected chord. Exit fullscreen, reset the drive, read the log, install or share cartridges. Nothing else crosses to the real machine.
Ten cartridges
A cartridge is a folder under /games with a manifest and an entry in BASIC, shell, or compiled WebAssembly. Adding one never needs a recompile. cat /games/snake/snake.bas is the whole point.
Run it
Prebuilt binaries and the C and Go toolchain packs are on the download page. To build it yourself you need Rust; the first build takes a few minutes, after that it starts in a second.
It goes fullscreen on purpose. The parent chord is Ctrl+Alt+Shift+P (Cmd works as Ctrl on a Mac). Type parent, choose a password the first time, then exit-fullscreen or shutdown.
$ git clone https://github.com/nurked/kiddos $ cd kiddos $ cargo run --release -p kiddos
Windowed while developing
KIDDOS_WINDOWED=1 cargo run -p kiddos Drive it without a window
cargo run -p kiddos-headless -- - Start the next kid fresh
parent → reset-drive → yes Watching a kid use it
docs/KID-SESSION.mdRoadmap
The core is designed once and versioned. Content iterates freely. The full plan, with the arguments behind each decision, lives in kiddos-plan.md.
Console, virtual drive, kernel with processes and pipes, CRT renderer, the shell, 25 builtins, the manual, parent mode.
Lessons 1 to 10, progress and badges, edit, scripts, variables, /dev/speaker with speech on all three OSes, the cave adventure.
EndBASIC bound to the console and the drive. Cartridge format, .kdc sharing, snake, tetris, sokoban, guess, hangman, typing. Lessons 11 and 12.
wasmtime with fuel and memory limits and a kiddos import module. cc from a clang slice and goc from TinyGo, each a toolchain pack a parent installs. Rogue, a dungeon crawler in C, as the proof.
A modal editor engine with vi registered but locked. Prison Escape teaches :q!, then vi-quest walks ten lands (hjkl, w/b, 0/$, gg/G, x, dd, yy/p, /, i/a/Esc, :wq). Finishing unlocks /bin/vi.
320x200 pixel mode with a 256-color palette, double-buffered, in all three bindings: pixel, line, rect, fill, blit, palette, text, flip. Key down and key up events. BASIC gets GFX. Pixel mode is in; a paint cartridge is landing; then Doom through cc with Freedoom data.
A small AArch64 subset on our own interpreter: as, a three-pane debug with source, registers and memory, dis and hexdump. Linux syscall numbers so what a kid learns here is true outside. Lessons 13 and 14, and bug-hunt: eight tiny programs, one planted bug each.
Large font, high-contrast palette, screen reader passthrough via TTS. Kiosk hardening per OS and a Raspberry Pi image. The macOS app is already signed and notarized; Windows signing comes here.
Later: a cartridge SDK and community carts, a fake modem for LAN-only BBS play between two KidDOS boxes, and maybe a dedicated box with a CRT-looking screen.
Questions parents ask
Writing
Why this exists, what shipped, what a kid did with it.
For grown-ups
Not an emulator, not a Linux distro, not a browser app. A fantasy computer whose GPU is a text grid and whose game is learning to drive a computer.
Would you put it in front of your kid? Would you clone it, run it, and tell us what happened? If this already exists under another name, say so. If it is pure nostalgia, make that argument properly.