Primi passi
Per iniziare
Costruire il container di sviluppo di NoWayOS ed eseguire la sua demo cliccabile, con ogni frame verificato, senza hardware e senza bisogno di conoscere seL4.
NoWayOS si costruisce dentro un unico container di sviluppo con le versioni fissate, quindi alla propria macchina serve ben poco. Questa pagina porta da zero alla demo in esecuzione. La pagina successiva avvia un vero sistema seL4 in QEMU, e una più avanti lo porta su un Raspberry Pi 5.
Cosa serve
- Podman e GNU Make. Funziona anche Docker: basta aggiungere
ENGINE=dockera ogni comandomake. - git, per clonare i repository.
- Niente Rust e niente strumenti seL4 sulla propria macchina. Le toolchain Rust, l'SDK Microkit e QEMU sono tutti dentro il container di sviluppo, fissati a versioni esatte.
Su macOS, Podman esegue i container in una macchina virtuale. Va creata e avviata una volta sola, assegnandole qualche CPU e diversi gigabyte di memoria, ad esempio:
podman machine init --cpus 4 --memory 8192
podman machine start
NoWayOS è sviluppato su Apple silicon (arm64). Su x86-64 anche i pacchetti dell'immagine di sviluppo sono fissati e revisionati, ma l'immagine non è ancora stata costruita e testata lì da cima a fondo.
Una cartella tutta per NoWayOS
Il container di sviluppo monta la cartella sopra il clone, così i repository clonati uno accanto all'altro possono essere compilati l'uno contro l'altro. Per prima cosa, creare una cartella per loro:
mkdir nowayos-work && cd nowayos-work
git clone https://github.com/NoWayOS/nowayos.git
cd nowayos
Costruire il container di sviluppo
make container
Questo comando costruisce l'immagine di sviluppo con le versioni fissate: le toolchain Rust, l'SDK Microkit, QEMU e gli strumenti di controllo. La prima build richiede qualche minuto (meno di quattro su un Mac con Apple silicon) e produce un'immagine di circa 4,7 GB. Va rieseguito ogni volta che cambia tools/container/Containerfile; ogni altro target si rifiuta di girare su un'immagine non aggiornata, e lo dice.
Eseguire la demo
make demo
La demo è una piccola applicazione a moduli con una sessione scriptata di tocchi, clic e tasti. Gira come simulazione sull'host, senza seL4 e senza QEMU, e disegna il frame di ogni passaggio con il vero nucleo di interfaccia utente e il vero renderer di NoWayOS. Ogni frame viene confrontato con un'immagine approvata, e l'esecuzione si conclude così:
demo: PASS - … steps, every frame as approved
Se un frame differisce anche di un solo pixel, l'esecuzione indica quale passaggio e fallisce.
Dare un'occhiata in giro
make # every target, with a line on each
make test # unit, property, doc and golden-image tests
make lint # rustfmt, then clippy with warnings as errors
Ogni target gira nel container di sviluppo e lo avvia da sé. Il DEVELOPING.md del repository li elenca tutti, insieme alla struttura del codice.
Se qualcosa va storto
error: … was not built from the current … Containerfile: la definizione del container è cambiata da quando è stato costruito. Rieseguiremake container, come dice il messaggio.- Podman non è raggiungibile: su macOS, avviare la sua macchina virtuale con
podman machine start. - Una build esaurisce la memoria: assegnare più memoria alla macchina virtuale di Podman. Il gate completo,
make ci, esegue dimostrazioni di model checking che richiedono molta più memoria della demo (Controlli e prove).