SmileyOS · bare-metal Rust · 32-bit x86

A tiny OS for kids who code.

Meet SmileyOS — a bare-metal operating system written from scratch in Rust. It turns old 32-bit PCs into safe, offline coding playgrounds with a real desktop, a real terminal, and Smilium, a tiny built-in language.

Not Linux, not a toy. Its own kernel, its own scheduler, its own shell — small enough to read end-to-end, real enough to boot on hardware you already have.

Free forever. No ads. No accounts. No internet required after the first boot. Boots in your browser in ~10 seconds.

No ads, no trackers·Runs offline·Indie-made
~90k lines of Rust 40+ shell commands Built-in games 5 companion books
SmileyOS desktop — menu bar, dock and a running terminal, rendered by the SmileyOS kernel
Try it right now

Boot SmileyOS in your browser.

The full ISO runs on a real x86 emulator in a single browser tab. No sign-ups, no installs — click boot and you're at the SmileyOS desktop in seconds.

Live demo · powered by v86

Boot SmileyOS in your browser

Runs entirely on your device. Nothing is uploaded. The ISO is ~10 MB plus a 2 MB WebAssembly emulator — after that the OS boots straight onto a virtual 32-bit PC.

32-bit x86 · 256 MB RAM · VGA 640×480 · read-only CD-ROM
Six screens, one OS

Real desktop. Real IDE. Real games.

Click any screenshot to see it full-size. Every pixel is rendered by the SmileyOS kernel — no host OS, no fall-back to anything else.

SmileyOS desktop with menu bar, dock and a running terminal
The desktop

A real desktop. Not a textbook screenshot.

Menu bar, dock, draggable windows, theme switcher — everything you'd expect from a desktop OS, rendered by the SmileyOS GUI stack on top of a hand-written kernel.

  • Dockable apps with live previews
  • Five built-in themes you can hot-swap
  • Multi-window, scriptable from the shell
Smilium Playground IDE with syntax-highlighted code, a file tree and a lesson sidebar
Smilium Playground

The built-in IDE for Smilium.

Syntax highlighting, a file browser, 40 guided lessons. Press F5 to run, F4 to drop into the next lesson. Tab completion turns ten keystrokes into one.

  • Tab-completion for every keyword
  • Friendly error messages, no segfaults
  • 40 lessons, all in plain text on disk
Smilium game running in the IDE — a 2D scene with sprites
Game mode

Write a 2D game. Press F5. Play it.

The same IDE compiles your Smilium source to a 60 fps game loop with sprites, input and collisions — no toolchain, no setup, no leaving the editor.

  • Sprite atlases, keyboard input, collisions
  • Fullscreen preview with Shift+F5
  • 10 annotated example games to remix
Built-in Breakout game running on SmileyOS
Built-in games

Snake, Breakout, Whack-a-Mole, Type Attack.

Four games ship with the OS — fully playable on bare metal. They're also Smilium source, so kids can open them, see how they work, and tweak them.

  • All four games are open Smilium source
  • Edit the code, see the change instantly
  • High scores save to the local filesystem
SmileyOS Paint app — a graphical drawing tool
GUI apps

Paint, Calculator, Files — real graphical apps.

The same GUI primitives Smilium @ui programs use also power the bundled apps. Columns, Rows, Buttons and TextFields, all running through a real compositor.

  • Build apps with declarative widgets
  • Same toolkit as the system apps
  • Save and load files from the OS filesystem
SmileyOS booting on a real 32-bit PC — BIOS POST followed by the SmileyOS bootloader
Bare metal

Boots on a real PC. No host OS underneath.

Flash the ISO to a USB stick, plug it into a 32-bit machine, and POST → SmileyOS kernel → desktop. No VM layer, no browser tab — just bare metal and a keyboard.

  • Real i686 hardware, QEMU, or v86 in the browser
  • Custom bootloader, no GRUB chainloading
  • ~10 MB ISO, fits on any old USB stick
Who it's for

One OS. Three kinds of people.

SmileyOS is one OS, but it answers three different questions: "how do I get my kid to code?", "how do I teach a classroom?", and "how does an OS actually work?".

Self-paced

Kids, 8–14

Safe, offline, distraction-free.

From clicking a file to writing a game in a real language — at their own pace, with friendly error messages. No ads. No accounts. No internet required after the first boot.

Classroom-ready

Parents & teachers

A curriculum in a box.

One USB stick, an old PC, five companion books, 40 in-IDE lessons. Zero subscriptions, zero trackers — every byte lives on the machine in front of the student.

Open & hackable

Curious tinkerers

Peek under the hood.

A platform abstraction layer, drivers, a filesystem, a scheduler, a compositor and a tiny language — all in one small, readable Rust codebase you can fit in your head.

