Voorstel voor het bespreken van de kwestie van het toevoegen van Rust-ontwikkeltools aan de Linux-kernel

Nick Desagnier (Nick Desaulniers), die bij Google werkt om te voorzien ondersteuning het bouwen van de Linux-kernel met behulp van de Clang-compiler en ook helpen bugs in de Rust-compiler repareren, hij bood houden op een conferentie Linux Loodgietersconferentie 2020 sessie om te bespreken hoe het mogelijk wordt om kernelcomponenten in Rust te ontwikkelen. Nick organiseert een microconferentie gewijd aan LLVM, en is van mening dat het leuk zou zijn om de technische aspecten van de mogelijke integratie van Rust-ondersteuning in de kernel te bespreken (hij heeft al een werkend prototype voor KBuild voorbereid) en te begrijpen of dergelijke ondersteuning zou moeten überhaupt moet worden toegevoegd en welke beperkingen op het gebruik van Rust moeten worden geaccepteerd.

Laten we dat in herinnering brengen tijdens een recente discussie op de Open Source Summit en Embedded Linux-conferentie, Linus Torvalds sloot niet uit de opkomst van bindingen voor de ontwikkeling van niet-kernkernelsubsystemen (bijvoorbeeld stuurprogramma's) in talen als Rust. De mogelijkheid om stuurprogramma's in Rust te ontwikkelen zou ons in staat stellen om met minimale inspanning veiligere en betere stuurprogramma's te maken, vrij van problemen zoals geheugentoegang na het vrijmaken, null pointer-dereferenties en bufferoverruns. Er zijn al verschillende projecten van derden om deze functie te implementeren:

  • Ontwikkelaars van het bedrijf “Fish in a Barrel” bereid een toolkit voor het schrijven van laadbare modules voor de Linux-kernel in de Rust-taal, waarbij een reeks abstracte lagen over de interfaces en kernelstructuren wordt gebruikt om de veiligheid te vergroten. Met behulp van het hulpprogramma worden lagen automatisch gegenereerd op basis van de bestaande kernelheaderbestanden binden. Clang wordt gebruikt om lagen op te bouwen. Naast tussenlagen gebruiken de samengestelde modules het staticlib-pakket.
  • Onderzoekers van de Chinese Universiteit van Hong Kong ontwikkelen een project voor het ontwikkelen van stuurprogramma's voor ingebedde systemen en Internet of Things-apparaten in Rust, dat ook bindgen gebruikt om lagen te genereren op basis van kernelheaderbestanden. Met het raamwerk kun je de beveiliging van stuurprogramma's verbeteren zonder wijzigingen aan de kernel aan te brengen - in plaats van extra isolatieniveaus voor stuurprogramma's in de kernel te creëren, wordt voorgesteld om problemen in de compilatiefase te blokkeren, met behulp van de veiligere Rust-taal. Aangenomen wordt dat een dergelijke aanpak veel gevraagd is bij fabrikanten van apparatuur die in haast eigen stuurprogramma's ontwikkelen zonder een behoorlijke audit uit te voeren.
  • Framework-ontwikkelaars C2Roest voor het uitzenden van C-code naar Rust, gedrag experimenten met het converteren van kernelmodules met minimale handmatige bewerkingen. Een van de genoemde problemen is het gebruik in veel delen van de kernel van code die GCC-extensies gebruikt die nog niet worden ondersteund in C2Rust. Om dit probleem op te lossen, is C2Rust van plan om ondersteuning toe te voegen voor GCC-attributen inline, cold, alias, used en section, en om de mogelijkheden van de inline assembler uit te breiden en problemen op te lossen met structuren die zowel uitgelijnd als verpakt zijn (bijvoorbeeld xregs_state) . Belangrijke problemen die handmatig werk vereisen, zijn onder meer het onvermogen om niet-triviale C-macro's te vertalen naar Rust-macro's en de noodzaak om typen opnieuw te definiëren, aangezien C2Rust C-typen vertaalt naar definities in het libc-pakket, maar dit pakket kan niet in kernelmodules worden gebruikt.

Bron: opennet.ru

Voeg een reactie