Ôsma verzia záplat pre jadro Linuxu s podporou jazyka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, navrhol vydanie komponentov v8 pre vývoj ovládačov zariadení v jazyku Rust na posúdenie vývojárom jadra Linuxu. Toto je revidovaná verzia opráv, berúc do úvahy prvú verziu, publikovanú bez čísla verzie. Podpora hrdze sa považuje za experimentálnu, ale je už zahrnutá vo vetve linux-next, tvrdí, že je integrovaná do jesenného vydania 5.20/6.0 a je dostatočne zrelá na to, aby začala pracovať na vytváraní abstraktných vrstiev nad subsystémami jadra, ako aj na písaní ovládačov. a modulov. Vývoj je financovaný spoločnosťou Google a ISRG (Internet Security Research Group), ktorá je zakladateľom projektu Let's Encrypt a propaguje HTTPS a vývoj technológií na zlepšenie bezpečnosti internetu.

V novej verzii:

  • Sada nástrojov a variant knižnice alloc, bez možného generovania „panického“ stavu, keď sa vyskytnú chyby, boli aktualizované pre vydanie Rust 1.62. V porovnaní s predtým používanou verziou má sada nástrojov Rust stabilizovanú podporu pre funkcionalitu const_fn_trait_bound používanú v záplatách jadra.
  • Kód väzby je rozdelený do samostatného balíka prepravky „bindings“, čo zjednodušuje prestavbu, ak sa zmeny vykonajú iba v hlavnom balíku „kernel“.
  • Implementácia makra „concat_idents!“ prepísané vo forme procedurálneho makra, ktoré nie je viazané na funkcionalitu concat_idents a umožňuje použitie odkazov na lokálne premenné.
  • Makro „static_assert!“ bolo prepísané, čo umožňuje použitie „core::assert!()“ v akomkoľvek kontexte namiesto konštánt.
  • Makro "build_error!" prispôsobené na prácu, keď je pre moduly nastavený režim „RUST_BUILD_ASSERT_{WARN,ALLOW}“.
  • Pridaný samostatný súbor s nastaveniami „kernel/configs/rust.config“.
  • Súbory „*.i“ spracované v makro substitúciách boli premenované na „*.rsi“.
  • Podpora pre vytváranie komponentov Rust s úrovňami optimalizácie odlišnými od tých, ktoré sa používajú pre kód C, bola ukončená.
  • Pridaný modul fs, ktorý poskytuje väzby pre prácu so súborovými systémami. Je poskytnutý príklad jednoduchého súborového systému napísaného v Ruste.
  • Pridaný modul pracovného frontu pre prácu so systémovými frontami (poskytuje väzby nad štruktúrami jadra work_struct a workqueue_struct).
  • Vývoj modulu kasync pokračoval implementáciou metód asynchrónneho programovania (async). Pridaný príklad servera TCP na základnej úrovni napísaného v jazyku Rust.
  • Pridaná možnosť spracovávať prerušenia v jazyku Rust pomocou typov [Threaded]Handler a [Threaded]Registration`.
  • Pridané procedurálne makro „#[vtable]“ na uľahčenie práce s tabuľkami ukazovateľov funkcií, ako je napríklad štruktúra file_operations.
  • Pridaná implementácia obojsmerných prepojených zoznamov "unsafe_list::List".
  • Pridaná počiatočná podpora pre RCU (Read-copy-update) a typ Guard na kontrolu, či je zámok na čítanie viazaný na aktuálne vlákno.
  • Pridaná funkcia Task::spawn() na vytváranie a automatické spúšťanie vlákien jadra. Pridaná aj metóda Task::wake_up().
  • Pridaný modul oneskorenia, ktorý vám umožňuje používať oneskorenia (obal cez msleep()).

Navrhované zmeny umožňujú použiť Rust ako druhý jazyk na vývoj ovládačov a modulov jadra. Podpora Rust je prezentovaná ako možnosť, ktorá nie je štandardne povolená a nemá za následok zahrnutie Rustu medzi požadované závislosti zostavenia pre jadro. Použitie Rustu na vývoj ovládačov vám umožní vytvárať bezpečnejšie a lepšie ovládače s minimálnym úsilím, bez problémov, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov a pretečenie vyrovnávacej pamäte.

Bezpečná manipulácia s pamäťou je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu a životnosti objektu (rozsahu), ako aj prostredníctvom hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.

Zdroj: opennet.ru

Pridať komentár