Nick Desaulniers (), som arbetar pÄ Google med att sÀkerstÀlla kompileringen av Linux-kÀrnan med Clang-kompilatorn och Àven att fixa buggar i Rust-kompilatorn, hÄlla en session pÄ konferensen för att diskutera möjligheten att utveckla kÀrnkomponenter pÄ Rust. Nick organiserar en mikro-konferens om LLVM och tycker att det skulle vara bra att diskutera tekniska aspekter av den potentiella integrationen av Rust-stöd i kÀrnan (de har redan ett arbetande prototyp för KBuild) och förstÄ om stöd för Rust verkligen behöver lÀggas till och vilka begrÀnsningar för anvÀndning av Rust som bör beaktas.
Vi pÄminner om att Linus Torvalds möjligheten till bindningar för utveckling av icke-kÀrnsystemkomponenter (som drivrutiner) pÄ sprÄk som Rust under det senaste diskussionen vid konferensen "Open Source Summit and Embedded Linux". Möjligheten att utveckla drivrutiner pÄ Rust skulle göra det möjligt att skapa sÀkra och mer kvalitativa drivrutiner med minimala anstrÀngningar, utan problem som att referera till minnesomrÄden efter att de har frigjorts, dereferera nullpekare och överskrida buffertgrÀnser. Det finns redan flera externa projekt för att implementera denna möjlighet:
- Utvecklare frÄn företaget "Fish in a Barrel" ett verktyg för att skriva laddningsbara moduler för Linux-kÀrnan med Rust, som anvÀnder ett set av abstrakta lager över kÀrnans grÀnssnitt och strukturer för att öka sÀkerheten. Lagren genereras automatiskt baserat pÄ de befintliga kÀrnhuvudfilerna med hjÀlp av ett verktyg . För att bygga lagren anvÀnds Clang. De byggda modulerna anvÀnder förutom lagren Àven paketet staticlib.
- Forskare frÄn Chinese University of Hong Kong ett projekt för att utveckla drivrutiner för inbyggda system och Internet of Things-enheter med Rust, som ocksÄ anvÀnder bindgen för att generera lager baserade pÄ kÀrnans headerfiler. Ramverket syftar till att öka sÀkerheten för drivrutiner utan att göra förÀndringar i kÀrnan - istÀllet för att skapa ytterligare isoleringsnivÄer för drivrutinerna i kÀrnan, föreslÄs det att blockera problem i kompilationsfasen genom att anvÀnda det sÀkrare sprÄket Rust. Det antas att ett sÄdant tillvÀgagÄngssÀtt kan bli efterfrÄgat av hÄrdvarutillverkare som snabbt utvecklar proprietÀra drivrutiner utan ordentlig granskning.
- Utvecklarna av ramverket för att översÀtta C-kod till Rust, Experiment med konvertering av kÀrnmoduler med minimala manuella Àndringar. Problem som har noterats inkluderar anvÀndning av GCC-tillÀgg i mÄnga delar av kÀrnkoden, vilket för nÀrvarande inte stöds av C2Rust. För att ÄtgÀrda detta planeras det att lÀgga till stöd för GCC-attribut som inline, cold, alias, used och section i C2Rust, samt att utöka möjligheterna för inline-assemblering och lösa problem med strukturer som Àr bÄde justerade och packade (t.ex. xregs_state). Bland de betydande problemen som krÀver manuellt arbete Àr det omöjligt 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, vilket inte kan anvÀndas i kÀrnmoduler.
KĂ€lla: opennet.ru
