Nick Desaulniers (), che lavora in Google fornendo alla compilazione del kernel Linux utilizzando il compilatore Clang e aiutando anche i problemi nel compilatore Rust, tenere alla conferenza una sessione per discutere la possibilità di sviluppare componenti del kernel in Rust. Nick sta organizzando una micro-conferenza dedicata a LLVM e pensa che sarebbe utile discutere gli aspetti tecnici dell'eventuale integrazione del supporto per Rust nel kernel (ha già preparato un prototipo funzionante per KBuild) e capire se sia necessario aggiungere tale supporto e quali limitazioni nell'uso di Rust dovrebbero essere considerate.
Ricordiamo che in una recente discussione alla conferenza «Open Source Summit and Embedded Linux» Linus Torvalds l'emergere di binding per lo sviluppo di sottosistemi non principali del kernel (ad esempio, driver) in linguaggi come Rust. La possibilità di sviluppare driver in Rust permetterebbe di creare driver sicuri e di qualità superiore con sforzi minimi, eliminando problemi come l'accesso a memoria liberata, la dereferenziazione di puntatori nulli e l'overflow del buffer. Esistono già diversi progetti di terze parti per implementare questa possibilità:
- 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.
- I ricercatori dell'Università Cinese di Hong Kong progetto per lo sviluppo di driver in Rust per sistemi embedded e dispositivi IoT, che utilizza anche bindgen per generare strati basati su file di intestazione del kernel. Il framework consente di migliorare la sicurezza dei driver senza apportare modifiche al kernel: invece di creare livelli aggiuntivi 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 un approccio simile possa essere richiesto dai produttori di hardware, che sviluppano driver proprietari in fretta senza un'adeguata audizione.
- Sviluppatori del framework per la traduzione del codice C in Rust, sperimentando la conversione dei moduli del kernel con correzioni manuali minime. Tra i problemi evidenziati c'è l'uso in molte parti del kernel di codice che utilizza estensioni GCC, che non sono ancora supportate in C2Rust. Per risolvere questo problema, si prevede di aggiungere supporto per gli attributi inline, cold, alias, used e section di GCC in C2Rust, oltre ad ampliare le funzionalità dell'assembly inline e risolvere problemi con strutture allineate e impacchettate (ad esempio, xregs_state). Tra i problemi significativi che richiedono lavoro manuale, si segnala l'impossibilità di tradurre macro C non banali in macro Rust e la necessità di ridefinire i tipi, poiché C2Rust traduce i tipi C in definizioni nel pacchetto libc, che non può essere utilizzato nei moduli del kernel.
Fonte: opennet.ru
