Pasiūlymas aptarti Rust kūrimo įrankių įtraukimo į Linux branduolį klausimą

Nickas Desagnier (Nickas Desaulniersas), kuris dirba „Google“, kad pateiktų palaikymas „Linux“ branduolio kūrimas naudojant „Clang“ kompiliatorių ir taip pat padedant ištaisykite „Rust“ kompiliatoriaus klaidas, pasiūlė surengti konferencijoje „Linux“ santechnikų konferencija 2020 m sesijoje aptarti, kaip sukurti branduolio komponentus Rust. Nickas organizuoja mikrokonferenciją, skirtą LLVM, ir mano, kad būtų malonu aptarti techninius galimo Rust palaikymo integravimo į branduolį aspektus (jis jau yra parengęs veikiantį KBuild prototipą) ir suprasti, ar toks palaikymas turėtų būti iš viso turi būti pridėta ir kokie „Rust“ naudojimo apribojimai turėtų būti priimtini.

Prisiminkime, kad neseniai vykusioje diskusijoje Open Source Summit ir Embedded Linux konferencijoje Linusas Torvaldsas neatmetė įrišimų atsiradimas kuriant nepagrindines branduolio posistemes (pavyzdžiui, tvarkykles) tokiomis kalbomis kaip Rust. Galimybė kurti tvarkykles naudojant Rust leistų sukurti saugesnes ir geresnes tvarkykles su minimaliomis pastangomis, be problemų, tokių kaip prieiga prie atminties atlaisvinus, nulinės rodyklės nuorodos ir buferio viršijimas. Šiai funkcijai įgyvendinti jau yra keli trečiųjų šalių projektai:

  • Kūrėjai iš bendrovės „Žuvis statinėje“ paruoštas įrankių rinkinys, skirtas įkeliamiems Linux branduolio moduliams rašyti Rust kalba, naudojant abstrakčių sluoksnių rinkinį per sąsajas ir branduolio struktūras, siekiant padidinti saugumą. Sluoksniai automatiškai generuojami pagal esamus branduolio antraštės failus naudojant įrankį bindgen. Clang naudojamas sluoksniams kurti. Be tarpsluoksnių, surinktuose moduliuose naudojamas paketas staticlib.
  • Tyrėjai iš Kinijos Honkongo universiteto vystytis įterptųjų sistemų ir daiktų interneto įrenginių tvarkyklių kūrimo projektas Rust, kuris taip pat naudoja bindgen sluoksniams generuoti pagal branduolio antraštės failus. Sistema leidžia pagerinti tvarkyklės saugumą nekeičiant branduolio – užuot sukūrus papildomus branduolio tvarkyklių izoliavimo lygius, siūloma blokuoti problemas kompiliavimo etape, naudojant saugesnę Rust kalbą. Daroma prielaida, kad tokio požiūrio gali prireikti įrangos gamintojų, kurie skuba, neatlikę tinkamo audito, kuria patentuotas tvarkykles.
  • Framework kūrėjai C2Rust C kodo transliavimui į Rust, elgesys branduolio modulių konvertavimo eksperimentai su minimaliu rankiniu redagavimu. Viena iš pastebėtų problemų yra tai, kad daugelyje branduolio dalių naudojamas kodas, kuriame naudojami GCC plėtiniai, kurie dar nepalaikomi C2Rust. Kad išspręstų šią problemą, C2Rust planuoja pridėti GCC atributų inline, cold, slapyvardį, naudojamą ir skyrių palaikymą, taip pat išplėsti inline surinkėjo galimybes ir išspręsti problemas, susijusias su struktūromis, kurios yra suderintos ir supakuotos (pavyzdžiui, xregs_state). . Reikšmingos problemos, kurioms reikia rankinio darbo, yra nesugebėjimas išversti nereikšmingų C makrokomandų į Rust makrokomandas ir būtinybė iš naujo apibrėžti tipus, nes C2Rust verčia C tipus į apibrėžimus libc pakete, tačiau šio paketo negalima naudoti branduolio moduliuose.

Šaltinis: opennet.ru

Добавить комментарий