The honest question

Why a whole OS — when Linux already exists?

Fair question. Linux distros, kid-friendly toys and online editors are all great at one thing. SmileyOS exists for the part they all miss: a quiet, complete machine a child can fully understand.

A full Linux distro

Ubuntu · Mint · Fedora

"Powerful, modern and free. The right answer for grown-up Linux users."

But it can't…

  • Hundreds of menus, settings, daemons
  • Updates, package managers, GPU drivers
  • No built-in beginner programming language
  • No "open the source for this app" button
A toy / kids OS

Scratch · Pico-8 · Tic-80

"Beautiful introductions to programming. Great in their own boxes."

But it can't…

  • Live inside another OS — no kernel, no shell
  • Block-based or single-purpose
  • No real file system, no real terminal
  • Can't teach what an OS actually is
An online code editor

Repl.it · CodePen · Glitch

"Zero-setup coding on whatever device you happen to have."

But it can't…

  • Needs internet, accounts, sometimes a card
  • Trackers, ads, paywalled features
  • Nothing to teach about the machine itself
  • Kids never see "this is my computer"

SmileyOS is the one OS a kid can read. 288 source files. One terminal. One IDE. One small language. Everything inside the machine, nothing on the internet, nothing they didn't ask for.

Under the hood

A real OS, not a demo.

Kernel, scheduler, filesystem, drivers, GUI stack and shell — all hand-written in Rust. The terminal below is the same muscle memory real developers use every day on Linux and macOS.

Caught on camera

Not a VM. Not a browser demo.
Booting on a real PC.

SmileyOS flashed onto a USB stick, plugged into a 32-bit machine, POST → kernel → desktop. No host OS underneath, no browser tab — just bare metal, a keyboard, and a smile.

Watch on YouTube
~90k
lines of Rust

Kernel, HAL, drivers, Smilium interpreter, GUI — all hand-written.

288
source files

Small, readable modules. Open any file and understand it.

40+
shell commands

A complete userland: files, processes, themes, apps.

27k+
lines of writing

Five companion books. Every snippet here comes from them.

SmileyOS Terminal
smiley@me > pwd
/home/kiddo
smiley@me > ls
games/ snake.smy sprites/ notes.txt
smiley@me > smilium -g snake.smy
▸ starting Snake… press ESC to quit
smiley@me > theme list
dark · light · blue · purple · green
smiley@me > help
40 commands available. Try: apps, playground, theme.
smiley@me >

Over 40 commands, all hand-implemented.

Typed into a PS/2 keyboard, parsed by the SmileyOS shell, answered by real kernel syscalls. No cheating, no shelling out — this is the whole userland.

Navigation

Find your way around.

  • pwdShow the current folder.
  • lsList files and folders here.
  • cd <dir>Enter a folder.
  • cd ..Go up one folder.

Files

Read, write, move, delete.

  • cat <file>Print a file to the screen.
  • write <f> <text>Write text to a new file.
  • smile <file>Open the built-in editor.
  • cp · mv · rm · renameCopy, move, delete and rename.
  • find <pattern>Search for files by name.
  • chmod -p <name>Change file or folder permissions.

Folders

Shape your disk.

  • mkdir <name>Create a new folder.
  • rmdir <name>Delete an empty folder.

System

Real OS, real syscalls.

  • uptimeHow long SmileyOS has been running.
  • memoryRAM usage snapshot.
  • ps · kill <pid>List and stop running processes.
  • date · timeCurrent date and clock.
  • reboot · shutdownRestart or halt the machine.

Apps & games

Launched via apps / smilium, not bare words.

  • appsOpen the app menu — calculator, paint, file manager and more.
  • playground [file.smy]Open the Smilium IDE.
  • smilium -s/-g <file>Run a shell or game program directly.
  • smilium -g snake.smyStart a built-in game (Snake, Breakout, Mole…).

Customize

Make it yours.

  • theme <name>Switch the color scheme.
  • theme listSee every available theme.
  • historyReplay your recent commands.
  • resetconfigNuclear reset of all settings.

Type help in the booted OS for the live list — it stays in sync with the kernel.

The Smilium language

A tiny language. Three modes. Endless projects.

Smilium programs start with directives — @core is always on, and you pick one of @shell, @game or @ui to say what kind of program you're building.

Shell modeHello, Smilium
@core
@shell
 
outLine("Hello, World!");
outLine("Welcome to Smilium!");
Game modeDraw a yellow square
@core
@game
 
func update() {
clearScreen(Colors.black);
fillRect(70, 50, 20, 20, Colors.yellow);
}
UI modeA button in a column
@core
@ui
 
Column main = Column();
Button myButton = Button("Click me!");
main.add(myButton);

