Josh Triplett, pracujúci v spoločnosti Intel a člen výboru, ktorý dohliada na rozvoj Crates.io, vo svojom prejave na konferencii Open Source Technology Summit pracovnú skupinu zameranú na dosiahnutie parity jazyka Rust s jazykom C v oblasti systémového programovania.
V pracovnej skupine, ktorá sa aktuálne formuje, vývojári Rust v spolupráci s inžiniermi zo spoločnosti Intel vypracujú špecifikácie na definovanie funkcií, ktoré je potrebné implementovať v Rust pre systémové programovanie. Systémové programovanie často vyžaduje nízkoúrovňové manipulácie, ako je vykonávanie privilegovaných procesorových inštrukcií a získavanie podrobných informácií o stave procesora. Medzi už rozvíjané funkcie pre Rust patrí podpora pomenovaných štruktúr, zjednotení (union), inline assemblerových vložiek (makro "asm!") a formátu čísiel s plávajúcou desatinnou čiarkou BFLOAT16.
Josh verí, že budúcnosť systémového programovania patrí jazyku Rust, zatiaľ čo jazyk C v súčasnosti bojuje o miesto, ktoré predtým patrilo assembleru.
Rust nielenže zbavuje vývojárov problémov, ktoré sa spájajú s jazykom C v dôsledku nízkoúrovňovej manipulácie s pamäťou, ale tiež umožňuje využívať moderné programovacie paradigmy.
Počas prednášky
Josh navrhol pridať možnosť vývoja ovládačov v jazyku Rust do jadra Linux, čo by umožnilo s minimálnymi námaham vytvoriť bezpečné a kvalitnejšie ovládače, zbavené problémov ako je prístup do oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov a prekročenie hraníc bufra.
Greg Kroah-Hartman, zodpovedný za podporu stabilnej vetvy jadra Linux, vyjadril ochotu pridať framework na vývoj ovládačov v jazyku Rust do jadra, ak prinesie reálne výhody v porovnaní s jazykom C, napríklad poskytne bezpečné obaly nad API jadra. Okrem toho Greg považuje tento framework iba za možnosť, ktorá nebude predvolene aktívna, aby sa Rust nestal jednou z build závislostí jadra.
Ukázalo se, že několik týmů již pracuje v této oblasti. Například vývojáři z firmy „Fish in a Barrel“ nástroj pro psaní modulů pro Linuxové jádro v jazyce Rust, využívající k posílení zabezpečení sadu abstraktních vrstev nad rozhraními a strukturami jádra. Vrstva se automaticky generuje na základě existujících hlavičkových souborů jádra pomocí utilitky . Pro sestavení vrstev se používá Clang. Sestavované moduly kromě vrstev využívají balíček staticlib.
Současně další projekt, soustředící se na vývoj ovladačů pro vestavěné systémy a zařízení internetu věcí, který také používá bindgen pro generování vrstev na základě hlavičkových souborů jádra. Rámec umožňuje zvýšení bezpečnosti ovladačů bez změn v jádře — místo vytváření dalších izolačních vrstev v jádře se navrhuje blokovat problémy již ve fázi kompilace, použitím bezpečnějšího jazyka Rust. Předpokládá se, že tento přístup může být žádaný výrobci hardwaru, kteří vyvíjejí proprietární ovladače na rychlo bez patřičného auditu.
Ne všechny zamýšlené funkcionality jsou prozatím realizovány, ale rámec je již docela použitelný a byl použit k napsání pracovního ovladače pro Ethernetový řadič LAN9512 USB, dodávaný na desce Raspberry Pi 3. Jako referenční implementace při psaní ovladače v Rustu byl použit existující ovladač smsc95xx, napsaný v jazyce C. Je zmíněno, že velikost modulu a režijní náklady na runtime komponenty při vývoji ovladače v Rustu jsou nevýznamné, což umožňuje použití rámce pro zařízení s omezenými zdroji.
Zdroj: opennet.ru
