Miguel Ojeda, autore del progetto Rust-for-Linux, ha proposto agli sviluppatori del kernel Linux il quinto set di componenti per lo sviluppo di driver per dispositivi in linguaggio Rust. Il supporto per Rust è considerato sperimentale, ma è già stato incluso nel ramo linux-next ed è sufficientemente avanzato per iniziare a lavorare su strati di astrazione sopra le sottosistemi del kernel, oltre a scrivere driver e moduli. Lo sviluppo è finanziato da Google e dall'organizzazione ISRG (Internet Security Research Group), fondatrice del progetto Let’s Encrypt, che promuove HTTPS e sviluppa tecnologie per aumentare 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 continuano a essere risolti i commenti emersi durante la discussione delle prime, seconde, terze e quarte edizioni delle patch. Nella nuova versione:
- Nel sistema di integrazione continua basato sul bot 0DAY/LKP supportato da Intel, è stata aggiunta la verifica dei componenti per il supporto a Rust e sono iniziati i rapporti sui test. Si sta preparando l'integrazione del supporto per Rust nel sistema di test automatizzati KernelCI. I test basati su GitHub CI sono stati aggiornati per utilizzare contenitori.
- I moduli del kernel in Rust non richiedono più la definizione degli attributi crate "#![no_std]" e "#![feature(…)]".
- Aggiunto il supporto per obiettivi di build singoli (.o, .s, .ll e .i).
- Nelle linee guida per la formattazione del codice sono state definite regole riguardanti la separazione dei commenti ("//") e la documentazione del codice ("///").
- Lo script is_rust_module.sh è stato rielaborato.
- Aggiunto il supporto per primitive di sincronizzazione statiche (variabili globali condivise) basate sulla realizzazione di "CONFIG_CONSTRUCTORS".
- Semplificata la gestione dei lock: Guard e GuardMut sono stati uniti in un'unica tipizzazione parametrica.
- Fornita la possibilità di definire parametri aggiuntivi durante la registrazione dei dispositivi.
- Aggiunta l'astrazione "RwSemaphore", che funge da wrapper sulla struttura C rw_semaphore.
- Per l'uso di mmap è stato aggiunto un nuovo modulo mm e un'astrazione VMA (wrapper sulla struttura vm_area_struct).
- Il driver GPIO PL061 è stato convertito all'uso del macro "dev_*!".
- Pulizia generale del codice.
Fonte: opennet.ru
