Miguel Ojeda, autor projektu Rust-for-Linux, navrhol pre zváženie vývojárom jadra Linux vydanie v8 komponentov pre vývoj ovládačov zariadení v jazyku Rust. Toto je revízia patchov so zohľadnením prvého variantu, zverejneného bez čísla verzie. Podpora Rust je považovaná za experimentálnu, ale už je zahrnutá v vetve linux-next a chce byť integrovaná do jesenného vydania 5.20/6.0 a je dostatočne rozvinutá pre začatie práce na vytváraní vrstiev abstrakcie nad subsystémami jadra a pre písanie ovládačov a modulov. Vývoj je financovaný spoločnosťou Google a organizáciou ISRG (Internet Security Research Group), ktorá je zakladateľom projektu Let’s Encrypt a podporuje propagáciu HTTPS a rozvoj technológií na zvýšenie bezpečnosti internetu.
V novej verzii:
- Nástroje a verzia knižnice alloc, zbavená možných generácií stavu „panic“ pri výskyte chýb, boli aktualizované na vydanie Rust 1.62. V porovnaní s predtým použitou verziou je v nástrojoch Rust stabilizovaná podpora funkčnosti const_fn_trait_bound, ktorá sa používa v patchoch pre jadro.
- Kód vazieb bol vyčlenený do samostatného crate balíka „bindings“, čo uľahčuje prekompiláciu v prípade zmien len v hlavnom balíku „kernel“.
- Implementácia makra „concat_idents!“ bola prepracovaná do podoby procedurálneho makra, ktoré nie je viazané na funkčnosť concat_idents a umožňuje použitie odkazov na lokálne premenné.
- Makro „static_assert!“ bolo prepracované, čo umožnilo používanie „core::assert!()“ v akomkoľvek kontexte namiesto konštánt.
- Makro „build_error!“ bolo prispôsobené na prácu pri nastavení pre moduly režimu „RUST_BUILD_ASSERT_{WARN,ALLOW}“.
- Bol pridaný samostatný súbor s nastaveniami „kernel/configs/rust.config“.
- Spracované v makropodstavkach súbory „*.i“ boli premenované na „*.rsi“.
- Podpora pre kompiláciu Rust komponentov s úrovňami optimalizácie odlišnými od aplikovaných pre kód v jazyku C bola zastavená.
- Bol pridaný modul fs, ktorý poskytuje obaly pre prácu s súborovými systémami. Bol navrhnutý príklad jednoduchej súborovej systému napísaného v jazyku Rust.
- Bol pridaný modul workqueue na prácu so systémovými frontami (poskytuje obal nad štruktúrami jadra work_struct a workqueue_struct).
- Pokračuje sa vo vývoji modulu kasync s implementáciou metód asynchrónneho programovania (async). Bol pridaný príklad fungujúceho na úrovni jadra TCP servera, napísaného v Rust.
- Bol pridaný spôsob spracovania prerušení v jazyku Rust pomocou typov [Threaded]Handler a [Threaded]Registration.
- Bol pridaný procedurálny makro "#[vtable]", ktorý zjednodušuje prácu s tabuľkami ukazovateľov na funkcie, ako je štruktúra file_operations.
- Bol pridaný implementácia obojsmerných prepojených zoznamov "unsafe_list::List".
- Bol pridaný počiatočný podpora RCU (Read-copy-update) a typ Guard na kontrolu väzby zámky na čítanie k aktuálnemu vlákne.
- Bol pridaný funkcia Task::spawn() na vytváranie a automatické spúšťanie jadrových vlákien. Bol pridaný aj metóda Task::wake_up().
- Bol pridaný modul delay, ktorý umožňuje používať oneskorenia (obal nad msleep()).
Navrhované zmeny umožňujú používať Rust ako druhý jazyk na vývoj ovládačov a modulov jadra. Podpora Rust je prezentovaná ako možnosť, nie aktívna predvolene a nevedúca k zahrnutiu Rust medzi povinné závislosti pre zostavenie jadra. Použitie Rust na vývoj ovládačov umožní s minimálnym úsilím vytvárať bezpečné a kvalitnejšie ovládače, zbavené problémov ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov a prekročenie hranice vyrovnávacej pamäte.
Bezpečná práca s pamäťou je v Rust zabezpečená počas kompilácie prostredníctvom overovania referencií, sledovania vlastníctva objektov a zohľadnenia životnosti objektov (oblasti viditeľnosti), ako aj prostredníctvom hodnotenia správnosti prístupu k pamäti počas vykonávania kódu. Rust tiež poskytuje prostriedky na ochranu pred pretečením celočíselných hodnôt, vyžaduje povinnú inicializáciu hodnôt premenných pred ich použitím, lepšie spracováva chyby v štandardnej knižnici, aplikuje koncept nemennosti (immutable) odkazov a premenných ako predvolených a ponúka silnú statickú typizáciu na minimalizáciu logických chýb.
Zdroj: opennet.ru
