Posts

I Wanted to Build QSOE 0.4 on Azure Linux 4.0 -- Here's What Happened

QSOE is built every day on Debian. The 0.4 release was tested from a fresh clone on Debian too, and that's exactly the problem: a build that has only ever seen one distro silently learns that distro's habits. So on Monday evening, a day after the 0.4 release, I tried something different: a brand-new Azure Linux 4.0 virtual machine in QEMU, an 8 GB disk, a minimal install, and nothing else. RPM packages, tdnf , no apt anywhere. The rule for the evening was simple: clone, type make , and write down every single thing that breaks. I had Claude Code keep the log while I typed the errors in. The obvious ones A minimal image really is minimal. Before the first line of QSOE was compiled, I had installed git , make , wget , tar , pip3 and, a bit later than I should have, the host gcc . None of that is surprising. What was pleasant: xz , mtools , dosfstools and cpio were already there. The seL4 side of the build has a host check that lists everything it needs in one go. It ...

QSOE 0.4 released

QSOE 0.4 is out today. In component terms: Component What it is 0.3 0.4 nq QSOE/N — the Skimmer microkernel and its taskman 0.30 0.36 lq QSOE/L — the seL4 taskman, its seam and its kernel patches 0.26 0.32 libc the C library, libqsoe and crt0 0.19 0.25 quser the shared userspace 0.18 0.24 qupkg the package manager, new in this release — 0.2 mr-bml the bootloader, shipped alongside 1.0 1.0 0.3 gave you a disk that keeps what you wrote. 0.4 gives you a system you can listen to, and one you install rather than unpack. QSOE now plays sound on every board it runs on, on both kernels, and plays it cleanly while the rest of the machine is busy. The base system is a package, a package manager adds to it, and a C compiler installed that way has built and run its first program on QSOE's own filesystem. Under all that, the two kernels moved closer together than ever: one boot archive boots both, the C library is one binary fo...

QSOE audio: Crystal Clear

QSOE's 0.4 milestone has a one-line definition of done: continuous playback is audible on an HDMI audio extractor . Not "the driver loads", not "the counters look right" — audible. The extractor, a small FeinTech box that takes HDMI in and gives optical S/PDIF out, arrived on Tuesday. Two evenings later I have heard QSOE play music on two RISC-V boards, under both of its kernels, and for the first time ever on a system built on seL4. This is the story of those two evenings, because almost nothing went the way the plan said, and every detour taught something. Tuesday: the Unmatched The first board was the SiFive HiFive Unmatched, with an NVIDIA GK208 card in its PCIe slot. The card's HDMI output carries audio through an HD Audio controller that sits beside the GPU; the chain is GPU → HDMI → extractor → TOSLINK → an old JVC receiver. Linux went first, to prove the chain. It was silent. The receiver had not been asked to select its digital input since the...

qfpc: Pascal Compiler for QSOE (FPC-based)

Image
qfpc 0.1 is tagged today. It is an Object Pascal compiler for RISC-V 64 and for QSOE, and for nothing else: one target, one dialect, no other operating system and no other machine. It compiles itself, its run-time library runs on the boards, and its first user, qupkg , runs its whole test cycle on the K3 as a qfpc-built program that QSOE's own linker linked. The first commit is dated 12 September. This post is about the nine days between, and about the decisions, which were the part of the work that was mine.   In layers, in the order the compiler goes through them: layer what it is units lines base types, containers, messages, files, settings, the target 14 5.6 k lex characters to tokens, the directives, conditional compilation 11 4.3 k sym symbols, types, symbol tables, the unit file 33 16.5 k nodes the parse tree, the type check, the first pass 60 28.1 k parse the parser 28 12.8 k cg registers, the calling convention, the allocators, the primitives 24 12.5 k ncg cod...

seL4 for SpacemiT K3

Image
The QSOE 0.3 notes say the K3 is QSOE/N only. That was true of the release set and, for the three days before it, false of the lab: on the evening of 14 September seL4 16.0.0 booted to user space on the SpacemiT K3 — 16 harts, at the first attempt — and by the small hours of the 16th QSOE/L was logged in on it, over the serial line and on the screen, with the NVMe, the USB keyboard and the network attached and, once up, nothing from the kernel on the console at all. The kernel is k3sel4 , version 16.0.0-qsoe-k3-0.2 . This post is about what it took, because seL4 16.0.0 could not have booted on this board: the SoC has none of the things the RISC-V kernel assumes, and one thing it does not expect. seL4 16.0.0 assumes the K3 has k3sel4 does a PLIC no PLIC anywhere: an S-mode APLIC in MSI delivery mode feeding 16 IMSIC interrup files (the RISC-V AIA) a driver for both, behind the kernel’s six-function interrupt-controller contract the SBI v0.1 legacy calls, for everything ...

QSOE 0.3 released

 QSOE 0.3 is out today. In component terms: Component What it is 0.2 0.3 nq QSOE/N — the Skimmer microkernel and its taskman 0.26 0.30 lq QSOE/L — the seL4 taskman and its kernel seam 0.22 0.26 libc the shared C library and crt0 0.15 0.19 quser the shared userspace 0.14 0.18 mr-bml the bootloader, shipped alongside 0.9 1.0 0.2 gave you somewhere to write a file. 0.3 gives you somewhere to keep it. The qrvfs root on the NVMe is read-write on both kernels now, a checker looks it over before every mount and repairs what a lost power supply leaves behind, and a stress that fills the disk to its last block and reads every byte back passes on the boards. That is the spine of the release. The other headline is that QSOE/L stopped being ten times slower than QSOE/N, for a reason that was hiding in plain sight. As always both kernels — QSOE/N on Skimmer, QSOE/L on seL4 — carry one identical userspace, and a good fraction of what follows is bu...

QSOE 0.2 release

Image
The second QSOE release, v0.2, is out . As before it is a single numbered drop of both kernel variants, the boot loader, the shared userspace and libc: QSOE/N v0.26 , with the custom "Skimmer" kernel. QSOE/L v0.22 , which works together with seL4 version 16.0.0. mr-bml v0.9 , the GRUB-derived boot loader. quser v0.14 , the shared userspace: the shell, the drivers, the servers and the utilities. libc v0.15 . 0.1 was a system you watched over a serial cable. 0.2 is one you can sit at. devc-hficon paints a text console on a graphics controller that the firmware hands over — a GK208 on the Unmatched, the SoC display block on the K3 — and devu-xhci enumerates a USB keyboard that types into it, so a login: prompt appears on the monitor and answers. The shell gained pipelines (without fork() , which QSOE deliberately does not have), command substitution, job control, and a Ctrl-C that reaches the command and then the shell; an orthodox two-panel file manager and a full-screen...