Demos

Real grix runs, in your browser. The grix kernel boots in QEMU compiled to WebAssembly, and grix's host side is its own Rust, compiled to WebAssembly too. Every run boots a fresh machine. Edit the command, tick a capability, and run it again.

Hello

A static C program gets its arguments and environment, writes to stdout and stderr, and exits with status 7.

Least privilege

This program only opens a socket. Without net the kernel refuses, and says which capability would have allowed it. Tick net and run it again. (No traffic can leave a web page, so here net only lets the socket exist.)

Only what you import

The filesystem holds exactly the imports, plus a few files the kernel makes itself. Try cat /etc/shadow, or ls /.

stdin

Processes

A shell pipeline forks. Without process the shell can't fork, and the denial says why.

A shell

bash, with busybox for the rest, in a terminal: line editing, job control and Ctrl-C. Try ls -l / | head, sleep 100 then Ctrl-C, or echo hi > /tmp/x (that needs fs_write: stop, tick it and start again).

A Python REPL

Try import os; os.listdir('/'), or open('/tmp/x', 'w') without fs_write.

Threads and Go

Unmodified Go: its runtime starts threads, and os/exec forks, pipes and kills children.

Python

Alpine's Python 3.12, with its standard library imported as a root filesystem.

Node.js