Miguel Ojeda, autore del progetto Rust-for-Linux, ha presentato per la considerazione degli sviluppatori del kernel Linux una versione aggiornata dei componenti per lo sviluppo di driver di dispositivo in linguaggio Rust. Il supporto per Rust è considerato sperimentale, ma è già stato approvato per l'inclusione nella branch linux-next. Nella nuova versione sono stati risolti i commenti sollevati durante la discussione della prima versione delle patch. Linus Torvalds si è già unito alla discussione e ha suggerito di modificare la logica di gestione di alcune operazioni bit a bit.
Ricordiamo che le modifiche proposte consentono di utilizzare Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Il supporto per Rust è presentato come un'opzione, non attiva per impostazione predefinita e non comporta l'inclusione di Rust tra le dipendenze di build obbligatorie per il kernel. L'utilizzo di Rust per la creazione di driver permetterà di realizzare driver sicuri e di maggiore qualità con un minimo sforzo, eliminando problemi come l'accesso alla memoria dopo che è stata liberata, la dereferenzazione di puntatori nulli e il superamento dei limiti del buffer.
La gestione sicura della memoria in Rust viene garantita durante la compilazione tramite il controllo dei riferimenti, il tracciamento della proprietà degli oggetti e la gestione del tempo di vita degli oggetti (scope), nonché tramite la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche strumenti per proteggere contro i sovraccarichi numerici, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili (immutable) per impostazione predefinita e offre una forte tipizzazione statica per minimizzare gli errori logici.
Le modifiche più significative nella nuova versione delle patch:
- Il codice per la gestione della memoria è stato liberato da possibili generazioni di stato "panic" in caso di errori, come la mancanza di memoria. È stata inclusa una versione della libreria Rust alloc, in cui il codice per la gestione dei guasti è stato rielaborato, ma l'obiettivo finale è il trasferimento nella versione principale di alloc di tutte le funzionalità necessarie per il kernel (le modifiche sono già state preparate e inviate alla libreria standard Rust).
- Invece delle build notturne per la compilazione del kernel con supporto Rust, ora è possibile utilizzare le versioni beta e le versioni stabili del compilatore rustc. Attualmente, come compilatore di riferimento viene utilizzato rustc 1.54-beta1, ma dopo il rilascio della versione 1.54 alla fine del mese, sarà supportato proprio quest'ultimo.
- È stato aggiunto il supporto per la scrittura di test utilizzando l'attributo standard di Rust "#[test]" e la possibilità di applicare doctests per documentare i test.
- È stato aggiunto il supporto per le architetture ARM32 e RISCV, in aggiunta alle già supportate x86_64 e ARM64.
- Sono state migliorate le implementazioni di GCC Rust (front-end GCC per Rust) e rustc_codegen_gcc (back-end rustc per GCC), che ora supera tutti i test di base.
- È stata proposta un nuovo livello di astrazione per utilizzare nei programmi in linguaggio Rust meccanismi del kernel scritti in C, come alberi rosso-neri, oggetti con conteggio dei riferimenti, creazione di descrittori di file, task, file e vettori di input/output.
- Nei componenti per lo sviluppo di driver è stato migliorato il supporto per il modulo "file_operations", il macro "module!", la registrazione di macro e driver rudimentali (probe e remove).
- In Binder è stato implementato il supporto per il passaggio di descrittori di file e hook LSM.
- È stata proposta una nuova e più funzionale esempio di driver in Rust: bcm2835-rng per il generatore hardware di numeri casuali delle schede Raspberry Pi.
Inoltre, vengono menzionati progetti di diverse aziende riguardanti l'utilizzo di Rust nel kernel:
- Microsoft ha espresso interesse a partecipare al lavoro per integrare il supporto per Rust nel kernel Linux e prevede di fornire nelle prossime settimane implementazioni di driver per Hyper-V in Rust.
- ARM sta lavorando per migliorare il supporto di Rust per i sistemi basati su CPU ARM. Sono già state proposte modifiche al progetto Rust per portare i sistemi ARM a 64 bit nel numero delle piattaforme di supporto di primo livello (Tier-1).
- Google supporta direttamente il progetto Rust for Linux, sviluppando una nuova implementazione del meccanismo di interprocess communication Binder in Rust e valutando la possibilità di riscrivere vari driver in Rust. Attraverso ISRG (Internet Security Research Group), Google ha finanziato il lavoro per integrare il supporto per Rust nel kernel Linux.
- IBM ha implementato il supporto per Rust nel kernel per i sistemi PowerPC.
- Il laboratorio LSE (Systems Research Laboratory) ha sviluppato un driver SPI in Rust.
Fonte: opennet.ru
