Návrh k diskusi otázky přidání nástrojů pro vývoj v jazyce Rust do jádra Linux

Nik DeSanjé (Nick DeSanjé), který v Google zajišťuje podporu kompilaci jádra Linuxu s použitím kompilátoru Clang a také pomáhá odstraňovat chyby v kompilátoru Rust, navrhl aby se zúčastnil konference Linux Plumbers Conference 2020 sezením k diskusi o možnostech vývoje komponent jádra v jazyce Rust. Nik organizuje mikro-konferenci zaměřenou na LLVM a domnívá se, že by bylo dobré probrat technické aspekty možné integrace podpory Rust do jádra (pro KBuild již připravil pracovní prototyp) a zjistit, zda by taková podpora měla být vůbec zavedena a jaká omezení by měla být přijata pro použití Rust.

Připomeňme, že v nedávné diskuzi na konferenci "Open Source Summit and Embedded Linux" Linus Torvalds nevyřadil možnost zavedení vazeb pro vývoj pomocných subsystémů jádra (např. ovladačů) v takových jazycích jako Rust. Možnost vyvíjet ovladače v jazyce Rust by umožnila s minimálním úsilím vytvářet bezpečné a kvalitnější ovladače, zbavené problémů, jako je přístup do oblasti paměti po jejím uvolnění, dereference nulových ukazatelů a překročení hranic bufferu. Již existuje několik externích projektů na realizaci takové možnosti:

  • Vývojáři ze společnosti "Fish in a Barrel" připravili nástroje pro psaní modulů pro jádro Linuxu v jazyce Rust, používající pro zvýšení ochrany sadu abstraktních vrstev nad rozhraními a strukturami jádra. Tyto vrstvy jsou automaticky generovány na základě existujících hlavičkových souborů jádra pomocí utilit bindgen. Pro kompilaci vrstev se používá Clang. Kompilované moduly kromě vrstev používají balíček staticlib.
  • Výzkumníci z Čínské univerzity v Hongkongu rozvíjejí projekt pro vývoj ovladačů pro vestavěné systémy a zařízení internetu věcí, který také využívá bindgen pro generování vrstev na základě hlavičkových souborů jádra. Framework umožňuje zvýšení bezpečnosti ovladačů bez změn v jádře - místo vytváření dalších izolačních úrovní v jádře pro ovladače se navrhuje blokovat problémy už při kompilaci, použitím bezpečnějšího jazyka Rust. Předpokládá se, že takový přístup by mohl být vyhledáván výrobci hardwaru, kteří vyvíjejí proprietární ovladače na rychlo bez řádného auditu.
  • Vývojáři frameworku C2Rust pro překlad C kódu na Rust, organizují experimenty s transformací modulů jádra s minimálními ručními úpravami. Mezi problémy se uvádí použití v mnoha částech jádra kódu, ve kterém se používají rozšíření GCC, která nejsou zatím podporována v C2Rust. Pro vyřešení tohoto problému se plánuje v C2Rust přidat podporu pro GCC atributy inline, cold, alias, used a section, stejně jako rozšířit možnosti inline assembleru a řešit problémy se strukturami, které jsou zároveň vyrovnané a zabalené (např. xregs_state). Mezi významné problémy vyžadující ruční práci patří nemožnost překládat netriviální C makra do Rust maker a potřeba redefinice typů, protože C2Rust překládá C typy na definice v balíčku libc, avšak tento balíček nelze použít v modulech jádra.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster