Miguel Ojeda, författare till projektet Rust-for-Linux, föreslagen för övervägande av kärnutvecklare Linux Den fjärde versionen av komponenter för att utveckla enhetsdrivrutiner i Rust. Rust-stöd anses vara experimentellt, men har redan godkänts för inkludering i Linux-next-grenen och är tillräckligt moget för att påbörja arbetet med att skapa abstraktionslager över kärnundersystem, samt skriva drivrutiner och moduler. Utvecklingen finansieras av Google och ISRG (Internet Security Research Group), grundaren av Let's Encrypt-projektet, som främjar HTTPS och utveckling av tekniker för att förbättra internetsäkerheten.
Kom ihåg att de föreslagna ändringarna gör det möjligt att använda Rust som ett andra språk för att utveckla drivrutiner och kärnmoduler. Ruststöd presenteras som ett alternativ som inte är aktiverat som standard och resulterar inte i att Rust ingår som ett obligatoriskt byggberoende för kärnan. Genom att använda Rust för drivrutinsutveckling kan du skapa säkrare och bättre drivrutiner med minimal ansträngning, utan problem som minnesåtkomst efter frigöring, nollpekarereferenser och buffertöverskridanden.
Minnessäkerhet tillhandahålls i Rust vid kompileringstillfället genom referenskontroll, hålla reda på objektägande och objektlivslängd (scope), samt genom utvärdering av korrektheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.
Den nya versionen av patcharna fortsätter att ta itu med de farhågor som framfördes under diskussionen om den första, andra och tredje utgåvan av patcharna. I den nya versionen:
- Övergången till att använda den stabila versionen av Rust 1.58.0 som referenskompilator har gjorts. De ändringar som krävs för projektet, och som ännu inte ingår i Rusts kärnverktygskedja, inkluderar flaggan "-Zsymbol-mangling-version=v0" (förväntas i Rust 1.59.0) och läget "maybe_uninit_extra" (förväntas i Rust 1.60.0).
- Lade till automatiska kontroller av förekomst av lämpliga Rust-verktyg och utökade möjligheter för att testa Rust-stöd i systemet.
- Nya abstraktioner föreslås för åtkomst till enhetsidentifieringstabeller ("IdArray" och "IdTable") från Rust-kod.
- Lade till lager för åtkomst till timerrelaterade funktioner (klockramverk).
- Plattformsdrivrutiner definieras nu via trait-implementeringar.
- Ett nytt makro har lagts till för att förenkla registreringen av plattformsdrivrutiner, och en ny generisk drivrutinsmall har föreslagits.
- Lade till makron för "dev_*"-strukturer.
- Lade till "{läs,skriv}*_relaxed"-metoder för IoMem-typen .
- Tog bort FileOpener-egenskapen för att förenkla filhantering.
- Parametern "ThisModule" har lagts till i argumenten som skickas vid registrering av en drivrutin.
- En typisk mall för att skapa kärnmoduler i Rust-språket föreslås.
Källa: opennet.ru
