Josh Triplett, che lavora presso Intel e fa parte del comitato che supervisiona lo sviluppo di Crates.io, nel suo intervento al Open Source Technology Summit un gruppo di lavoro volto a portare il linguaggio Rust al pari del linguaggio C nell'ambito della programmazione di sistema.
Nel gruppo di lavoro, che è in fase di creazione, gli sviluppatori di Rust insieme agli ingegneri di Intel prepareranno specifiche definendo le funzionalità che devono essere implementate in Rust per la programmazione di sistema. La programmazione di sistema richiede spesso manipolazioni di basso livello, come l'esecuzione di istruzioni privilegiate del processore e il recupero di informazioni dettagliate sullo stato del processore. Tra le capacità già in sviluppo per Rust si segnala il supporto per strutture anonime, union, inserimenti in assembly (macro "asm!") e il formato di numeri in virgola mobile BFLOAT16.
Josh ritiene che il futuro della programmazione di sistema appartenga a Rust, mentre il linguaggio C nelle attuali realtà rivendica un posto che in passato era occupato da Assembly. Rust
non solo libera gli sviluppatori dai problemi tipici del linguaggio C derivanti dal lavoro a basso livello con la memoria, ma offre anche la possibilità di applicare moderne paradigmi di programmazione.
Durante intervento
la presentazione di Josh è emersa l'idea di aggiungere al kernel Linux la possibilità di sviluppare driver in Rust, il che consentirebbe di creare driver sicuri e di alta qualità con il minimo sforzo, eliminando problemi come l'accesso alla memoria dopo la sua liberazione, la dereferenziazione di puntatori nulli e l'overflow del buffer.
Greg Kroah-Hartman, responsabile del supporto della versione stabile del kernel Linux, ha espresso la sua disponibilità ad aggiungere al kernel un framework per lo sviluppo di driver in Rust, se quest'ultimo offrirà reali vantaggi rispetto a C, come ad esempio fornire wrapper sicuri per l'API del kernel. Inoltre, Greg considera questo framework solo come un'opzione, non attiva di default, in modo da non includere Rust tra le dipendenze di build del kernel.
Si è scoperto che diversi team stanno già lavorando in questa direzione. Ad esempio, gli sviluppatori della società "Fish in a Barrel" un toolkit per la scrittura di moduli caricabili per il kernel Linux in Rust, utilizzando un insieme di strati astratti sopra le interfacce e le strutture del kernel per migliorare la protezione. Gli strati vengono generati automaticamente sulla base dei file di intestazione del kernel esistenti tramite l'utility . Per la costruzione degli strati viene utilizzato Clang. I moduli compilati, oltre agli strati, utilizzano il pacchetto staticlib.
In parallelo un altro progetto focalizzato sulla sviluppo di driver per sistemi embedded e dispositivi IoT, che utilizza anche bindgen per generare strati basati su header del kernel. Il framework consente di aumentare la sicurezza dei driver senza modificare il kernel: invece di creare ulteriori livelli di isolamento nel kernel per i driver, si propone di bloccare i problemi in fase di compilazione, applicando un linguaggio più sicuro come Rust. Si prevede che un approccio simile possa essere utilizzato dai produttori di hardware che sviluppano driver proprietari in modo rapido senza un adeguato audit.
Non tutte le funzionalità previste sono state ancora implementate, ma il framework è già abbastanza utilizzabile e è stato impiegato per scrivere un driver funzionante per il controller Ethernet LAN9512 USB, fornito con la scheda Raspberry Pi 3. Come implementazione di riferimento nella scrittura del driver Rust, è stato utilizzato un driver esistente smsc95xx, scritto in C. Si osserva che la dimensione del modulo e le spese generali dai componenti runtime nella sviluppo del driver in Rust sono minime, consentendo di applicare il framework ai dispositivi con risorse limitate.
Fonte: opennet.ru
