QRV Operating System: QNX on RISC-V

QRV v0.16 marks a major milestone by successfully booting a working shell and IPC stack on RISC-V. This project ports the classic QNX Neutrino microkernel to the modern RISC-V architecture after years of development.
QRV v0.16: Working Shell, Working IPC
v0.16 boots to a working shell prompt on QEMU. pwd prints the working directory, echo works, ls lists the root filesystem, and non-existent commands report "No such file or directory". The first dynamically-linked user-space program spawns, runs, and exits through the full QNX-style IPC stack.
Getting there took about five to six days of intensive debugging in the final stretch — log analysis, trace output, one fix at a time. The shell prompt # was not some sudden revelation; it appeared early in that process, embedded in pages of rtld: and procmgr: trace lines, surrounded by the next batch of things not yet working. It is satisfying work, but "satisfying" is the right word, not "dramatic". This kind of thing is mostly meticulous and sometimes tedious.
RadiOS: 1998–2005 (and a bit beyond)
I first tried to write an operating system in 1998. After a few failed attempts, RadiOS was born in October 1998, running in 386 protected mode. The entire system was written in x86 assembly to understand the hardware at the lowest level.
By late 2002, after reading about L4 and QNX 6.1, I pivoted RadiOS to a microkernel architecture with QNX 6 compatibility as the goal. The implementation ground forward, achieving message passing and resource management, but the weight of assembly code became too much to bear. The project eventually slowed and stopped by 2015 as adult life took over.
The QNX Sources: SVN, Then SourceForge
In 2008–2009, QNX allowed SVN access to the Neutrino source code. Researchers at HEIG-VD in Switzerland later hosted these sources on SourceForge under the openqnx project for their academic work. This made the full QNX 6.4 kernel, process manager, and C library accessible to the public.
I found this in December 2020 and thought: what if I ported this to RISC-V?
February 27 to March 20, 2026
After a five-year pause, the project resumed in early 2026. The sprint from restart to v0.16 covered about three weeks of intense development:
- v0.2 (Feb 28): Kernel boots to idle; LP64 porting pass completed.
- v0.3 (Mar 1): First ecall from U-mode dispatched and answered.
- v0.4 (Mar 2): Sv39 virtual memory and ELF loading into user-space.
- v0.6–v0.7 (Mar 4–5): IPC data-transfer machinery using RISC-V
_setjmp/_longjmpfor fault recovery.
The success of v0.16 proves that the classic QNX microkernel architecture remains relevant and powerful when paired with modern RISC-V hardware.
Source: Hacker News










