Quinta edizione di patch per il kernel Linux con supporto per il linguaggio Rust

Miguel Ojeda, l'autore del progetto Rust-for-Linux, ha proposto una quinta versione di componenti per lo sviluppo di driver di dispositivo nel linguaggio Rust affinché vengano presi in considerazione dagli sviluppatori del kernel Linux. Il supporto a Rust è considerato sperimentale, ma è già incluso nel ramo linux-next ed è sufficientemente sviluppato 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 della prima, seconda, terza e quarta edizione delle patch. Nella nuova versione:

  • Il test dei componenti per il supporto Rust è stato aggiunto al sistema di integrazione continua basato sul bot 0DAY/LKP supportato da Intel ed è iniziata la pubblicazione dei rapporti di test. Ci stiamo preparando a integrare il supporto Rust nel sistema di test automatizzato KernelCI. I test basati su GitHub CI sono stati trasferiti all'uso dei contenitori.
  • I moduli del kernel di Rust sono liberati dalla necessità di definire gli attributi del crate “#![no_std]” e “#![feature(…)]”.
  • Aggiunto supporto per target di assembly singoli (.o, .s, .ll e .i).
  • Le linee guida del codice definiscono le regole per separare i commenti (“//”) e documentare il codice (“///”).
  • Lo script is_rust_module.sh è stato rielaborato.
  • Aggiunto il supporto per le primitive di sincronizzazione statiche (variabili condivise globali) basate sull'implementazione "CONFIG_CONSTRUCTORS".
  • La gestione delle serrature è semplificata: Guard e GuardMut sono combinati e di un unico tipo parametrizzato.
  • È possibile definire parametri aggiuntivi durante la registrazione dei dispositivi.
  • Aggiunta l'astrazione "RwSemaphore", che funge da wrapper sulla struttura C rw_semaphore.
  • Per utilizzare mmap, sono stati aggiunti un nuovo modulo mm e un'astrazione VMA (un wrapper sulla struttura vm_area_struct).
  • Il driver GPIO PL061 è stato impostato utilizzando la macro "dev_*!".
  • È stata effettuata una pulizia generale del codice.

Fonte: opennet.ru

Aggiungi un commento