Förslag för att diskutera frågan om att lägga till Rust-utvecklingsverktyg till Linux-kärnan

Nick Desagnier (Nick Desaulniers), som arbetar på Google för att tillhandahålla Stöd bygga Linux-kärnan med Clang-kompilatorn och även portion fixa buggar i Rust-kompilatorn, han erbjöd hålla på en konferens Linux rörmokarekonferens 2020 session för att diskutera att göra det möjligt att utveckla kärnkomponenter i Rust. Nick organiserar en mikrokonferens tillägnad LLVM, och tror att det skulle vara trevligt att diskutera de tekniska aspekterna av den möjliga integrationen av Rust-stöd i kärnan (han har redan förberett en fungerande prototyp för KBuild) och förstå om sådant stöd bör läggas till överhuvudtaget och vilka restriktioner för användningen av Rust bör accepteras.

Låt oss komma ihåg att Linus Torvalds i en diskussion nyligen på Open Source Summit och Embedded Linux-konferensen uteslöt inte uppkomsten av bindningar för utveckling av icke-kärnundersystem (till exempel drivrutiner) på språk som Rust. Möjligheten att utveckla drivrutiner i Rust skulle tillåta oss att skapa säkrare och bättre drivrutiner med minimal ansträngning, utan problem som minnesåtkomst efter frigöring, nollpekarereferenser och buffertöverskridanden. Det finns redan flera tredjepartsprojekt för att implementera den här funktionen:

  • Utvecklare från företaget "Fish in a Barrel" beredd en verktygslåda för att skriva laddningsbara moduler för Linux-kärnan i Rust-språket, med hjälp av en uppsättning abstrakta lager över gränssnitten och kärnstrukturerna för att öka säkerheten. Lager genereras automatiskt baserat på de befintliga kärnhuvudfilerna med hjälp av verktyget bindgen. Clang används för att bygga lager. Förutom mellanskikt använder de monterade modulerna staticlib-paketet.
  • Forskare från det kinesiska universitetet i Hong Kong utveckla ett projekt för att utveckla drivrutiner för inbyggda system och Internet of Things-enheter i Rust, som också använder bindgen för att generera lager baserat på kärnhuvudfiler. Ramverket låter dig förbättra förarsäkerheten utan att göra ändringar i kärnan - istället för att skapa ytterligare isoleringsnivåer för drivrutiner i kärnan, föreslås det att problem blockeras i kompileringsstadiet, med hjälp av det säkrare Rust-språket. Det antas att ett sådant tillvägagångssätt kan efterfrågas av utrustningstillverkare som snabbt utvecklar proprietära drivrutiner utan att genomföra en ordentlig revision.
  • Ramutvecklare C2Rust för att sända C-kod till Rust, beteende experiment med att konvertera kärnmoduler med minimala manuella redigeringar. Ett av problemen som noterats är användningen i många delar av kärnan av kod som använder GCC-tillägg som ännu inte stöds i C2Rust. För att lösa detta problem planerar C2Rust att lägga till stöd för GCC-attribut inline, cold, alias, used och section, samt utöka funktionerna för inline assembler och lösa problem med strukturer som är både justerade och packade (till exempel xregs_state) . Betydande problem som kräver manuellt arbete inkluderar oförmågan att översätta icke-triviala C-makron till Rust-makron och behovet av att omdefiniera typer, eftersom C2Rust översätter C-typer till definitioner i libc-paketet, men detta paket kan inte användas i kärnmoduler.

Källa: opennet.ru

Lägg en kommentar