Framework per scrivere driver protetti per il kernel Linux in Rust

Josh Triplett, che lavora in Intel e fa parte del comitato che supervisiona lo sviluppo di Crates.io, nel suo intervento al Open Source Technology Summit ha presentato un gruppo di lavoro, mirato a portare il linguaggio Rust a parità con il linguaggio C nell'ambito della programmazione di sistema.

Nel gruppo di lavoro, che è in fase di creazione, i programmatori Rust insieme agli ingegneri di Intel prepareranno specifiche che definiscono le funzionalità da implementare in Rust per la programmazione di sistema. La programmazione di sistema spesso richiede manipolazioni a basso livello, come l'esecuzione di istruzioni privilegiate del processore e il recupero di dettagli sulla stato del processore. Tra le funzionalità già sviluppate per Rust si segnala il supporto per strutture anonime, unioni (union), inserimenti di assembler (macro «asm!») e il formato di numeri in virgola mobile BFLOAT16.

Josh crede che il futuro della programmazione di sistema sia in Rust, mentre il linguaggio C, nelle attuali realtà, sta assumendo un ruolo che in passato era occupato dall'Assembly. Rust
non solo libera gli sviluppatori dai problemi comuni del linguaggio C, derivanti dal lavoro a basso livello con la memoria, ma offre anche la possibilità di applicarlo nello sviluppo di moderne paradigme di programmazione.

Nel corso dibattito dell'esibizione
di Josh è stata proposta l'idea di aggiungere al kernel Linux la possibilità di sviluppare driver in Rust, il che consentirebbe di creare driver sicuri e di qualità superiori con il minimo sforzo, eliminando problemi come l'accesso alla memoria dopo il suo rilascio, il dereferenziamento di puntatori nulli e l'overflow del buffer.

Greg Kroah-Hartman, responsabile del supporto della linea stabile del kernel Linux, ha espresso la disponibilità ad aggiungere al kernel un framework per lo sviluppo di driver in Rust, se questo offrirà vantaggi reali rispetto al C, ad esempio fornendo binding sicuri per le API del kernel. Inoltre, Greg considera questo framework solo come un'opzione, non attiva di default, per non includere Rust tra le dipendenze di compilazione del kernel.

Si è scoperto che diversi team stanno già lavorando in questa direzione. Ad esempio, gli sviluppatori dell'azienda 'Fish in a Barrel' hanno preparato un toolkit per scrivere moduli caricabili per il kernel Linux in Rust, utilizzando per aumentare la sicurezza un insieme di strati astratti sopra le interfacce e le strutture del kernel. Gli strati vengono generati automaticamente sulla base dei file di intestazione esistenti del kernel tramite l'utility bindgen. Per la compilazione degli strati viene utilizzato Clang. I moduli compilati utilizzano, oltre agli strati, il pacchetto staticlib.

Parallelamente si sviluppa un altro progetto focalizzato sulla sviluppo di driver per sistemi integrati e dispositivi IoT, che utilizza anche bindgen per generare strati basati su file header del kernel. Il framework consente di migliorare la sicurezza dei driver senza modifiche al kernel — anziché creare ulteriori livelli di isolamento nel kernel per i driver, si propone di bloccare i problemi in fase di compilazione utilizzando un linguaggio più sicuro come Rust. Si prevede che questo approccio possa essere di interesse per i produttori hardware che sviluppano driver proprietari in modo frettoloso senza un adeguato audit.

Non tutte le funzionalità progettate sono ancora state implementate, ma il framework è già del tutto utilizzabile ed è stato impiegato per scrivere un driver operativo per il controller Ethernet LAN9512 USB fornito con la scheda Raspberry Pi 3. Come implementazione di riferimento per la scrittura del driver Rust è stato utilizzato il driver esistente smsc95xx, scritto in C. Si nota che le dimensioni del modulo e le spese generali derivanti dai componenti runtime nello sviluppo di un driver in Rust sono minime, il che consente di applicare il framework a dispositivi con risorse limitate.

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