Il progetto Kerla sta sviluppando un kernel compatibile con Linux nel linguaggio Rust

Il progetto Kerla sta sviluppando un kernel del sistema operativo scritto nel linguaggio Rust. Il nuovo kernel è inizialmente focalizzato nel fornire compatibilità con il kernel Linux a livello ABI, che consentirà 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 è stato sviluppato dallo sviluppatore giapponese Seiya Nuta, noto per aver creato il sistema operativo microkernel Resea, scritto in linguaggio 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 boot che gira in QEMU o nella macchina virtuale Firecracker con il driver virtio-net, al quale è già possibile connettersi tramite SSH. musl viene utilizzato come libreria di sistema e BusyBox viene utilizzato come utilità utente.

Il progetto Kerla sta sviluppando un kernel compatibile con Linux nel linguaggio Rust

È 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.

Il progetto Kerla sta sviluppando un kernel compatibile con Linux nel linguaggio Rust

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

Aggiungi un commento