Quarta edizione di patch per il kernel Linux con supporto al linguaggio Rust

Miguel Ojeda, autore del progetto Rust-for-Linux, ha proposto una quarta versione di componenti per lo sviluppo di driver di dispositivo nel linguaggio Rust affinché venga presa in considerazione dagli sviluppatori del kernel Linux. Il supporto a Rust è considerato sperimentale, ma è già stato concordato di includerlo nel ramo linux-next ed è abbastanza maturo per iniziare a lavorare sulla creazione di livelli di astrazione sui sottosistemi del kernel, nonché sulla scrittura di driver e moduli. Lo sviluppo è finanziato da Google e dall'ISRG (Internet Security Research Group), che è il fondatore del progetto Let's Encrypt e promuove HTTPS e lo sviluppo di tecnologie per migliorare la sicurezza su Internet.

Ricordiamo che le modifiche proposte rendono possibile utilizzare Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Il supporto Rust è presentato come un'opzione che non è abilitata per impostazione predefinita e non comporta l'inclusione di Rust come dipendenza di compilazione richiesta per il kernel. Usare Rust per lo sviluppo dei driver ti consentirà di creare driver più sicuri e migliori con il minimo sforzo, esenti da problemi come l'accesso alla memoria dopo la liberazione, i riferimenti a puntatori nulli e i sovraccarichi del buffer.

La gestione sicura della memoria viene fornita in Rust in fase di compilazione attraverso il controllo dei riferimenti, tenendo traccia della proprietà dell'oggetto e della durata dell'oggetto (ambito), nonché attraverso la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche protezione contro gli overflow di numeri interi, 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 per impostazione predefinita, offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

La nuova versione delle patch continua ad eliminare i commenti fatti durante la discussione sulla prima, seconda e terza edizione delle patch. Nella nuova versione:

  • È stata effettuata la transizione all'utilizzo della versione stabile di Rust 1.58.0 come compilatore di riferimento. Tra le modifiche necessarie al progetto, che non sono ancora incluse nel toolkit principale di Rust, il flag “-Zsymbol-mangling-version=v0” (previsto in Rust 1.59.0) e la modalità “maybe_uninit_extra” (previsto in Rust 1.60.0 .XNUMX) sono annotati. .
  • Aggiunti controlli automatici per la disponibilità di strumenti Rust adatti e ampliata la capacità di testare il supporto Rust nel sistema.
  • Sono state proposte nuove astrazioni per accedere alle tabelle degli identificatori dei dispositivi (“IdArray” e “IdTable”) dal codice Rust.
  • Aggiunti livelli per l'accesso alle funzioni relative al timer (struttura dell'orologio).
  • I driver della piattaforma sono ora definiti tramite implementazioni dei tratti.
  • È stata aggiunta una nuova macro per semplificare la registrazione dei driver della piattaforma ed è stato proposto un nuovo modello di driver generico.
  • Aggiunte macro per le strutture "dev_*".
  • Aggiunti metodi "{read,write}*_relaxed" per il tipo IoMem .
  • Rimossa la proprietà FileOpener per semplificare le operazioni sui file.
  • Il parametro "ThisModule" è stato aggiunto agli argomenti passati durante la registrazione di un driver.
  • Viene proposto un modello standard per la creazione di moduli del kernel nel linguaggio Rust.

Fonte: opennet.ru

Aggiungi un commento