Il progetto Kerla sta sviluppando un kernel di sistema operativo scritto in Rust. Il nuovo kernel è inizialmente focalizzato sulla garanzia della compatibilità con il kernel Linux a livello ABI, ciò consentirà l'esecuzione di file eseguibili non modificati, compilati per Kerla, in un ambiente basato su Kerla. LinuxIl codice è distribuito sotto le licenze Apache 2.0 e MIT. Il progetto è sviluppato dal programmatore giapponese Seiya Nuta, noto per aver creato il sistema operativo a microkernel Resea, scritto in C.
Allo stato attuale di sviluppo, Kerla può essere eseguito solo su sistemi x86_64 e implementa chiamate di sistema di base come write, stat, mmap, pipe e poll, supporta segnali, pipe senza nome e cambi di contesto. Chiamate come fork, wait4 ed execve vengono fornite per controllare i processi. È disponibile il supporto per tty e pseudo-terminali (pty). I file system attualmente supportati sono initramfs (utilizzato per montare il file system root), tmpfs e devfs. Viene fornito uno stack di rete con supporto per socket TCP e UDP, implementato in base alla libreria smoltcp.
Lo sviluppatore ha preparato un ambiente di avvio che può essere avviato in QEMU o in macchina virtuale Firecracker con il driver virtio-net, ora accessibile tramite SSH. Utilizza musl come libreria di sistema e BusyBox come utility in spazio utente.

È stato preparato un sistema di compilazione basato su Docker che consente di creare il proprio initramfs di avvio con il kernel Kerla. Separatamente sono in fase di sviluppo la shell software nsh simile a fish e lo stack GUI Kazari basato sul protocollo Wayland.

L'uso del linguaggio Rust in un progetto consente di ridurre il numero di errori nel codice utilizzando tecniche di programmazione sicure e aumentando l'efficienza nell'identificazione dei problemi quando si lavora con la memoria. Rust rafforza la sicurezza della memoria in fase di compilazione attraverso il controllo dei riferimenti, la proprietà degli oggetti e il tracciamento della durata degli oggetti (ambiti) e valutando la correttezza degli accessi alla memoria in fase di esecuzione. Inoltre, Rust fornisce protezione contro gli overflow di numeri interi, richiede che i valori delle variabili siano inizializzati prima dell'uso, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita, offre una forte tipizzazione statica per ridurre al minimo gli errori logici e semplifica la gestione dei valori di input grazie all'abbinamento dei modelli. .
Per lo sviluppo di componenti di basso livello, come il kernel del sistema operativo, Rust fornisce il supporto per puntatori grezzi, compressione della struttura, inserti in linea dell'assemblatore e incorporamento di file dell'assemblatore. Per lavorare senza essere vincolati alla libreria standard, esistono pacchetti separati per eseguire operazioni con stringhe, vettori e bit flag. Un altro vantaggio sono gli strumenti integrati per valutare la qualità del codice (linter, analizzatore di ruggine) e creare test unitari che possono essere eseguiti non solo su hardware reale, ma anche in QEMU.
Fonte: opennet.ru
