Skip to content

Braam 0.7

Latest

Choose a tag to compare

@sergev sergev released this 26 Aug 02:47
· 8 commits to main since this release

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

  • /dev is a filesystem, with four devices in it. /dev/random hands out
    the host's own bytes for as long as anything reads; /dev/urandom is a
    ChaCha20 with fast key erasure, seeded once; /dev/null and /dev/zero are
    what they are everywhere else. cmd >/dev/null 2>/dev/null works, and so does
    either stage of a pipeline redirecting there.
  • A program can read a character. src/proc/file.h is a buffered stream —
    get() a codepoint, put(), getline(), a sticky error, a flush at exit —
    so while ((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::Random is answered in the calling
    process's own worker, so it costs no round trip at all.
  • fstat on a descriptor. Sys::FStat, which is what /bin/unzip needed to
    stop sizing an archive by path and then reading it by descriptor.
  • An exclusive create. O_EXCL, and /bin/edit now 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. cat of 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,
    Cut and Paste work from the menu bar, and the right button raises the
    browser's text menu instead of the one it has for an image.
  • mount takes 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.