Miguel Ojeda, skapare av projektet Rust-for-Linux, har föreslagit den femte versionen av komponenterna för utveckling av enhetsdrivrutiner pĂ„ sprĂ„ket Rust till Linux-kĂ€rnans utvecklare. Stödet för Rust betraktas som experimentellt, men har redan inkluderats i linux-next-grenen och Ă€r tillrĂ€ckligt utvecklat för att pĂ„börja arbetet med att skapa abstraherande lager över kĂ€rnundersystem samt för att skriva drivrutiner och moduler. Utvecklingen finansieras av Google och organisationen ISRG (Internet Security Research Group), som Ă€r grundare av projektet Letâs Encrypt och arbetar för att frĂ€mja HTTPS och utveckla teknologier för att öka sĂ€kerheten pĂ„ internet.
Vi pÄminner om att de föreslagna förÀndringarna ger möjlighet att anvÀnda Rust som ett andra sprÄk för utveckling av drivrutiner och moduler för kÀrnan. Stödet för Rust presenteras som ett alternativ, inte aktiverat som standard och inte som en obligatorisk byggberoende för kÀrnan. AnvÀndningen av Rust för utveckling av drivrutiner kommer att möjliggöra skapandet av sÀkrare och högre kvalitetsdrivrutiner med minimala insatser, utan problem som att referera till minnesomrÄden efter att de har frigjorts, dereferera nullpekare och överskridning av buffertgrÀnser.
SÀker minneshantering sÀkerstÀlls i Rust vid kompilering genom kontroll av referenser, spÄrning av Àgande av objekt och beaktande av objektens livstid (synlighet), samt genom utvÀrdering av korrekt tillgÄng till minnet under kodens körning. Rust tillhandahÄller ocksÄ verktyg för skydd mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan anvÀndning, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.
I den nya versionen av patcharna fortsÀtter man att ÄtgÀrda de kommentarer som framkommit under diskussionen av den första, andra, tredje och fjÀrde utgÄvan av patcharna. I den nya versionen:
- I systemet för kontinuerlig integration baserat pÄ Intel-stödd bot 0DAY/LKP har komponentkontroller för Rust lagts till och publicering av testrapporter har inletts. Integration av stöd för Rust planeras för KernelCI:s automatiserade testsystem. Testningen baserad pÄ GitHub CI har övergÄtt till att anvÀnda containrar.
- KĂ€rnmoduler skrivna i Rust har befriats frĂ„n behovet av att ange crate-attributen "#![no_std]" och "#![feature(âŠ)]".
- Stödet för enstaka byggmÄl (.o, .s, .ll och .i) har lagts till.
- I rekommendationerna för kodens utformning har regler för separation av kommentarer ("//") och dokumentation av koden ("///") faststÀllts.
- Scriptet is_rust_module.sh har omarbetats.
- Stöd för statiska (globala delade variabler) synkroniseringsprimitive baserade pÄ implementeringen av "CONFIG_CONSTRUCTORS" har lagts till.
- Hantera lÄs har förenklats: Guard och GuardMut har slagits ihop till en parametriserad typ.
- Det har gjorts möjligt att definiera ytterligare parametrar vid registrering av enheter.
- Abstraktionen "RwSemaphore" har lagts till, vilket fungerar som en wrapper över C-strukturen rw_semaphore.
- För anvÀndning av mmap har en ny modul mm och en abstraktion VMA (wrapper över strukturen vm_area_struct) lagts till.
- GPIO-drivrutinen PL061 har övergÄtt till att anvÀnda makrot "dev_*!".
- En allmÀn kodstÀdning har genomförts.
KĂ€lla: opennet.ru
