Miguel Ojeda, autore del progetto Rust-for-Linux, ha proposto all'attenzione degli sviluppatori del kernel Linux il rilascio della v10 dei componenti per lo sviluppo di driver per dispositivi in linguaggio Rust. Questa è l'undicesima edizione delle patch considerando la 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, se non emergono problemi imprevisti. Lo sviluppo è finanziato da Google e dall'organizzazione ISRG (Internet Security Research Group), che è il fondatore del progetto Let’s Encrypt e supporta la diffusione di HTTPS e lo sviluppo di tecnologie per migliorare la sicurezza di Internet.
Come nella versione precedente delle patch, la v10 è stata ridotta al minimo indispensabile, sufficiente per assemblare un semplice modulo del kernel, scritto in linguaggio Rust. Le differenze rispetto alla versione precedente si riducono a piccoli aggiornamenti, sostituzione di sizeof con ARRAY_SIZE in kallsyms.c e adattamento delle patch al kernel v6.0-rc7. Si prevede che la patch minima, le cui dimensioni sono state ridotte da 40 a 13 mila righe di codice, semplificherà l'accettazione del supporto per Rust nel core del kernel. Dopo aver assicurato il supporto minimo, è previsto un graduale ampliamento delle funzionalità esistenti, trasferendo anche altre modifiche dal ramo 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 è presentato come un'opzione, non attiva per impostazione predefinita e non porta l'inclusione di Rust tra le dipendenze di build obbligatorie del kernel. L'uso di Rust per lo sviluppo di driver consentirà di creare facilmente driver sicuri e di qualità superiore, privi di problemi come accessi alla memoria dopo il rilascio, dereferenziazione di puntatori nulli e overflow di 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.
Fonte: opennet.ru
