Nick DeSaulniers (), che si occupa in Google della compilazione del kernel Linux utilizzando il compilatore Clang e correggere errori nel compilatore Rust, ha tenuto alla conferenza una sessione per discutere le opportunità di sviluppo di componenti del kernel in Rust. Nick sta organizzando una micro-conferenza dedicata a LLVM e ritiene interessante discutere gli aspetti tecnici di una possibile 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 sull'uso di Rust dovrebbero essere considerate.
Ricordiamo che in una recente discussione alla conferenza "Open Source Summit and Embedded Linux", Linus Torvalds l'apparizione 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 consentirebbe di creare driver sicuri e di qualità superiore, eliminando problemi come l'accesso a zone di memoria dopo il loro rilascio, la dereferenziazione di puntatori nulli e il superamento dei limiti del buffer. Esistono già diversi progetti di terze parti che implementano questa possibilità:
- Sviluppatori di "Fish in a Barrel" 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 . Per la compilazione degli strati viene utilizzato Clang. I moduli compilati utilizzano, oltre agli strati, il pacchetto staticlib.
- Ricercatori dell'Università Cinese di Hong Kong un 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 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, utilizzando un linguaggio più sicuro come Rust. Si prevede che questo approccio possa essere interessante per i produttori di hardware che sviluppano driver proprietari rapidamente senza un adeguato audit.
- Sviluppatori del framework per tradurre codice C in Rust, esperimenti sulla trasformazione dei moduli del kernel con minime modifiche manuali. Tra i problemi riscontrati c'è l'uso in molte parti del kernel di codice che utilizza estensioni GCC, attualmente non supportate in C2Rust. Per risolvere questo problema, si prevede di aggiungere in C2Rust il supporto per gli attributi GCC inline, cold, alias, used e section, oltre a espandere le funzionalità dell'assembly inline e affrontare le problematiche relative alle strutture che sono sia allineate che imballate (ad esempio, xregs_state). Tra i problemi significativi che richiedono lavoro manuale, vi è l'impossibilità di traslare macro C non banali in macro Rust e la necessità di ridefinire i tipi, poiché C2Rust trasla i tipi C in definizioni nel pacchetto libc, ma questo pacchetto non può essere utilizzato nei moduli del kernel.
Fonte: opennet.ru
