Osmá verze záplat pro jádro Linux s podporou jazyka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, navrhl pro vývojáře jádra Linux vydání v8 komponentů pro vývoj zařízení pomocí jazyka Rust. Toto je revize patchů s ohledem na první verzi, která byla publikována bez číslování verze. Podpora Rustu je považována za experimentální, ale již byla zahrnuta do větve linux-next, přičemž se očekává integrace do podzimního vydání 5.20/6.0 a je dostatečně rozvinutá pro zahájení práce na vytváření abstrahujících vrstev nad subsystémy jádra, stejně jako pro psaní ovladačů a modulů. Vývoj je financován společností Google a organizací ISRG (Internet Security Research Group), která je zakladatelem projektu Let’s Encrypt a podporuje prosazování HTTPS a rozvoj technologií pro zvýšení bezpečnosti internetu.

V nové verzi:

  • Nástroje a verze knihovny alloc, zbavené možných generací stavu 'panic' při vzniku chyb, byly aktualizovány na verzi Rust 1.62. Ve srovnání s dříve používanou verzí byla v nástrojích Rust stabilizována podpora funkcionality const_fn_trait_bound, používané v patchích pro jádro.
  • Kód vazeb byl přesunut do samostatného crate-balíčku 'bindings', což usnadňuje znovu sestavení v případě změn pouze v hlavním balíčku 'kernel'.
  • Implementace makra 'concat_idents!' byla přepracována na formu procedurálního makra, které není vázáno na funkcionalitu concat_idents a umožňuje použití odkazů na lokální proměnné.
  • Makro 'static_assert!' bylo přepracováno, což umožnilo použití 'core::assert!()' v jakémkoli kontextu místo konstant.
  • Makro 'build_error!' bylo přizpůsobeno pro práci v režimu 'RUST_BUILD_ASSERT_{WARN,ALLOW}' pro moduly.
  • Přidán samostatný soubor s nastavením 'kernel/configs/rust.config'.
  • Zpracovávané v makropodstatě soubory '*.i' byly přejmenovány na '*.rsi'.
  • Byla ukončena podpora sestavení Rust-komponent s úrovněmi optimalizace odlišnými od těch, které se používají pro kód psaný v jazyce C.
  • Přidán modul fs, který poskytuje vazby pro práci se souborovými systémy. Byl navržen příklad jednoduchého souborového systému napsaného v jazyce Rust.
  • Přidán modul workqueue pro práci se systémovými frontami (poskytuje vazby na struktury jádra work_struct a workqueue_struct).
  • Pokračovalo se ve vývoji modulu kasync s implementací metod asynchronního programování (async). Přidán příklad funkčního jádrového TCP serveru napsaného v Rustu.
  • Přidána možnost zpracování přerušení v jazyce Rust pomocí typů [Threaded]Handler a [Threaded]Registration.
  • Přidán procedurální makro „#[vtable]“, které zjednodušuje práci s tabulkami ukazatelů na funkce, jako je struktura file_operations.
  • Implementovány obousměrné propojené seznamy „unsafe_list::List“.
  • Přidána počáteční podpora RCU (Read-copy-update) a typ Guard pro kontrolu vazby zamykání na čtení na aktuálním vlákně.
  • Přidána funkce Task::spawn() pro vytváření a automatické spouštění jaderných vláken. Také přidána metoda Task::wake_up().
  • Přidán modul delay, který umožňuje používat zpoždění (obal kolem msleep()).

Navrhované změny umožňují použít Rust jako druhý jazyk pro vývoj ovladačů a modulů jádra. Podpora Rustu je prezentována jako volba, která není aktivní ve výchozím nastavení a nevyžaduje zahrnutí Rustu mezi povinné závislosti pro sestavení jádra. Použití Rustu pro vývoj ovladačů umožní 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řetečení bufferu.

Bezpečná práce s pamětí je zajištěna v Rustu během kompilace prostřednictvím kontroly odkazů, sledování vlastnictví objektů a zohlednění doby života objektů (oblastí viditelnosti), stejně jako hodnocením správnosti přístupu k paměti během vykonávání kódu. Rust také poskytuje prostředky k ochraně před přetečením celočíselných hodnot, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, aplikuje koncept neměnnosti (immutable) odkazů a proměnných ve výchozím nastavení, a nabízí silnou statickou typizaci pro minimalizaci logických chyb.

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