A QNX-inspired operating system with selectable kernels

Hacker News Top Products

Summary

QSOE 0.1, a QNX-inspired operating system with selectable kernels (Skimmer microkernel or seL4), has been released. It targets 64-bit RISC-V hardware and is available under Apache-2.0.

No content available
Original Article
View Cached Full Text

Cached at: 06/28/26, 10:59 PM

# QSOE Systems Source: [https://qsoe.net/](https://qsoe.net/) ## QSOE A QNX\-inspired operating system with selectable kernels\. **News:**QSOE 0\.1 is out — the first public release of the unified two\-kernel system \(June 2026\)\.[Read the announcement →](https://qsoe-dev.blogspot.com/2026/06/qsoe-project-v01-is-released.html) QSOE ships in two variants that share one userspace and one build system\.QSOE/Nruns on**Skimmer**, a microkernel written from scratch for this project \(SMP by design\);QSOE/Lruns on**seL4**as its kernel\. Both variants, when compiled, offer the kernel and initrd files directly usable in e\.g\. U\-Boot loader\. The userspace is**100% identical**across both variants; the only parts produced per\-kernel are`taskman`, the task manager, and`libc\.so`— the C library, which is around 85% shared at the source level and diverges only at the thin layer where it meets the kernel\. The design follows the QNX Neutrino tradition: a small kernel with everything else in userspace, synchronous message\-passing IPC, and the resource\-manager model for services\. QSOE targets 64\-bit RISC\-V \(`RV64`,`Sv39`\) on the SiFive HiFive Unmatched \(`FU740`\), with QEMU used for day\-to\-day development\. Both QSOE variants now boot on real hardware\. Released under Apache\-2\.0\. DownloadsQSOE can be built from source or installed from pre\-built binaries\. Ready\-made images for each release are published at[github\.com/qsoe\-dev/dl](https://github.com/qsoe-dev/dl)\(current release:**0\.1**\)\. The files are: - [`skimmer\.bin`](https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/skimmer.bin)— the Skimmer microkernel: the kernel of the**QSOE/N**variant\. A raw binary image, loaded by the bootloader \(or QEMU\) together with the userspace package below\. - [`modpkg\.cpio`](https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/modpkg.cpio)— the module package: the shared QSOE userspace \(taskman,`init`, the C library, the shell, drivers and utilities\) as a CPIO archive\.**QSOE/N**boots it as an initrd alongside`skimmer\.bin`\. - [`qsoe\-l\-qemu\.elf`](https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/qsoe-l-qemu.elf)— the**QSOE/L**variant \(on the seL4 kernel\) as a single, self\-contained ELF for the QEMU`virt`machine\. It bundles the elfloader, the seL4 kernel, taskman and the userspace together — nothing else is needed to boot\. - [`qsoe\-l\-sifive\.elf`](https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/qsoe-l-sifive.elf)— the same QSOE/L image, built for the SiFive HiFive Unmatched \(FU740\) board\. - [`mrbml\-riscv64\.efi`](https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/mrbml-riscv64.efi)—**mr\-bml**, QSOE's own bootloader \(an EFI application for RISC\-V\)\. It can load either variant and drives the boot menu on real hardware\. - [`nvme\.img\.gz`](https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/nvme.img.gz)— a ready\-to\-run, self\-booting QEMU disk image \(GPT\)\. Its EFI partition holds`mr\-bml`, and an on\-disk root holds both kernels — so QEMU boots straight to the mr\-bml menu, no`\-kernel`needed\. The fastest way to see QSOE run; see**Running under QEMU**below\. - [`virtio\.img\.gz`](https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/virtio.img.gz)— a companion root disk used*only*when running**QSOE/L**under QEMU \(stock seL4 predates the interrupt controller QEMU's NVMe needs, so it mounts its root from a virtio disk instead\)\. Not needed for QSOE/N or for real hardware\. In short: to**run it in QEMU**, grab`nvme\.img\.gz`\(plus`virtio\.img\.gz`for QSOE/L\) and see**Running under QEMU**\. To put it on**real hardware**, you need`mrbml\-riscv64\.efi`plus the kernels —**QSOE/N**uses`skimmer\.bin`\+`modpkg\.cpio`,**QSOE/L**uses one of the`qsoe\-l\-\*\.elf`images — and see**Installation**\. Running under QEMUThe quickest way to see QSOE run — no hardware, no`\-kernel`juggling\. The`nvme\.img`download is a self\-booting UEFI disk: QEMU's firmware runs`mr\-bml`from it, and mr\-bml's menu starts either variant straight off the disk\. #### You need - `qemu\-system\-riscv64`— version**11\.0\.1 or newer**for QSOE/N \(its NVMe needs the AIA interrupt controller\)\. - edk2 RISC\-V UEFI firmware — on Debian/Ubuntu, the`qemu\-efi\-riscv64`package\. - The launcher`run\-nvme\.sh`from the[os](https://gitlab.com/qsoe/os)repository — it wraps the right QEMU machine, firmware and disks for each variant, so you don't have to\. #### Run it ``` # unpack the image(s) — add virtio.img.gz only if you want QSOE/L gunzip nvme.img.gz virtio.img.gz # point the launcher at them and pick a variant from its menu NVME_IMG=./nvme.img VIRTIO_IMG=./virtio.img ./run-nvme.sh ``` Pass`n`or`l`to skip the menu \(`\./run\-nvme\.sh n`\)\. The script selects the matching QEMU machine automatically — QSOE/N on the AIA machine with an NVMe root, QSOE/L on the PLIC machine with the virtio root disk\. The mr\-bml menu and the system console both appear on your terminal; choose a variant and it boots to a`login:`prompt\. Log in as`root`with password`QSOE`\. InstallationReal hardware, real disk\. QSOE 0\.1 boots on the SiFive HiFive Unmatched \(FU740\); the SpaceMiT K3 is a future target\. This assumes a board already running Linux — you'll be placing files on its existing EFI and boot partitions, so familiarity with the board's firmware is expected\. The boot model is simple:**mr\-bml**lives in the EFI System Partition; it reads its menu and the kernels from an**ext2/3/4**partition; the chosen variant then mounts its own root from a**fs\-qrv**partition\. #### Steps 1. Copy`mrbml\-riscv64\.efi`into your ESP as`EFI/BOOT/BOOTRISCV64\.EFI`\(the UEFI removable\-media path\), or register it with`efibootmgr`as a boot entry\. 2. On your boot/root filesystem, create`/boot/qsoe/`and copy the kernels there:`skimmer\.bin`\+`modpkg\.cpio`for QSOE/N,`qsoe\-l\-sifive\.elf`for QSOE/L\. 3. Create`/boot/mr\-bml/mr\-bml\.cfg`with one entry per variant — for example: ``` # /boot/mr-bml/mr-bml.cfg — adjust the mainfs= partition to your disk menuentry 'QSOE/N (Skimmer)' { kernel /boot/qsoe/skimmer.bin mainfs=/dev/nvme0n1p8 modpkg /boot/qsoe/modpkg.cpio } menuentry 'QSOE/L (seL4)' { kernel /boot/qsoe/qsoe-l-sifive.elf mainfs=/dev/nvme0n1p8 } ``` The`mainfs=`device names the partition holding the QSOE root filesystem \(fs\-qrv\) — set it to whichever partition you've devoted to QSOE on your board\. On real hardware there is no QEMU virtio split:*both*variants drive the NVMe disk directly\. Building from sourceQSOE is built with a`riscv64\-linux\-gnu\-`cross toolchain \(rv64gc\) and a stock`make`; QEMU is handy for testing\. The umbrella repository orchestrates the build and pulls in the component repositories that match its release tag\. ``` git clone https://gitlab.com/qsoe/os cd os make prepare # fetch the components for this tag (see component.list) make # build both variants: QSOE/N, then QSOE/L make dist # optional: the QEMU disk images (nvme.img.gz, virtio.img.gz) ``` QSOE/L additionally shallow\-clones the seL4 kernel during`make prepare`\. The build produces exactly the files on the Downloads list\. The whole tree is Apache\-2\.0; the source lives under[gitlab\.com/qsoe](https://gitlab.com/qsoe)\. DocumentationThe QSOE manuals, published as PDF alongside the releases: - [`Design\.pdf`](https://github.com/qsoe-dev/doc/raw/main/Design.pdf)— the architecture: the two\-kernel model, taskman, the IPC and resource\-manager design\. - [`UserGuide\.pdf`](https://github.com/qsoe-dev/doc/raw/main/UserGuide.pdf)— installation, the shell, the basic commands, the text editor and the utilities\. - [`ProgrammingBook\.pdf`](https://github.com/qsoe-dev/doc/raw/main/ProgrammingBook.pdf)— programming for QSOE, including the**Resource Server Framework**chapter\. - [`AppPortingGuide\.pdf`](https://github.com/qsoe-dev/doc/raw/main/AppPortingGuide.pdf)— porting Unix \(and QNX\) software to QSOE: what to account for — no`fork\(\)`, no`brk\(\)`,`select\(\)`via`poll\(\)`, and the rest\. RoadmapIt is often said that the Linux kernel has no roadmap\. QSOE does — the ten releases that carry it from today's**0\.1**to the unified**1\.0**are mapped out\. A working plan, not a contract: milestones may shift as the work reveals what's really next\. - `0\.1`—**First public release\.**Two\-kernel foundation, shared userspace, read\-only`fs\-qrv`at`/usr`, interactive getty \+ login, sources opened\.*\(current\)* - `0\.2`— Text\-mode console on the GK208 \("Kepler"\): a watchable on\-device display, so the real\-time audio work can be seen on hardware, not just over serial\. - `0\.3`— First writable filesystem: qrvfs gains file create/unlink,`O\_CREAT`/`O\_TRUNC`,`realpath`and symlink resolution\. - `0\.4`— The canonical dual\-panel file manager: QSOE's flagship application, exercising the writable filesystem and the userspace end to end\. - `0\.5`— First`deva\-hdmi`audio device, with the priority / interrupt / scheduling groundwork the hard\-real\-time path needs\. - `0\.6`— Comprehensive conformance suites, and the audio real\-time package \(up to N hard\-real\-time tasks on an N\-CPU system\)\. - `0\.7`—to be definednearer the time\. - `0\.8`— Second hardware target \(SpaceMiT K3, RVA23\-class\) and the AIA interrupt architecture \(IMSIC/APLIC\), so MSI/MSI\-X works uniformly across boards\. - `0\.9`— QNX\-libc compatibility push: recompile and run a target set of QNX\-source utilities, closing the remaining libc gaps\. - `1\.0`— First stable release: API comparable to QNX 6\.x; intended for porting QNX userland software \(`fork`→`posix\_spawn`\)\. ## Other projects Earlier and adjacent work\. - [GateMate PC](https://gitlab.com/gatemate/pc)— a personal computer built on the Cologne Chip GateMate FPGA\. - [GateMate System/359](https://gitlab.com/gatemate/s359)— an IBM S/360\-inspired FPGA implementation of a computing system, with I/O channels and a powerful macroassembler\. - [QRV](https://qsoe.net/qrv.html)— a QNX port to RISC\-V \(historical\); fed hardware bring\-up lessons into QSOE/N\. ## Services Consulting and development in low\-level and systems software\. - Microkernel\-based operating systems - System libraries and low\-level runtime - Virtualization for real\-time applications - RISC\-V systems bring\-up - AI\-assisted development for FPGAs Engagements range from focused bring\-up work to longer\-term architecture and implementation\. Get in touch to discuss scope\. ## About QSOE Systems is the independent practice of**Yuri Zaporozhets**, a systems software developer with 25\+ years of experience building low\-level software — kernels, operating systems, runtimes, and the hardware bring\-up underneath them\. ## Contact Email is the best way to reach me\. [yuriz@qsoe\.net](mailto:[email protected])

Similar Articles

QSOE: QNX-inspired OS with dual-kernel architecture

Hacker News Top

QSOE project v0.1 is released, providing a QNX-compatible operating system with two microkernel variants (custom Skimmer kernel and seL4-based), shared userspace, and support for SiFive Unmatched RISC-V hardware.

One man, two kernels, and a lot of RISC-V

Hacker News Top

Yuri Zaporozhets of QRV Systems has built a RISC-V-based personal computer and a mainframe on an FPGA, and rewritten QNX twice. His latest OS QSOE is gaining attention in the FOSS world.

QBE – Compiler Back End

Hacker News Top

QBE is a compact, hobby-scale compiler backend that provides 70% of the performance of industrial optimizing compilers in 10% of the code, supporting amd64, arm64, and riscv64 with a simple SSA-based intermediate language.