Návrh na projednání problematiky přidání vývojových nástrojů Rust do linuxového jádra

Nick Desagnier (Nick Desaulniers), který ve společnosti Google poskytuje podpora vytváření linuxového jádra pomocí kompilátoru Clang a také pomáhání opravit chyby v kompilátoru Rust, navrhl držet na konferenci Konference linuxových instalatérů 2020 zasedání k diskusi o umožnění vývoje komponent jádra v Rustu. Nick pořádá mikrokonferenci věnovanou LLVM a věří, že by bylo hezké prodiskutovat technické aspekty možné integrace podpory Rust do jádra (už připravil funkční prototyp pro KBuild) a pochopit, zda by taková podpora měla být vůbec přidat a jaká omezení použití Rustu by měla být přijata.

Připomeňme, že v nedávné diskusi na konferenci Open Source Summit a Embedded Linux Linus Torvalds nevyloučil vznik vazeb pro vývoj subsystémů jádra (například ovladačů) v jazycích, jako je Rust. Schopnost vyvíjet ovladače v Rustu by nám umožnila vytvářet bezpečnější a lepší ovladače s minimálním úsilím, bez problémů, jako je přístup k paměti po uvolnění, dereference nulového ukazatele a přetečení vyrovnávací paměti. K implementaci této funkce již existuje několik projektů třetích stran:

  • Vývojáři ze společnosti „Fish in a Barrel“ připravený sada nástrojů pro psaní načítatelných modulů pro jádro Linuxu v jazyce Rust využívající sadu abstraktních vrstev nad rozhraními a strukturami jádra ke zvýšení bezpečnosti. Vrstvy jsou automaticky generovány na základě existujících souborů hlaviček jádra pomocí nástroje bindgen. Clang se používá k vytváření vrstev. Kromě mezivrstev používají sestavené moduly balíček staticlib.
  • Vědci z Čínské univerzity v Hongkongu rozvíjet projekt vývoje ovladačů pro vestavěné systémy a zařízení internetu věcí v Rustu, který také používá bindgen ke generování vrstev založených na hlavičkových souborech jádra. Rámec vám umožňuje zlepšit zabezpečení ovladačů bez provádění změn v jádře – namísto vytváření dalších úrovní izolace pro ovladače v jádře se navrhuje blokovat problémy ve fázi kompilace pomocí bezpečnějšího jazyka Rust. Předpokládá se, že takový přístup mohou vyžadovat výrobci zařízení, kteří ve spěchu vyvíjejí proprietární ovladače, aniž by provedli řádný audit.
  • Vývojáři frameworku C2Rust pro vysílání C kódu do Rustu, chování experimenty s převodem modulů jádra s minimálními ručními úpravami. Jedním z uvedených problémů je použití kódu v mnoha částech jádra, který používá rozšíření GCC, která ještě nejsou podporována v C2Rust. K vyřešení tohoto problému plánuje C2Rust přidat podporu pro atributy GCC inline, cold, alias, used a section, stejně jako rozšířit možnosti inline assembleru a vyřešit problémy se strukturami, které jsou jak zarovnané, tak zabalené (například xregs_state) . Mezi významné problémy, které vyžadují ruční práci, patří nemožnost přeložit netriviální makra C do maker Rust a potřeba předefinovat typy, protože C2Rust překládá typy C do definic v balíčku libc, ale tento balíček nelze použít v modulech jádra.

Zdroj: opennet.ru

Přidat komentář