Kehys suojattujen ajurien kirjoittamiseen Linux-ytimelle Rustissa

Josh Triplett, joka työskentelee Intelillä ja on Crates.io:n kehitystä valvovassa komiteassa, puhuu Open Source Technology Summitissa toimitettu työryhmä, jonka tavoitteena oli saattaa Rust-kieli tasa-arvoon C-kielen kanssa järjestelmäohjelmoinnin alalla.

Valmisteilla olevassa työryhmässä Rust-kehittäjät yhdessä Intelin insinöörien kanssa valmistelevat spesifikaatioita, jotka määrittelevät toiminnallisuudet, jotka Rustissa on toteutettava järjestelmäohjelmointia varten. Järjestelmän ohjelmointi vaatii usein matalan tason manipulointia, kuten etuoikeutettujen prosessorin käskyjen suorittamista ja yksityiskohtaisten tietojen hankkimista prosessorin tilasta. Samankaltaisista ominaisuuksista, joita on jo kehitetty Rustille, mainitaan tuki nimeämättömille rakenteille, liitännäille, kokoonpanokielen lisäyksille ("asm!"-makro) ja BFLOAT16-liukulukumuodolle.

Josh uskoo, että järjestelmäohjelmoinnin tulevaisuus kuuluu Rustille, ja C-kieli nykyaikaisissa todellisuuksissa vaatii paikkaa, jonka Assembly valtasi viime vuosina. Ruoste
paitsi vapauttaa kehittäjiä C-kielelle ominaisista ongelmista, jotka johtuvat matalan tason muistityöstä, vaan tarjoaa myös mahdollisuuden käyttää sitä nykyaikaisten ohjelmointiparadigmojen kehittämisessä.

aikana keskusteluja esitykset
Josh keksi idean lisätä mahdollisuuden kehittää ajureita Linux-ytimeen Rust-kielellä, mikä tekisi mahdolliseksi luoda turvallisempia ja parempia ohjaimia pienellä vaivalla, ilman ongelmia, kuten muistin käyttö vapauttamisen jälkeen, null osoittimen viittaukset ja puskurin ylitykset.

Greg Kroah-Hartman, joka vastaa Linux-ytimen vakaan haaran ylläpidosta, ilmaisi olevansa valmis lisäämään kehyksen Rust-kielen ajurien kehittämiseen ytimeen, jos sillä on todellisia etuja C:hen verrattuna, esimerkiksi se tarjoaa turvallisen sidokset Kernel API:n kautta. Lisäksi Greg pitää tätä kehystä vain vaihtoehtona, joka ei ole oletusarvoisesti aktiivinen, jotta Rustia ei sisällytetä ytimen koontiriippuvuutena.

Kävi ilmi, että useat tiimit työskentelevät jo tähän suuntaan. Esimerkiksi 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.

Rinnakkainen on kehittymässä Toinen projekti keskittyi sulautettujen järjestelmien ja IoT-laitteiden ohjaimien kehittämiseen, mikä 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.

Kaikkia suunniteltuja toimintoja ei ole vielä toteutettu, mutta kehys on jo varsin sopiva työhön ja sillä kirjoitettiin toimiva ajuri Raspberry Pi 9512 -kortilla toimitetulle USB Ethernet -ohjaimelle LAN3. Olemassa oleva smsc95xx-ohjain, kirjoittanut v. C-kieli. On huomattava, että moduulin koko ja ajonaikaisten komponenttien ylimääräiset kustannukset, kun kehitetään ajuria Rustissa, ovat merkityksettömiä, mikä mahdollistaa kehyksen käytön laitteissa, joilla on rajalliset resurssit.

Lähde: opennet.ru

Lisää kommentti