Miguel Ojeda, författare till projektet Rust-for-Linux, har föreslagit en uppdaterad version av komponenterna för utveckling av enhetsdrivrutiner pÄ Rust-sprÄket för Linux-kÀrnans utvecklare att övervÀga. Stödet för Rust betraktas som experimentellt, men har redan godkÀnts för inkludering i linux-next-grenen. I den nya versionen har kommentarer som uttryckts i diskussionen av den första versionen av patcharna ÄtgÀrdats. Linus Torvalds har redan kopplat upp sig i diskussionen och föreslagit att logiken för vissa bitoperationer förÀndras.
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.
De mest mÀrkbara förÀndringarna i den nya versionen av patcharna:
- Koden för minneshantering har tagits bort frÄn potentiella "panic"-tillstÄnd vid fel, som till exempel minnesbrist. Den nyligen inkluderade versionen av Rust-biblioteket alloc har omarbetat koden för att hantera misslyckanden, men det slutliga mÄlet Àr att överföra alla funktioner som behövs för kÀrnan till den huvudredigerade versionen av alloc (Àndringarna har redan förberetts och skickats till den standard Rust-biblioteket).
- IstÀllet för nattliga byggen för att kompilera kÀrnan med Rust-stöd kan nu beta-versioner och stabila releaser av kompilatorn rustc anvÀndas. För nÀrvarande anvÀnds rustc 1.54-beta1 som referenskompilator, men efter utgivandet av version 1.54 i slutet av mÄnaden kommer just den att stödjas som referenskompilator.
- Stöd för att skriva tester med den hemvÀndande Rust-attributet "#[test]" och möjligheten att anvÀnda doctests för att dokumentera tester har lagts till.
- Stöd för ARM32- och RISCV-arkitekturer har lagts till utöver de tidigare stödda x86_64 och ARM64.
- Implementeringarna av GCC Rust (GCC-framÀnda för Rust) och rustc_codegen_gcc (rustc-backend för GCC) har förbÀttrats, och nu passerar de alla grundlÀggande tester.
- NivÄn av abstraktion har föreslagits för anvÀndning i program skrivna i Rust som anvÀnder kÀrnans mekanismer, skrivna i C, som röd-svarta trÀd, objekt med referensrÀkning, skapande av filhandtag, uppgifter, filer och in-/utdata-vektorer.
- Stödet för modulen "file_operations", makrot "module!", registreringen av makron och rudimentÀra drivrutiner (probe och remove) har förbÀttrats i komponenterna för utveckling av drivrutiner.
- I Binder har stöd för överföring av filhandtag och LSM-hakar implementerats.
- Ett mer funktionellt exempel pĂ„ en Rust-drivrutin föreslĂ„s â bcm2835-rng för den hĂ„rdvarubaserade slumpgeneratorn pĂ„ Raspberry Pi-kort.
Dessutom nÀmns projekt frÄn vissa företag kopplade till anvÀndningen av Rust i kÀrnan:
- Microsoft har uttryckt intresse för att delta i arbetet med att integrera stöd för Rust i Linux-kÀrnan och Àr redo att inom de kommande mÄnaderna tillhandahÄlla implementationer av drivrutiner för Hyper-V pÄ Rust.
- ARM arbetar pÄ att förbÀttra stödet för Rust för system baserade pÄ ARM-processorer. Projektet Rust har redan föreslagit Àndringar som gör 64-bitars ARM-system till en av plattformarna för förstahandsstöd (Tier-1).
- Google tillhandahÄller direkt stöd för projektet Rust for Linux, utvecklar en ny implementation av mekanismen för interprocesskommunikation, Binder, pÄ Rust och övervÀger att omskriva olika drivrutiner pÄ Rust. Genom ISRG (Internet Security Research Group) har Google finansierat arbetet med att integrera stöd för Rust i Linux-kÀrnan.
- IBM har implementerat stöd för Rust i kÀrnan för PowerPC-system.
- LSE-laboratoriet (Systems Research Laboratory) har utvecklat en SPI-drivrutin pÄ Rust.
KĂ€lla: opennet.ru
