Nel contesto del progetto Kerla, è in corso lo sviluppo di un kernel per il sistema operativo, scritto in linguaggio Rust. Il nuovo kernel è inizialmente orientato a garantire la compatibilità con il kernel Linux a livello ABI, il che consente l'esecuzione di file eseguibili non modificati, compilati per Linux, in un ambiente basato su Kerla. Il codice è distribuito sotto le licenze Apache 2.0 e MIT. Il progetto è sviluppato dallo sviluppatore giapponese Seiya Nuta, noto per la creazione del sistema operativo microkernel Resea, scritto in linguaggio 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; supporta segnali, pipe anonime 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 file system come initramfs (utilizzato per montare il file system radice), tmpfs e devfs. Viene fornito uno stack di rete con supporto per socket TCP e UDP, implementato sulla base della libreria smoltcp.
È stato preparato un ambiente di avvio dal developer, avviabile in QEMU o in macchina virtuale Firecracker con il driver virtio-net, a cui è possibile connettersi tramite SSH. La libreria di sistema utilizzata è musl, mentre per gli strumenti utente si impiega BusyBox.

È stato sviluppato un sistema di build basato su Docker, che consente di creare initramfs di avvio personalizzati con il kernel Kernel. In parallelo, si sviluppano una shell simile a fish chiamata nsh e un stack GUI Kazari basato sul protocollo Wayland.

L'uso del linguaggio Rust nei progetti consente di ridurre il numero di errori nel codice, grazie all'adozione di tecniche di programmazione sicura e al miglioramento dell'efficienza nell'individuazione dei problemi relativi alla gestione della memoria. La sicurezza nella gestione della memoria è garantita in Rust durante la fase di compilazione attraverso il controllo dei riferimenti, il monitoraggio 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 offre strumenti per prevenire il overflow degli interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima del loro utilizzo, adotta il concetto di immutabilità (immutable) delle variabili e dei riferimenti per impostazione predefinita e fornisce una forte tipizzazione statica per minimizzare gli errori logici, semplificando la gestione dei valori di input grazie a strumenti di pattern matching.
Per lo sviluppo di componenti a basso livello, come il kernel del sistema operativo, Rust offre supporto per puntatori raw, imballaggio di strutture, inserimenti inline di assembly e incorporamento di file di assembly. Per operare senza dipendenze dalla libreria standard, ci sono crate separati per gestire operazioni su stringhe, vettori e flag bit. Tra i punti di forza ci sono anche strumenti integrati per valutare la qualità del codice (linter, rust-analyzer) e per la creazione di test unitari, che possono essere eseguiti non solo su hardware reale, ma anche in QEMU.
Fonte: opennet.ru
