
QRV Betriebssystem
QRV ist eine grundlegende Adaption und Neuimplementierung des QNX Neutrino
6.4 Betriebssystems für moderne 64-Bit-Hardware, mit RISC-V (rv64g)
als primärer Architektur und x86-64 als sekundärem Ziel. Das Projekt
begann am Heiligabend 2020. Der Name QRV vermeidet bewusst jede
Assoziation mit der Marke QNX.
QRV ist ein vollständiges Betriebssystem, nicht nur ein Kernel. Der Mikrokernel
ist sein Herz – aber der größere Teil der Arbeit steckt in allem, was ihn
umgibt. Am bemerkenswertesten ist taskman, der Prozess-/Speicher-/Pfad-Manager
im Benutzermodus (QNXs procnto), der grundlegend überarbeitet und aus dem
Kernel in den Benutzerbereich verlagert wurde; daneben wurden die C-Bibliothek,
die Gerätetreiber, das Dateisystem, der dynamische Lader und die System-Server
alle portiert, 64-Bit-sauber gemacht und an vielen Stellen wesentlich
neu geschrieben. Der Mikrokernel ist bewusst klein; das Betriebssystem
darum herum ist der Ort, an dem der Großteil von QRV lebt.
Dies ist kein Fork, der lediglich alten Code mit einem neuen Compiler
übersetzt. Es ist eine sorgfältige, modulweise Portierung auf ein echtes
LP64-Modell, bei der die proprietäre procnto-Grenze abgebaut, die
IFS/Startup-Mechanik ersetzt und – seit den neuesten Versionen – der
Big Kernel Lock des Kernels vollständig entfernt und der Prozess-/Speicher-/Pfad-Manager
aus dem Kernel in einen Benutzermodus-Server ausgelagert wurde.
Diese README beschreibt QRV v0.43.
Der Entwicklungsblog mit der vollständigen Geschichte der Portierung ist unter
https://r-tty.blogspot.com. Eine buchlange Erzählung, The QRV Porting
Story, befindet sich im Quellbaum unter doc/tex/PortingStory/.
QRV wurde in enger Zusammenarbeit mit Claude Code, Anthropics agentischem Codierungstool, entwickelt – ein Großteil der Portierung, des SMP-Debuggings und der Dokumentation (einschließlich dieser README) wurde als Mensch-KI-Paarprogrammierung gemeinsam mit dem Autor durchgeführt.
obtain_proj.sh und der os/-BaumTM_PRIVdevb-nvme und fs-qrvQNX ist ein Mikrokernel-Echtzeitbetriebssystem, dessen bestimmende Idee der synchrone Nachrichtenaustausch ist. In QNX ist der Kernel selbst winzig – er weiß, wie man Threads plant, Nachrichten übermittelt, Signale zustellt, Timer und Interrupts behandelt, und wenig anderes. Alles, was ein monolithisches OS innerhalb des Kernels unterbringen würde – der Prozessmanager, der Speichermanager, das Dateisystem, die Gerätetreiber, der Netzwerkstack – läuft in gewöhnlichen Benutzerprozessen, den sogenannten Ressourcen-Managern, und sie kommunizieren miteinander und mit ihren Clients über dasselbe Senden / Empfangen / Antworten-IPC-Primitiv.
Diese Architektur macht QNX elegant, und genau das bewahrt QRV. Ein Programm, das eine Datei öffnen möchte, sendet eine Nachricht; der Dateisystem-Server empfängt sie, erledigt die Arbeit und antwortet. Der Kernel vermittelt nur das Rendezvous. Das Ergebnis ist ein System, in dem ein Treiber abstürzen und neu gestartet werden kann, ohne den Kernel mitzureißen, in dem die vertrauenswürdige Codebasis in zehntausenden von Bytes gemessen wird und in dem die Grenze zwischen „Kernel" und „Anwendung" eine Nachricht ist, keine Privilegienwand voller Systemaufrufe.
QRV nimmt die QNX Neutrino 6.4 Community-Quellen aus der Zeit um 2009 und bringt dieses Design weiter:
int/uint32_t/pid_t-auf-Zeiger-Kürzungen, von denen
32-Bit-Code wimmelt.qemu-system-riscv64 (die virt-Maschine)
und das SiFive Unmatched (FU740)-Entwicklungsboard. x86-64 wird als
Portierbarkeitscheck am Laufen gehalten.mkifs (QRV
verwendet stattdessen das Standard CPIO-Format); es gibt keine separate
Startup/Kernel-Trennung (Startup ist direkt mit dem Kernel gelinkt); es gibt
keine Callouts und keine Mini-Treiber.Kconfig-Konfiguration, eine
inkrementelle Kernel-Linkierung (Module werden nacheinander hinzugefügt und
getestet, nicht als 32→64-Monolith dem Linker vorgeworfen) und eine
Cross-Compiler-Toolchain (riscv64-linux-gnu-gcc).procnto ist
durchgängig taskman (der Task Manager); alle „Neutrino"-Verweise sind
getilgt.QRV implementiert kein fork() (Programme starten über posix_spawn()),
und es hat kein Demand Paging und keinen Swap – dieselben Entscheidungen,
die QNX selbst in seiner 8.0-Generation getroffen hat.
QRV unterliegt zwei Lizenzen gleichzeitig, und zu verstehen, welche welche ist, ist unerlässlich, bevor Sie etwas bauen oder weitergeben.
QRVs eigener Code ist Apache License 2.0. Alles, was für dieses Projekt
von Grund auf neu geschrieben wurde – die RISC-V-Portierung, das neue
Build-System, die Aufteilung des Taskman im Benutzermodus, die
lock-freie Kernel-Überarbeitung, die von uns verfassten Treiber und
Werkzeuge – ist Apache 2.0. Der vollständige Text steht in
LICENSE.txt.
QNX-abgeleiteter Code unterliegt der BlackBerry QNX Community License (QCL) 2.0. Die Teile von QRV, die von den QNX Neutrino Community-Quellen von 2009 abstammen, bleiben unter der QCL, die die nicht-kommerzielle und akademische Nutzung der abgeleiteten Quellen erlaubt. QRV kann QNX-Code nicht und wird ihn nicht umlizenzieren.
Diese Dual-Lizenz-Realität ist genau der Grund, warum dieses Repository keinen baufertigen Quellbaum enthält. Wir dürfen die QNX-abgeleiteten Quellen nicht weitergeben. Statt den Code auszuliefern, liefert dieses Repository ein Rezept (siehe nächster Abschnitt): eine Karte, wohin jede QNX-Datei gehört, plus die QRV-Patches, die sie transformieren. Sie besorgen sich die QNX-Community-Quellen selbst von ihrem öffentlichen Spiegel, und das Rezept rekonstruiert den QRV-Baum auf Ihrem Rechner. Ihre Kopie gehört Ihnen; wir geben nur unsere eigenen Apache-lizenzierten Patches und Metadaten weiter.
QRV enthält auch Code unter anderen freizügigen Lizenzen – zum Beispiel
BSD-lizenzierte Komponenten, die von FreeBSD übernommen wurden (als Ersatz
für gealterte QNX-Module), einen MIT-lizenzierten Virtio-Blocktreiber mit
xv6-Abstammung und die MirBSD Korn Shell (mksh) als System-Shell.
WHAT_IS_WHAT.md ist die maßgebliche, komponentenweise Aufschlüsselung,
was unter welcher Lizenz steht und woher es stammt – konsultieren Sie sie
immer, wenn Sie sich über eine bestimmte Datei oder ein Subsystem unsicher
sind.
Schließlich enthält das Repository PETITION.md: eine offene Anfrage an
QNX Software Systems und BlackBerry, die historischen Neutrino-Quellen von
2007–2009 unter eine freizügige OSI-zugelassene Lizenz zu stellen. Wenn Sie
möchten, dass die Grundlagen dieser Arbeit eines Tages vollständig frei sind,
ist dieses Dokument der Ort, um Ihren Namen hinzuzufügen.
obtain_proj.sh und der os/-Baum