Ehdotus keskusteluksi Rust-kehitystyökalujen lisäämisestä Linux-ytimeen

Nick Desagnier (Nick Desaulniers), joka työskentelee Googlella tarjotakseen tuki Linux-ytimen rakentaminen Clang-kääntäjällä ja myös auttaa korjata virheitä Rust-kääntäjässä, hän tarjosi pitää konferenssissa Linux Plumbers Conference 2020 istunnossa keskustellaan ytimen komponenttien kehittämisen mahdollisuudesta Rustissa. Nick järjestää LLVM:lle omistetun mikrokonferenssin ja uskoo, että olisi mukavaa keskustella Rust-tuen mahdollisen integroinnin ytimeen teknisistä näkökohdista (hän ​​on jo valmistellut toimivan prototyypin KBuildille) ja ymmärtää, pitäisikö tällaista tukea. lisättävä ollenkaan ja mitkä ruosteen käytön rajoitukset pitäisi hyväksyä.

Muistetaan, että äskettäin Open Source Summit and Embedded Linux -konferenssissa käydyssä keskustelussa Linus Torvalds ei sulkenut pois sidosten syntyminen ei-ytimen ytimen alijärjestelmien (esimerkiksi ajurien) kehittämiseen kielillä, kuten Rust. Mahdollisuus kehittää ohjaimia Rustissa antaisi meille mahdollisuuden luoda turvallisempia ja parempia ohjaimia pienellä vaivalla, ilman ongelmia, kuten muistin käyttö vapauttamisen jälkeen, nollaosoittimen viittaukset ja puskurin ylitykset. Tämän ominaisuuden toteuttamiseksi on jo useita kolmannen osapuolen projekteja:

  • Kehittäjät yrityksestä "Fish in a Barrel" valmis työkalupakki ladattavien moduulien kirjoittamiseen Linux-ytimelle Rust-kielellä käyttämällä abstrakteja kerroksia rajapintojen ja ytimen rakenteiden päällä turvallisuuden lisäämiseksi. Tasot luodaan automaattisesti olemassa olevien ytimen otsikkotiedostojen perusteella apuohjelman avulla bindgen. Clangia käytetään kerrosten rakentamiseen. Kootuissa moduuleissa käytetään välikerrosten lisäksi staticlib-pakettia.
  • Tutkijat Hongkongin kiinalaisesta yliopistosta kehittää projekti ajurien kehittämiseksi sulautetuille järjestelmille ja Internet of Things -laitteille Rustissa, joka myös käyttää bindgeniä ytimen otsikkotiedostoihin perustuvien kerrosten luomiseen. Kehyksen avulla voit parantaa ajurien turvallisuutta tekemättä muutoksia ytimeen - sen sijaan, että luotaisiin ylimääräisiä eristystasoja ajureille ytimessä, ehdotetaan estämään ongelmat käännösvaiheessa käyttämällä turvallisempaa Rust-kieltä. Oletuksena on, että laitevalmistajat, jotka kehittävät omaa ajuria kiireessä suorittamatta asianmukaista auditointia, voivat vaatia tällaista lähestymistapaa.
  • Kehyskehittäjät C2Rust C-koodin lähettämiseen Rustille, käytös kokeiluja ytimen moduulien muuntamisesta minimaalisilla manuaalisilla muokkauksilla. Yksi havaituista ongelmista on koodin käyttö monissa ytimen osissa, jotka käyttävät GCC-laajennuksia, joita C2Rust ei vielä tue. Tämän ongelman ratkaisemiseksi C2Rust aikoo lisätä tuen GCC-attribuuteille inline, cold, alias, used ja section, sekä laajentaa inline assemblerin ominaisuuksia ja ratkaista ongelmia rakenteissa, jotka on sekä kohdistettu että pakattu (esimerkiksi xregs_state). . Merkittäviä manuaalista työtä vaativia ongelmia ovat kyvyttömyys kääntää ei-triviaaleja C-makroja Rust-makroiksi ja tarve määritellä tyypit uudelleen, koska C2Rust kääntää C-tyypit määritelmiksi libc-paketissa, mutta tätä pakettia ei voi käyttää ydinmoduuleissa.

Lähde: opennet.ru

Lisää kommentti