Miguel Ojeda, autore del progetto Rust-for-Linux, ha proposto agli sviluppatori del kernel Linux di considerare il rilascio della versione 10 dei componenti per lo sviluppo di driver di dispositivo in linguaggio Rust. Questa è l'undicesima edizione delle patch, tenendo conto della prima versione pubblicata senza numero di versione. L'inclusione del supporto per Rust è stata approvata da Linus Torvalds per l'inserimento nel kernel Linux 6.1, a meno che non sorgano problemi imprevisti. Lo sviluppo è finanziato da Google e dall'organizzazione ISRG (Internet Security Research Group), fondatrice del progetto Let’s Encrypt e che promuove l'adozione di HTTPS e lo sviluppo di tecnologie per migliorare la sicurezza di Internet.
Come nel precedente, il rilascio della versione v10 delle patch è stato ridotto al minimo necessario, sufficiente per assemblare un semplice modulo del kernel scritto in Rust. Le differenze rispetto alla versione precedente si limitano a piccole correzioni, alla sostituzione di sizeof con ARRAY_SIZE in kallsyms.c e all'adattamento delle patch al kernel v6.0-rc7. Si prevede che la patch minima, la cui dimensione è stata ridotta da 40 a 13 mila righe di codice, semplifichi l'adozione del supporto per Rust nel kernel principale. Dopo aver garantito il supporto minimo, è previsto un graduale ampliamento delle funzionalità esistenti, trasferendo anche altre modifiche dalla branch Rust-for-Linux.
Le modifiche proposte consentono di utilizzare Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Il supporto per Rust viene presentato come un'opzione, non attivata di default e non comporta l'inclusione di Rust tra le dipendenze di compilazione obbligatorie del kernel. L'uso di Rust per lo sviluppo di driver permetterà di creare driver sicuri e di qualità superiore con sforzi minimi, eliminando problemi come l'accesso a aree di memoria dopo il loro rilascio, la dereferenziazione 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.
Fonte: opennet.ru
