Nick Desaulniers (), die bij Google verantwoordelijk is voor de bouw van de Linux-kernel met de Clang-compiler en ook fouten in de Rust-compiler op te lossen, gehouden op de conferentie een sessie om te discussiƫren over het bieden van ontwikkelingsmogelijkheden voor kernelcomponenten in de Rust-taal. Nick organiseert een micro-conferentie over LLVM en denkt dat het goed zou zijn om de technische aspecten van de mogelijke integratie van Rust-ondersteuning in de kernel te bespreken (er is al een werkprototype voorbereid voor KBuild) en te begrijpen of er eigenlijk dergelijke ondersteuning moet worden toegevoegd en welke beperkingen voor het gebruik van Rust moeten worden aangenomen.
Ter herinnering, in een recente discussie op de conferentie "Open Source Summit and Embedded Linux" heeft Linus Torvalds van bindings voor de ontwikkeling van niet-kernonderdelen (zoals stuurprogramma's) in talen zoals Rust. De mogelijkheid om stuurprogramma's in de Rust-taal te ontwikkelen zou het mogelijk maken om met minimale inspanning veilige en kwalitatief betere stuurprogramma's te creƫren, vrij van problemen zoals het aanspreken van geheugen na vrijgave, derefereren van null pointers en buffer overflows. Er zijn al verschillende externe projecten die deze mogelijkheid implementeren:
- Ontwikkelaars van het bedrijf "Fish in a Barrel" Een toolkit voor het schrijven van laadtmodules voor de Linux-kernel in Rust, met behulp van een set abstracte lagen bovenop de kernelinterfaces en -structuren om de beveiliging te verbeteren. De lagen worden automatisch gegenereerd op basis van de beschikbare headerbestanden van de kernel met behulp van de tool . Voor het bouwen van de lagen wordt Clang gebruikt. De gebouwde modules gebruiken naast de lagen ook het pakket staticlib.
- Onderzoekers van de Chinese Universiteit in Hongkong hebben een project ontwikkeld voor het creĆ«ren van stuurprogramma's in Rust voor embedded systemen en internet of things-apparaten, dat ook bindgen gebruikt voor het genereren van wrappers op basis van kernelheaderbestanden. Het framework maakt het mogelijk om de veiligheid van stuurprogramma's te verbeteren zonder wijzigingen aan de kernel aan te brengen ā in plaats van extra isolatieniveaus in de kernel voor stuurprogramma's te creĆ«ren, wordt voorgesteld om problemen in de compilatiefase aan te pakken door een veiligere taal zoals Rust te gebruiken. Er wordt aangenomen dat een dergelijke aanpak aantrekkelijk kan zijn voor hardwareproducenten die snel proprietary stuurprogramma's ontwikkelen zonder de juiste audit.
- De ontwikkelaars van het framework voor het vertalen van C-code naar Rust, experimenten met de conversie van kernelmodules met minimale handmatige aanpassingen. Problemen die zich voordoen zijn onder andere het gebruik in veel delen van de kernelcode die GCC-extensies toepassen, die nog niet worden ondersteund in C2Rust. Om dit probleem op te lossen, is het de bedoeling dat C2Rust ondersteuning toevoegt voor GCC-attributen zoals inline, cold, alias, used en section, en de mogelijkheden van inline-assembler uitbreidt, evenals het aanpakken van problemen met structuren die zowel zijn uitgelijnd als verpakt (bijvoorbeeld xregs_state). Een aanzienlijke uitdaging die handmatige arbeid vereist, is de onmogelijkheid om niet-triviale C-macro's naar Rust-macro's te vertalen en de noodzaak om types te herdefiniƫren, aangezien C2Rust C-types vertaalt naar definities in het libc-pakket, dat niet kan worden gebruikt in kernelmodules.
Bron: opennet.ru
