Javaslat a Rust fejlesztőeszközök Linux kernelhez való hozzáadásának kérdésére

Nick Desagnier (Nick Desaulniers), aki a Google-nál dolgozik, hogy biztosítsa támogatás a Linux kernel felépítése a Clang fordító segítségével és azt is segítve javítsa ki a Rust fordító hibáit, felajánlotta konferencián tartani Linux vízvezeték-szerelő konferencia 2020 ülésén, hogy megvitassák a rendszermag-összetevők fejlesztésének lehetőségét Rustban. Nick az LLVM-nek szentelt mikrokonferenciát szervez, és úgy véli, jó lenne megvitatni a Rust támogatás lehetséges kernelbe történő integrálásának technikai szempontjait (már elkészített egy működő prototípust a KBuild számára), és megérteni, hogy szükséges-e ilyen támogatás egyáltalán hozzá kell adni, és milyen korlátozásokat kell elfogadni a Rust használatára vonatkozóan.

Emlékezzünk vissza, hogy a nyílt forráskódú csúcstalálkozó és az Embedded Linux konferencia nemrégiben folytatott vitájában Linus Torvalds nem zárta ki kötések megjelenése a magon kívüli kernel-alrendszerek (például illesztőprogramok) fejlesztéséhez olyan nyelveken, mint a Rust. Az illesztőprogramok Rust-ban való fejlesztésének képessége lehetővé tenné számunkra, hogy minimális erőfeszítéssel biztonságosabb és jobb illesztőprogramokat hozzunk létre, olyan problémáktól mentesen, mint például a memória felszabadítása utáni hozzáférés, nullmutató hivatkozások és puffertúllépések. Már számos harmadik féltől származó projekt létezik ennek a funkciónak a megvalósítására:

  • A „Fish in a Barrel” cég fejlesztői előkészített egy eszközkészlet betölthető modulok írásához a Linux kernelhez Rust nyelven, egy sor absztrakt réteg használatával az interfészek és kernelstruktúrák felett a biztonság növelése érdekében. A rétegek automatikusan generálódnak a meglévő kernelfejlécfájlok alapján a segédprogram segítségével bindgen. A Clang rétegek felépítésére szolgál. Az összeállított modulok a közbenső rétegek mellett a staticlib csomagot használják.
  • A Hongkongi Kínai Egyetem kutatói fejleszteni egy projekt a beágyazott rendszerek és a Dolgok Internete eszközök illesztőprogramjainak fejlesztésére a Rustban, amely szintén a bindgen-t használja a kernelfejlécfájlokon alapuló rétegek létrehozására. A keretrendszer lehetővé teszi az illesztőprogramok biztonságának javítását anélkül, hogy a rendszermagot módosítaná – ahelyett, hogy további elkülönítési szinteket hozna létre a rendszermagban az illesztőprogramok számára, javasoljuk, hogy blokkolja a problémákat a fordítási szakaszban a biztonságosabb Rust nyelv használatával. Feltételezhető, hogy a berendezésgyártók igényt tarthatnak erre a megközelítésre, ha sietve, megfelelő audit elvégzése nélkül fejlesztenek szabadalmaztatott illesztőprogramokat.
  • Framework fejlesztők C2Rust a C kód sugárzásához Rustba, magatartás kísérletek kernelmodulok konvertálására minimális kézi szerkesztéssel. Az egyik megemlített probléma az, hogy a kernel számos részében olyan GCC-bővítményeket használnak, amelyeket a C2Rust még nem támogat. A probléma megoldása érdekében a C2Rust azt tervezi, hogy támogatja a GCC inline, cold, alias, used és section attribútumokat, valamint bővíti az inline assembler képességeit, és megoldja az igazított és csomagolt struktúrákkal kapcsolatos problémákat (például xregs_state). . A kézi munkát igénylő jelentős problémák közé tartozik a nem triviális C makrók Rust makrókká való lefordításának képtelensége, valamint a típusok újradefiniálása, mivel a C2Rust a C típusokat definíciókká fordítja le a libc csomagban, de ez a csomag nem használható kernelmodulokban.

Forrás: opennet.ru

Hozzászólás