Ogrodje za pisanje varnih gonilnikov za jedro Linuxa v Rust

Josh Triplett, ki dela pri Intelu in je v odboru za nadzor razvoja Crates.io, govori na vrhu o odprtokodni tehnologiji uveden delovna skupina, katere cilj je uskladiti jezik Rust z jezikom C na področju sistemskega programiranja.

V delovni skupini, ki je v nastajanju, bodo Rust razvijalci skupaj z inženirji iz Intela pripravili specifikacije, ki bodo definirale funkcionalnosti, ki jih je treba implementirati v Rust za sistemsko programiranje. Sistemsko programiranje pogosto zahteva nizkonivojsko manipulacijo, kot je izvajanje ukazov privilegiranega procesorja in pridobivanje podrobnih informacij o stanju procesorja. Od podobnih funkcij, ki se že razvijajo za Rust, je omenjena podpora za neimenovane strukture, unije, vstavke zbirnih jezikov (makro »asm!«) in format števila s plavajočo vejico BFLOAT16.

Josh verjame, da prihodnost sistemskega programiranja pripada Rustu, jezik C pa v sodobni realnosti zaseda mesto, ki ga je v preteklih letih zasedal Assembly. Rja
ne le razbremeni razvijalce težav, ki so značilne za jezik C, ki nastanejo zaradi dela s pomnilnikom na nizki ravni, temveč ponuja tudi možnost uporabe pri razvoju sodobnih programskih paradigem.

Med razprave predstave
Josh je prišel na idejo o dodajanju možnosti za razvoj gonilnikov v jedru Linuxa v jeziku Rust, kar bi omogočilo ustvarjanje varnejših in boljših gonilnikov z minimalnim naporom, brez težav, kot je dostop do pomnilnika po sprostitvi, null dereference kazalcev in prekoračitve medpomnilnika.

Greg Kroah-Hartman, ki je odgovoren za vzdrževanje stabilne veje jedra Linuxa, je izrazil pripravljenost, da jedru doda ogrodje za razvoj gonilnikov v jeziku Rust, če ima resnične prednosti pred C-jem, na primer, zagotavlja varno vezave preko Kernel API. Poleg tega Greg obravnava to ogrodje le kot možnost, ki privzeto ni aktivna, da ne bi vključil Rust kot odvisnost gradnje od jedra.

Izkazalo se je, da v tej smeri deluje že več ekip. Na primer, razvijalci iz podjetja "Fish in a Barrel" pripravljeni komplet orodij za pisanje modulov, ki jih je mogoče naložiti za jedro Linuxa v jeziku Rust, z uporabo nabora abstraktnih plasti prek vmesnikov in struktur jedra za povečanje varnosti. Sloji se samodejno generirajo na podlagi obstoječih datotek glave jedra s pomočjo pripomočka bindgen. Clang se uporablja za gradnjo plasti. Poleg vmesnih slojev sestavljeni moduli uporabljajo paket staticlib.

Vzporedno se razvija Drug projekt je bil osredotočen na razvoj gonilnikov za vgrajene sisteme in naprave IoT, ki prav tako uporablja bindgen za ustvarjanje plasti na podlagi datotek glave jedra. Ogrodje vam omogoča izboljšanje varnosti gonilnikov brez spreminjanja jedra - namesto ustvarjanja dodatnih ravni izolacije za gonilnike v jedru je predlagano, da se težave blokirajo v fazi prevajanja z uporabo varnejšega jezika Rust. Predpostavlja se, da bi lahko proizvajalci opreme, ki razvijajo lastniške gonilnike, potrebovali takšen pristop v naglici, ne da bi opravili ustrezno revizijo.

Vse predvidene funkcionalnosti še niso implementirane, vendar je ogrodje že povsem primerno za delo in je bilo uporabljeno za pisanje delujočega gonilnika za krmilnik LAN9512 USB Ethernet, ki je priložen na plošči Raspberry Pi 3. Obstoječi gonilnik smsc95xx, ki ga je napisal v jezik C. Opozoriti je treba, da so velikost modula in stroški komponent izvajalnega okolja pri razvoju gonilnika v Rust nepomembni, kar omogoča uporabo ogrodja za naprave z omejenimi viri.

Vir: opennet.ru

Dodaj komentar