
QRV Sistema Operativo
QRV è un adattamento e una reimplementazione da zero del sistema operativo QNX Neutrino
6.4 per hardware moderno a 64 bit, con RISC-V (rv64g) come architettura
principale e x86-64 come target secondario. Il progetto è iniziato la vigilia
di Natale del 2020. Il nome QRV evita deliberatamente qualsiasi associazione con il marchio QNX.
QRV è un sistema operativo completo, non solo un kernel. Il microkernel è il suo
cuore — ma la parte più cospicua del lavoro è stata dedicata a tutto ciò che lo
circonda. La cosa più importante è taskman, il gestore di processi / memoria / path
in modalità utente (il procnto di QNX), che è stato profondamente rielaborato e
spostato dal kernel allo spazio utente; insieme ad esso, la libreria C, i driver
di dispositivo, il filesystem, il loader dinamico e i server di sistema sono stati
tutti portati, resi compatibili con il 64 bit e in molti casi pesantemente riscritti.
Il microkernel è piccolo per progettazione; il sistema operativo che lo circonda è
dove vive la maggior parte di QRV.
Questo non è un fork che si limita a compilare vecchio codice con un nuovo compilatore.
È un porting attento, modulo per modulo, a un vero modello LP64, con il
confine proprietario di procnto smantellato, il meccanismo IFS/startup
sostituito e — a partire dalle release più recenti — il Big Kernel Lock del kernel
completamente rimosso e il gestore di processi/memoria/path spostato dal kernel
a un server in modalità utente.
Questo README descrive QRV v0.43.
Il blog di sviluppo, con la storia completa del porting, si trova all'indirizzo
https://r-tty.blogspot.com. Una narrazione della lunghezza di un libro, The QRV Porting
Story, risiede nell'albero dei sorgenti sotto doc/tex/PortingStory/.
QRV è stato sviluppato in stretta collaborazione con Claude Code, lo strumento di codifica agentico di Anthropic — gran parte del porting, del debugging SMP e della documentazione (incluso questo README) è stata svolta come uno sforzo di programmazione in coppia umano–AI, lavorando insieme all'autore.
obtain_proj.sh e l'albero os/TM_PRIVdevb-nvme e fs-qrvQNX è un sistema operativo real-time a microkernel la cui idea fondamentale è il message passing sincrono. In QNX, il kernel stesso è minuscolo — sa come schedulare thread, passare messaggi, consegnare segnali, gestire timer e interrupt, e poco altro. Tutto ciò che un sistema operativo monolitico metterebbe dentro il kernel — il gestore dei processi, il gestore della memoria, il filesystem, i driver di dispositivo, lo stack di rete — viene eseguito in normali processi utente chiamati resource manager, e comunicano tra loro e con i loro client attraverso la stessa primitiva IPC send / receive / reply.
Questa architettura è ciò che rende QNX elegante, ed è esattamente ciò che QRV preserva. Un programma che vuole aprire un file invia un messaggio; il server del filesystem lo riceve, esegue il lavoro e risponde. Il kernel orchestra solo l'appuntamento. Il risultato è un sistema in cui un driver può crashare e essere riavviato senza far cadere il kernel, in cui la base di calcolo fidata è misurata in decine di kilobyte, e in cui il confine tra "kernel" e "applicazione" è un messaggio, non una barriera di privilegi piena di syscall.
QRV prende i sorgenti della comunità di QNX Neutrino 6.4 del 2009 e porta avanti quel progetto:
int/uint32_t/pid_t-su-puntatore
di cui il codice a 32 bit è pieno.qemu-system-riscv64 (la macchina
virt) e la scheda di sviluppo SiFive Unmatched (FU740). x86-64 viene
mantenuto in compilazione come controllo di portabilità.mkifs (QRV usa
il formato standard CPIO); non c'è una separazione separata
startup/kernel (lo startup è linkato direttamente con il kernel); non ci
sono callout e mini-driver.Kconfig stile Linux, un link
incrementale del kernel (i moduli vengono aggiunti e testati uno alla volta, non lanciati
al linker come un monolito da 32→64) e una toolchain cross-compilatore
(riscv64-linux-gnu-gcc).procnto è taskman (il
Task Manager) dappertutto; tutti i riferimenti a "Neutrino" sono rimossi.QRV non implementa fork() (i programmi partono tramite posix_spawn()),
e non ha paging su domanda e nessuno swap — le stesse scelte che QNX stesso
ha fatto nella sua generazione 8.0.
QRV è governato da due licenze contemporaneamente, e capire quale sia quale è essenziale prima di compilare o ridistribuire qualsiasi cosa.
Il codice proprio di QRV è sotto licenza Apache 2.0. Tutto ciò che è scritto da zero
per questo progetto — il porting RISC-V, il nuovo sistema di build, la separazione
di taskman in modalità utente, la rielaborazione del kernel senza lock, i driver e gli strumenti che
abbiamo creato — è Apache 2.0. Il testo completo è in LICENSE.txt.
Il codice derivato da QNX è sotto BlackBerry QNX Community License (QCL) 2.0. Le parti di QRV che discendono dai sorgenti della comunità di QNX Neutrino del 2009 rimangono sotto la QCL, che permette l'uso non commerciale e accademico dei sorgenti derivati. QRV non rilascia, e non può rilasciare, il codice di QNX sotto altra licenza.
Questa realtà della doppia licenza è precisamente il motivo per cui questo repository non contiene un albero dei sorgenti pronto per la compilazione. Non ci è permesso ridistribuire i sorgenti derivati da QNX. Quindi invece di distribuire il codice, questo repository distribuisce una ricetta (vedi la sezione successiva): una mappa di dove va ogni file QNX, più le patch QRV che lo trasformano. Tu ottieni i sorgenti della comunità QNX upstream da solo, dal loro mirror pubblico, e la ricetta ricostruisce l'albero QRV sulla tua macchina. La tua copia è tua; noi ridistribuiamo solo le nostre patch e metadati sotto licenza Apache.
QRV incorpora anche codice sotto altre licenze permissive — per esempio
componenti con licenza BSD adottati da FreeBSD (che sostituiscono moduli QNX invecchiati),
un driver di blocco virtio con licenza MIT di derivazione xv6, e la MirBSD Korn
shell (mksh) come shell di sistema. WHAT_IS_WHAT.md è la mappa autorevole,
componente per componente di cosa è sotto quale licenza e da dove
proviene — consultalo ogni volta che non sei sicuro su un particolare file o
sottosistema.
Infine, il repository contiene PETITION.md: una richiesta aperta a QNX
Software Systems e BlackBerry di rilasciare i sorgenti storici di Neutrino
2007–2009 sotto una licenza permissiva approvata dall'OSI. Se desideri
che le fondamenta di questo lavoro siano un giorno completamente libere, quel documento è
dove aggiungere il tuo nome.
obtain_proj.sh e l'albero os/