Rámec pre písanie bezpečných ovládačov pre jadro Linuxu v Ruste

Josh Triplett, ktorý pracuje v spoločnosti Intel a je vo výbore, ktorý dohliada na vývoj Crates.io, vystúpil na Open Source Technology Summit predložené pracovná skupina zameraná na zjednotenie jazyka Rust s jazykom C v oblasti programovania systémov.

V pracovnej skupine, ktorá je v procese vytvárania, pripravia vývojári Rustu spolu s inžiniermi z Intelu špecifikácie definujúce funkcionalitu, ktorú je potrebné implementovať v Ruste pre systémové programovanie. Programovanie systému často vyžaduje manipuláciu na nízkej úrovni, ako je vykonávanie inštrukcií privilegovaného procesora a získanie podrobných informácií o stave procesora. Z podobných funkcií, ktoré už boli vyvinuté pre Rust, je zaznamenaná podpora pre nepomenované štruktúry, zväzky, vložky v assembleri (makro „asm!“) a formát čísel s pohyblivou rádovou čiarkou BFLOAT16.

Josh verí, že budúcnosť systémového programovania patrí Rustu a jazyk C si v modernej realite robí nárok na miesto, ktoré v minulých rokoch zaujímalo Assembly. Hrdza
nielenže zbavuje vývojárov problémov spojených s jazykom C, ktoré vznikajú v dôsledku nízkoúrovňovej práce s pamäťou, ale poskytuje aj možnosť využiť ju pri vývoji moderných programovacích paradigiem.

počas diskusie výkony
Josh prišiel s myšlienkou pridať možnosť vývoja ovládačov v linuxovom jadre v jazyku Rust, čo by umožnilo vytvárať bezpečnejšie a lepšie ovládače s minimálnym úsilím, bez problémov, ako je prístup k pamäti po uvoľnení, null dereferences ukazovateľa a prekročenie vyrovnávacej pamäte.

Greg Kroah-Hartman, ktorý je zodpovedný za udržiavanie stabilnej vetvy linuxového jadra, vyjadril svoju pripravenosť pridať do jadra rámec pre vývoj ovládačov v jazyku Rust, ak bude mať skutočné výhody oproti C, napríklad poskytne bezpečný väzby cez rozhranie API jadra. Okrem toho Greg považuje tento rámec iba za možnosť, ktorá nie je štandardne aktívna, aby nezahrnul Rust ako závislosť zostavenia na jadre.

Ukázalo sa, že v tomto smere už pracuje viacero tímov. Napríklad vývojári zo spoločnosti „Fish in a Barrel“ pripravené súprava nástrojov na písanie načítateľných modulov pre jadro Linuxu v jazyku Rust s použitím sady abstraktných vrstiev nad rozhraniami a štruktúrami jadra na zvýšenie bezpečnosti. Vrstvy sa automaticky generujú na základe existujúcich hlavičkových súborov jadra pomocou pomôcky bindgen. Clang sa používa na vytváranie vrstiev. Okrem medzivrstiev používajú zostavené moduly balík staticlib.

Paralelne sa vyvíja Ďalší projekt sa zameral na vývoj ovládačov pre vstavané systémy a zariadenia internetu vecí, ktorý tiež využíva bindgen na generovanie vrstiev založených na hlavičkových súboroch jadra. Rámec vám umožňuje zlepšiť bezpečnosť ovládačov bez vykonania zmien v jadre – namiesto vytvárania dodatočných úrovní izolácie pre ovládače v jadre sa navrhuje blokovať problémy vo fáze kompilácie pomocou bezpečnejšieho jazyka Rust. Predpokladá sa, že takýto prístup môžu vyžadovať výrobcovia zariadení, ktorí vyvíjajú proprietárne ovládače v zhone bez vykonania riadneho auditu.

Nie všetky zamýšľané funkcionality ešte neboli implementované, ale framework je už celkom vhodný na prácu a bol použitý na napísanie funkčného ovládača pre LAN9512 USB Ethernet radič dodávaný v doske Raspberry Pi 3. Existujúci ovládač smsc95xx, napísaný v r. jazyk C. Je potrebné poznamenať, že veľkosť modulu a réžia z komponentov runtime pri vývoji ovládača v Ruste sú zanedbateľné, čo umožňuje použitie rámca pre zariadenia s obmedzenými zdrojmi.

Zdroj: opennet.ru

Pridať komentár