How a childhood idea becomes an operating system – commit by commit.
| long ago | As a little boy, Max has the idea: an operating system of his own. |
| Oct 28, 2026 19:30 | Kickoff. |
| 19:41 | Project folder and Git repo created. |
| 19:45 | First own tool runs: c (copy), on the Mac. |
| 19:54 | First boot: nb starts in QEMU, nk shows a prompt – own font, keyboard, serial console. |
| 20:03 | Catalog complete: 409 tools with short names. |
| 20:26 | The own C compiler compiles itself. |
| 20:45 | Kernel built only with our own compiler, assembler and linker – boots. |
| 21:09 | First download images: USB/disk (.img) and live CD (.iso), boot in QEMU. |
| 21:10 | The editor e is here. |
| 21:19 | Kernel can do processes: all 44 system calls, ELF loader, pipes, signals, RAM file system. |
| 21:20 | Our own libc is in place. |
| 21:22 | The compiler can do RISC-V 64. |
| 21:23 | ESP32-C5 becomes the first small device. |
| 21:25 | Kernel reads SATA disks and FAT. |
| 22:29 | Shell and tools run on NULLos itself – the kernel starts s at boot. |
| 23:10 | All of NULLos – kernel, libc, 280 tools – built only with our own compiler, runs. |
| 23:16 | cc compiles itself on NULLos. |
| Oct 29 00:05 | Own Python interpreter py: test suite green (on the Mac). |
| 00:07 | Shell and 319 tools on NULLos, double-checked in QEMU (picture). |
| 00:42 | German keyboard with umlauts. |
| 00:51 | py compiles all 635 files of the Python 3.15 standard library without errors. |
| 00:53 | Python runs on NULLos. |
| 01:07 | Sockets in the kernel: IPv4 and IPv6, for now inside the machine. |
| 01:29 | NULLos is online: virtio-net and e1000, own TCP/IP stack with IPv6 and IPv4. |
| 01:32 | Two NULLos talk to each other over TCP. |
| 01:54 | The font gets real lowercase letters and all of Latin-1. |
| 02:19 | Via SSH onto NULLos: OpenSSH from the Mac logs in to the NULLos SSH server. Plus ip, dns, nc, dl, htp and pi run on NULLos. |
| 07:02 | Security from the ground up: plan with 40 measures and rules for all sessions, program ID card. |
| 07:10 | Own TLS 1.3 – dl fetches HTTPS, on NULLos too. |
| 07:28 | Devices under /dev, disks as block devices, mounting. |
| 07:33 | Python counts as done: the test suite runs on NULLos the same as with CPython. |
| 07:39 | Secure randomness in the kernel. |
| 07:43 | SMEP/SMAP on. |
| 07:44 | vc clones Git repos over HTTPS – on NULLos. |
| 07:57 | Stack protection and W^X in the kernel. |
| 08:50 | All CPUs run (SMP). |
| 08:56 | Firewall on out of the box. |
| 11:48 | Max decides the permission model: power of attorney instead of mandatory rules, rights only flow downward. |
| 12:00 | Permissions in the kernel: users, enforced ID card, einschr, system folders read-only even for the admin. |
| 12:42 | Hardened malloc in the libc, tools with stack protection by default. |
| 12:48 | Rights now only flow downward in the kernel too: the ID card of the starter limits everything it starts. |
| 14:35 | The kernel with all CPUs builds with our own cc. |
| 15:42 | Naming = allowing: the shell is the broker, what you type, the program may use. |
| 16:51 | Mac keyboard layouts de-mac and us-mac. |
| Oct 30 01:51 | NVMe driver: read and write, in QEMU. |
| 02:10 | USB: xHCI, hubs, keyboard, mouse, sticks. |
| 02:41 | virtio 1.x and a launcher for Apple's virtualization; TLS server. |
| 02:56 | RDP – server and client, soon after with NLA login. |
| 04:20 | Kernel mounts USB and NVMe – both run in QEMU on main. |
| 04:49 | ARM64 boots to the shell, shortly after also as a guest in Apple's virtualization. |
| 05:22 | ACPI with its own AML interpreter – NULLos powers off properly. |
| 06:06 | RISC-V 64 in QEMU; shortly after, sound via virtio-sound and Intel HDA. |
| 07:16 | NULLos 0.3 – new release. |
| 07:20 | Raspberry Pi 4 (in QEMU) up to the prompt. |
| 09:19 | Protection against cold boot attacks: memory is zeroed, RAM wiped at power-off. |
| 09:28 | USB devices only with approval – protection against BadUSB. |
| – | First boot on a real PC from a USB stick coming soon |
| – | nullos.de goes online coming soon |
Automatically from the Git log (without the factories' “belegt” commits).