Nel progetto Kerla si sta sviluppando un nucleo di sistema operativo scritto in Rust. Il nuovo nucleo è inizialmente orientato a garantire la compatibilità con il nucleo Linux a livello ABI, il che consentirà di eseguire in un ambiente basato su Kerla file eseguibili non modificati compilati per Linux. Il codice è distribuito con licenze Apache 2.0 e MIT. Il progetto è sviluppato dal programmatore giapponese Seiya Nuta, noto per la creazione del sistema operativo a microkernel Resea, scritto in C.
Nella fase attuale dello sviluppo, Kerla può funzionare solo su sistemi con architettura x86_64 e implementa chiamate di sistema di base come write, stat, mmap, pipe e poll, supportando segnali, pipe non nominati e switch di contesto. Per la gestione dei processi sono disponibili chiamate come fork, wait4 ed execve. È supportato tty e pseudoterminali (PTY). Attualmente sono supportati i file system initramfs (usato per montare il file system radice), tmpfs e devfs. È fornito uno stack di rete con supporto per socket TCP e UDP, implementato sulla base della libreria smoltcp.
Il programmatore ha preparato un ambiente di avvio, eseguibile in QEMU o in macchina virtuale Firecracker con driver virtio-net, al quale è già possibile connettersi tramite SSH. Come libreria di sistema è utilizzata musl, e come utilità utente — BusyBox.

È stato preparato un sistema di build basato su Docker, consentendo di creare i propri initramfs di avvio con il nucleo Kerla. Separatamente, è in sviluppo una shell simile a fish chiamata nsh e un stack GUI Kazari basato sul protocollo Wayland.

L'uso del linguaggio Rust nel progetto permette di ridurre il numero di errori nel codice grazie all'impiego di tecniche di programmazione sicura e al miglioramento dell'efficienza nel rilevamento di problemi legati alla memoria. La gestione sicura della memoria è garantita in Rust durante la compilazione attraverso il controllo dei riferimenti, la tracciabilità della proprietà degli oggetti e la gestione del tempo di vita degli oggetti (scope), oltre alla valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Inoltre, Rust fornisce strumenti per proteggere contro overflow interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, applica il concetto di immutabilità (immutable) per riferimenti e variabili per impostazione predefinita e offre una forte tipizzazione statica per minimizzare gli errori logici, semplificando la gestione dei valori in ingresso grazie agli strumenti di corrispondenza dei modelli.
Per lo sviluppo di componenti a basso livello, come il kernel del sistema operativo, Rust offre supporto per puntatori raw, impacchettamento di strutture, inline assembly e inclusione di file in assembler. Per lavorare senza vincoli alla libreria standard, ci sono pacchetti crate separati per operazioni su stringhe, vettori e flag bit. Tra i vantaggi si evidenziano anche strumenti integrati per la valutazione della qualità del codice (linter, rust-analyzer) e la creazione di unit test, che possono essere eseguiti non solo sull'hardware reale, ma anche in QEMU.
Fonte: opennet.ru
