Proposta per discutere la questione dell'aggiunta di strumenti di sviluppo Rust al kernel Linux

Nick Desagnier (Nick Desaulnier), che lavora presso Google per fornire supporto costruire il kernel Linux usando il compilatore Clang e anche aiutare correggere i bug nel compilatore Rust, suggerì tenere ad una conferenza Conferenza degli idraulici Linux 2020 sessione per discutere su come rendere possibile lo sviluppo di componenti del kernel in Rust. Nick sta organizzando una microconferenza dedicata a LLVM, e ritiene che sarebbe carino discutere gli aspetti tecnici della possibile integrazione del supporto Rust nel kernel (ha già preparato un prototipo funzionante per KBuild) e capire se tale supporto sia opportuno essere aggiunto e quali restrizioni sull'uso di Rust dovrebbero essere accettate.

Ricordiamolo in una recente discussione alla conferenza Open Source Summit e Embedded Linux, Linus Torvalds non ha escluso l'emergere di collegamenti per lo sviluppo di sottosistemi del kernel non core (ad esempio driver) in linguaggi come Rust. La capacità di sviluppare driver in Rust ci consentirebbe 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. Esistono già diversi progetti di terze parti per implementare questa funzionalità:

  • Sviluppatori della società “Fish in a Barrel” preparato un toolkit per scrivere moduli caricabili per il kernel Linux nel linguaggio Rust, utilizzando una serie di livelli astratti sulle interfacce e sulle strutture del kernel per aumentare la sicurezza. I livelli vengono generati automaticamente in base ai file di intestazione del kernel esistenti utilizzando l'utilità bindgen. Clang è usato per costruire strati. Oltre agli interstrati, i moduli assemblati utilizzano il pacchetto staticlib.
  • Ricercatori dell'Università cinese di Hong Kong sviluppare un progetto per lo sviluppo di driver per sistemi embedded e dispositivi Internet of Things in Rust, che utilizza anche bindgen per generare livelli basati sui file di intestazione del kernel. Il framework consente di migliorare la sicurezza dei driver senza apportare modifiche al kernel: invece di creare ulteriori livelli di isolamento per i driver nel kernel, si propone di bloccare i problemi in fase di compilazione, utilizzando il linguaggio Rust più sicuro. Si presume che un simile approccio possa essere richiesto dai produttori di apparecchiature che sviluppano in fretta driver proprietari senza condurre un audit adeguato.
  • Sviluppatori di framework C2Ruggine per trasmettere il codice C a Rust, condotta esperimenti sulla conversione dei moduli del kernel con modifiche manuali minime. Uno dei problemi rilevati è l'uso in molte parti del kernel di codice che utilizza estensioni GCC che non sono ancora supportate in C2Rust. Per risolvere questo problema, C2Rust prevede di aggiungere il supporto per gli attributi GCC inline, cold, alias, used e sezione, oltre ad espandere le capacità dell'assemblatore inline e risolvere problemi con strutture che sono sia allineate che compresse (ad esempio, xregs_state) . Problemi significativi che richiedono lavoro manuale includono l'incapacità 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, ma questo pacchetto non può essere utilizzato nei moduli del kernel.

Fonte: opennet.ru

Aggiungi un commento