La quarta revisione delle patch per il kernel Linux con supporto per il linguaggio Rust

Miguel Ojeda, autore del progetto Rust-for-Linux, ha proposto ai sviluppatori del kernel Linux una quarta variante dei componenti per lo sviluppo di driver di dispositivo in linguaggio Rust. Il supporto per Rust è considerato sperimentale, ma è già stato concordato per essere incluso nel ramo linux-next ed è sufficientemente sviluppato per iniziare a lavorare sulla creazione di livelli di astrazione sopra le sottosistemi del kernel, così come per la scrittura di driver e moduli. Lo sviluppo è finanziato da Google e dall'organizzazione ISRG (Internet Security Research Group), che è fondatrice del progetto Let’s Encrypt e promuove HTTPS e lo sviluppo di tecnologie per aumentare la sicurezza su 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 continua l'eliminazione delle osservazioni espresse durante le discussioni sulle prime, seconde e terze edizioni delle patch. Nella nuova versione:

  • E' stato effettuato il passaggio all'utilizzo come compilatore di riferimento della versione stabile di Rust 1.58.0. Tra le modifiche necessarie per il progetto, che non sono ancora incluse nel set principale di strumenti di Rust, si segnalano il flag «-Zsymbol-mangling-version=v0» (atteso in Rust 1.59.0) e la modalità «maybe_uninit_extra» (attesa in Rust 1.60.0).
  • Sono state aggiunte verifiche automatiche per la presenza di strumenti Rust appropriati e ampliate le possibilità di testare il supporto Rust nel sistema.
  • Sono state proposte nuove astrazioni per accedere dal codice in linguaggio Rust alle tabelle degli identificatori dei dispositivi («IdArray» e «IdTable»).
  • Sono stati aggiunti strati per accedere alle funzioni relative al timer (framework di clock).
  • I driver per le piattaforme sono ora definiti tramite l'implementazione di trait.
  • Aggiunto un nuovo macro per semplificare la registrazione dei driver della piattaforma, e proposto un nuovo modello per il driver standard.
  • Aggiunti macro per le strutture «dev_*».
  • Aggiunti i metodi «{read,write}*_relaxed» per il tipo IoMem.
  • Rimosse le proprietà FileOpener per semplificare le operazioni sui file.
  • Nel numero degli argomenti passati durante la registrazione del driver, è stato aggiunto il parametro «ThisModule».
  • Proposto un modello standard per la creazione di moduli del kernel in linguaggio Rust.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster