An operating system in a browser tab — kernel, filesystem, terminal, shell and
45 programs, written from scratch in freestanding C++20 and compiled to
WebAssembly. It deploys as a static site: no server, no special headers.
kernel.wasm is 182 KiB.
0.6 was about what a shell script can count on. 0.7 is about what a program
being ported here assumes is already underneath it, before it does anything of
its own.
What changed
/devis a filesystem, with four devices in it./dev/randomhands out
the host's own bytes for as long as anything reads;/dev/urandomis a
ChaCha20 with fast key erasure, seeded once;/dev/nulland/dev/zeroare
what they are everywhere else.cmd >/dev/null 2>/dev/nullworks, and so does
either stage of a pipeline redirecting there.- A program can read a character.
src/proc/file.his a buffered stream —
get()a codepoint,put(),getline(), a sticky error, a flush at exit —
sowhile ((c = get()) ...)is finally an expressible loop. It costs no
syscall, and ten programs stopped paying one per row of output. $RANDOM, and it is a CSPRNG.Sys::Randomis answered in the calling
process's own worker, so it costs no round trip at all.fstaton a descriptor.Sys::FStat, which is what/bin/unzipneeded to
stop sizing an archive by path and then reading it by descriptor.- An exclusive create.
O_EXCL, and/bin/editnow writes beside the file
and renames — a save that is killed leaves the old text, not an empty file. - No cell holds a codepoint the renderer can throw on.
catof a binary
file used to kill the terminal; the UTF-8 decoder now validates what it had
been letting through for eight milestones. - The browser's own menus reach the terminal.
Edit → Select All,Copy,
CutandPastework from the menu bar, and the right button raises the
browser's text menu instead of the one it has for an image. mounttakes a special and a mount point — and refuses it, on purpose:
there is nothing yet that turns a special into a filesystem, so it says so
rather than being silently absent.
The process ABI moved
PROC_ABI is 19, up from 18. A program built against the 0.6 SDK is refused
at exec on a 0.7 kernel — a diagnostic, not a crash. Rebuild against the SDK
below, and re-sign any repository whose packages you rebuilt.
The archives
braam-0.7.201-af23af1.zip — the site. Unpack it in a web root and serve it.
braam-sdk-0.7.201-af23af1.zip — the SDK, for building a program against an
installed prefix.