Josh Triplett, který pracuje ve společnosti Intel a je členem výboru dohlížejícího na vývoj Crates.io, v svém vystoupení na konferenci Open Source Technology Summit pracovní skupiny zaměřené na dosažení parity jazyka Rust s jazykem C v oblasti systémového programování.
Ve skupině, která je právě vytvářena, programátoři Rust spolu s inženýry z Intelu připraví specifikace definující funkčnost, kterou je třeba implementovat v Rust pro systémové programování. Systémové programování často vyžaduje nízkoúrovňové manipulace, jako je provádění privilegovaných procesorových instrukcí a získávání podrobných informací o stavu procesoru. Mezi již vyvíjené možnosti pro Rust patří podpora anonymních struktur, unie (union), assemblerových vložek (makro „asm!“) a formátu čísel s plovoucí závorkou BFLOAT16.
Josh věří, že budoucnost systémového programování patří Rustu, zatímco jazyk C v současných reáliích usiluje o místo, které v minulých letech zaujímal assembler. Rust
nejenže zbavuje programátory problémů spojených s jazykem C, vznikajících z nízkoúrovňové práce s pamětí, ale také poskytuje možnost využití při vývoji moderních programovacích paradigmat.
Během vystoupení
Josh navrhl přidání možnosti vývoje ovladačů v jazyce Rust do jádra Linux, což umožní s minimálním úsilím vytvářet bezpečné a kvalitnější ovladače, zbavené problémů, jako je přístup k uvolněné paměti, d dereference nulových ukazatelů a přetečení bufferu.
Greg Kroah-Hartman, odpovědný za podporu stabilní větve jádra Linux, vyjádřil ochotu přidat do jádra framework pro vývoj ovladačů v jazyce Rust, pokud bude mít skutečné výhody oproti jazyku C, například poskytne bezpečné obálky nad API jádra. Dále Greg považuje tento framework pouze za možnost, která není aktivní ve výchozím nastavení, aby se Rust nezapojil do seznamu závislostí jádra.
Ukázalo se, že několik týmů už pracuje tímto směrem. Například programátoři ze společnosti „Fish in a Barrel“ 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 . Pro kompilaci vrstev se používá Clang. Kompilované moduly kromě vrstev používají balíček staticlib.
Současně další projekt zaměřený na vývoj ovladačů pro vestavěné systémy a zařízení internetu věcí, který také používá bindgen k generování vrstev na základě hlavičkových souborů jádra. Rámec umožňuje zvýšit bezpečnost ovladačů bez nutnosti měnit jádro — namísto vytváření dalších izolačních úrovní pro ovladače v jádře se navrhuje blokovat problémy již ve fázi kompilace, a to aplikací bezpečnějšího jazyka Rust. Předpokládá se, že takový přístup může být poptáván výrobci zařízení, kteří vyvíjejí proprietární ovladače na poslední chvíli bez řádného auditu.
Ne všechny plánované funkce jsou zatím realizovány, ale rámec je už dostatečně připraven pro použití a byl využit k napsání funkčního ovladače pro ethernetový řadič LAN9512 USB dodávaný na desce Raspberry Pi 3. Jako referenční implementace při psaní Rust-ovladače byl použit stávající ovladač smsc95xx napsaný v jazyce C. Je poznamenáno, že velikost modulu a režijní náklady na runtime komponenty při vývoji ovladače v Rustu jsou zanedbatelné, což umožňuje aplikaci rámce pro zařízení s omezenými zdroji.
Zdroj: opennet.ru
