Miguel Ojeda, autore del progetto Rust-for-Linux, ha proposto agli sviluppatori del kernel Linux di considerare il rilascio della versione v5 dei componenti per lo sviluppo di driver per dispositivi in linguaggio Rust. Questa è la sesta edizione delle patch, tenendo conto della prima versione, pubblicata senza numero di versione. Il supporto per Rust è considerato sperimentale, ma è già incluso nel ramo linux-next ed è sufficientemente avanzato per iniziare a lavorare alla creazione di strati di astrazione sopra le sottosistemi del kernel, nonché per scrivere driver e moduli. Sviluppo finanziato da Google e dall'organizzazione ISRG (Internet Security Research Group), che è fondatrice del progetto Let’s Encrypt e promuove l'adozione di HTTPS e lo sviluppo di tecnologie per migliorare la sicurezza di Internet.
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 porta all'inclusione di Rust tra le dipendenze di compilazione obbligatorie per il kernel. L'uso di Rust per lo sviluppo di driver permetterà di creare driver sicuri e di qualità superiore con il minimo sforzo, eliminando problemi come l'accesso alla memoria dopo che è stata liberata, la dereferenza di puntatori nulli e il superamento dei limiti del buffer.
La gestione sicura della memoria in Rust è garantita durante la compilazione attraverso il controllo dei riferimenti, il tracciamento della proprietà degli oggetti e la gestione del tempo di vita degli oggetti (ambito di visibilità), nonché attraverso la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche strumenti per proteggersi dai sovraccarichi interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di immutabilità (immutable) per riferimenti e variabili per impostazione predefinita e offre una forte tipizzazione statica per minimizzare gli errori logici.
Nella nuova versione delle patch è continuata la rimozione delle osservazioni sollevate nel corso delle discussioni sulle prime, seconde, terze, quarte e quinte edizioni delle patch. Nella nuova versione:
- Il toolkit è stato aggiornato alla versione Rust 1.59.0. Con la nuova versione di Rust è stata anche sincronizzata la versione della libreria alloc, liberata da possibili generazioni di stato «panic» in caso di errori, come la mancanza di memoria. Stabilita la possibilità di utilizzare inserzioni in assembly («feature(global_asm)»).
- È stato aggiunto il supporto per la creazione di programmi host in linguaggio Rust, utilizzati nel processo di compilazione del kernel.
- Invece di consegnare file precreati con la specifica delle piattaforme target, è garantita la loro generazione dinamica basata sulla configurazione del kernel.
- Aggiunto il parametro del kernel HAVE_RUST, abilitato per le architetture che supportano Rust.
- Proposte astrazioni per l'utilizzo nel codice in linguaggio Rust di un generatore hardware di numeri pseudocasuali.
- Consentito l'uso di codici di errore senza il prefisso «Error::» (ad esempio, «return Err(EINVAL)») per avvicinarsi alla gestione dei codici di errore in C.
- Aggiunto il tipo «CString» per le stringhe C proprie. I tipi Formatter e Buffer sono stati uniti.
- Aggiunti i trait Bool e LockInfo.
- Semplificata l'implementazione delle spin-lock.
Fonte: opennet.ru