The whole language fits on one screen.

Directives, types, control flow, and the keys you'll press in Smilium Playground.

Directives

Pick a mode, opt into features.

  • @coreAlways-on: variables, conditions, loops, functions.
  • @shellText I/O — outLine, in, ask, sleep, rand.
  • @gameDraw frames, keyboard, sprites, full 60 fps loop.
  • @uiDeclarative widgets — Columns, Rows, Buttons, TextField.
  • @systemOptional: files, time, system info.

Data types

Strict typing, friendly errors.

  • number64-bit float. Whole or decimal.
  • stringUp to 32 chars. Use + to concat.
  • booleanStrict true / false.
  • number[]Fixed arrays, up to 16 elements.
  • sprite8×8, 16×16 or 32×32 pixel grid.

Control flow

Familiar C-like syntax.

  • if / elseBranch on any boolean expression.
  • while (…) { }Loop while a condition holds.
  • for (i=0; i<n; i=i+1)Classic counted loop.
  • func name() { }Reusable block; return values allowed.

IDE shortcuts

Playground does the typing for you.

  • TabAutocomplete keyword or expand snippet.
  • F5Run or stop your program.
  • Shift + F5Fullscreen game preview.
  • F4Jump into the built-in lessons.

Ready for the deep end?

Six complete Smilium programs — loops, pixel-art sprites, onClick handlers and a form that saves to disk. Paste any of them into Smilium Playground, press F5, and it runs.

Shell modeGreet the user by name
@core
@shell
 
string name = ask("What's your name? ");
outLine("Hi, " + name + "!");
Shell modeGuess the number, with loops
@core
@shell
 
number secret = rand(1, 10);
number guess = 0;
while(guess != secret) {
guess = inNumber("Guess 1-10: ");
if(guess < secret) outLine("Higher!");
else if(guess > secret) outLine("Lower!");
}
Game modeMove a square with arrow keys
@core
@game
 
number x = 70; number y = 50;
 
func update() {
if(keyDown("Left")) x = x - 1;
if(keyDown("Right")) x = x + 1;
clearScreen(Colors.black);
fillRect(x, y, 10, 10, Colors.yellow);
}
UI modeClickable counter
@core
@ui
 
number count = 0;
 
Label display = Label("Count: 0");
Button plus = Button("+1");
 
plus.onClick(func() {
count = count + 1;
display.setText("Count: " + toStr(count));
});

Press Tab. Finish the line.

Every keyword and built-in function is Tab-completable in Smilium Playground. Type fo → Tab and you get a full for loop skeleton. Kids ship more code because they type less of it.

Friendly errors, on purpose.

Strict types explained in plain English. Messages like "expected number, got string on line 7" — never a segfault, never a stack trace.

Curriculum · work in progress

Read the books. Run the lessons.

SmileyOS is a one-person project. The five companion books and 40 in-IDE lessons are in active development — every code snippet on this page comes straight from the current drafts.

Lesson book

Language Reference

The complete Smilium teacher's guide — directives, syntax rules, every built-in function with examples.

Beginner

Terminal Guide

Shell commands, file system, aliases, pipes — the same muscle memory real developers use every day.

Ages 8–12

Shell Programming

From "Hello, World!" to mini calculators and quizzes. Conditions, loops and functions explained story-first.

Ages 10–14

Game Development

Draw, animate, collide, and ship a full Snake-clone. Plus 10 complete annotated example games.

Ages 10–14

UI App Development

Columns, Rows, Buttons and TextFields. Build forms, dynamic lists, and a working TODO app that saves to disk.

In the IDE

40 guided lessons

Press F4 anywhere in Smilium Playground. Each lesson is a few lines, a run button, and a small challenge.

FAQ

Common questions, honest answers.

A bare-metal operating system written from scratch in Rust for 32-bit x86 (i686) machines. It has its own kernel, scheduler, filesystem, drivers, compositor and shell — and it ships with Smilium, a tiny built-in language for shell scripts, 2D games and GUI apps. Boots on real hardware, in QEMU, or in your browser via v86.

Help it grow

Two ways to help SmileyOS ship.

SmileyOS is built by one developer on nights and weekends. Whether you want to fund the next release or run a pilot with real students, there's a path for you.

Donors

Fuel the next release.

Community donations let me pay real illustrators and layout designers so the books get professionally produced — and eventually printed for classrooms. Every coffee goes straight into kernel work, Smilium features and new lessons.

Why we use donations and how it helps.

Teachers

Pilot it in your classroom.

SmileyOS is in active development. If you'd like to pilot it with a small group of students — or just watch it grow — reach out and we'll loop you in. Zero cost, zero tracking, one USB stick per student.