Osmá verze patchů pro linuxové jádro s podporou jazyka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, navrhl vydání komponent v8 pro vývoj ovladačů zařízení v jazyce Rust ke zvážení vývojářům linuxového jádra. Toto je revidovaná verze záplat, která bere v úvahu první verzi, publikovaná bez čísla verze. Podpora Rust je považována za experimentální, ale je již zahrnuta ve větvi linux-next, tvrdí, že je integrována do podzimního vydání 5.20/6.0 a je dostatečně vyspělá, aby mohla začít pracovat na vytváření abstraktních vrstev nad subsystémy jádra a také na psaní ovladačů. a moduly. Vývoj financuje Google a ISRG (Internet Security Research Group), která je zakladatelem projektu Let's Encrypt a propaguje HTTPS a vývoj technologií pro zlepšení bezpečnosti internetu.

V nové verzi:

  • Sada nástrojů a varianta knihovny alloc, bez možného generování "panického" stavu, když dojde k chybám, byly aktualizovány pro vydání Rust 1.62. V porovnání s dříve používanou verzí má sada nástrojů Rust stabilizovanou podporu pro funkcionalitu const_fn_trait_bound používanou v záplatách jádra.
  • Kód vazby je rozdělen do samostatného balíčku přepravek „bindings“, což zjednodušuje přestavbu, pokud jsou změny provedeny pouze v hlavním balíčku „kernel“.
  • Implementace makra „concat_idents!“ přepsáno ve formě 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řepsáno, což umožňuje použití „core::assert!()“ v jakémkoli kontextu místo konstant.
  • Makro "build_error!" přizpůsobené pro práci, když je pro moduly nastaven režim „RUST_BUILD_ASSERT_{WARN,ALLOW}“.
  • Přidán samostatný soubor s nastavením „kernel/configs/rust.config“.
  • Soubory „*.i“ zpracované v substitucích maker byly přejmenovány na „*.rsi“.
  • Podpora pro vytváření komponent Rust s úrovněmi optimalizace odlišnými od úrovní používaných pro kód C byla ukončena.
  • Přidán modul fs, který poskytuje vazby pro práci se souborovými systémy. Je poskytnut příklad jednoduchého souborového systému napsaného v Rustu.
  • Přidán modul pracovní fronty pro práci se systémovými frontami (poskytuje vazby nad strukturami jádra work_struct a workqueue_struct).
  • Vývoj modulu kasync pokračoval implementací metod asynchronního programování (async). Přidán příklad TCP serveru na základní úrovni napsaného v Rustu.
  • Přidána možnost zpracovávat přerušení v jazyce Rust pomocí typů [Threaded]Handler a [Threaded]Registration`.
  • Přidáno procedurální makro "#[vtable]", které usnadňuje práci s tabulkami ukazatelů funkcí, jako je struktura file_operations.
  • Přidána implementace obousměrných propojených seznamů "unsafe_list::List".
  • Přidána počáteční podpora pro RCU (Read-copy-update) a typ Guard pro kontrolu, zda je zámek pro čtení vázán na aktuální vlákno.
  • Přidána funkce Task::spawn() pro vytváření a automatické spouštění vláken jádra. Také přidána metoda Task::wake_up().
  • Přidán modul zpoždění, který vám umožňuje používat zpoždění (obálka přes msleep()).

Navrhované změny umožňují používat Rust jako druhý jazyk pro vývoj ovladačů a modulů jádra. Podpora Rust je prezentována jako možnost, která není ve výchozím nastavení povolena a nevede k zahrnutí Rust mezi požadované závislosti sestavení pro jádro. Použití Rustu k vývoji ovladačů vám umožní vytvářet bezpečnější a lepší ovladače s minimálním úsilím, bez problémů, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů a přetečení vyrovnávací paměti.

Bezpečnost paměti je v Rustu poskytována v době kompilace prostřednictvím kontroly referencí, sledováním vlastnictví objektu a životnosti objektu (rozsahu) a také prostřednictvím vyhodnocování správnosti přístupu do paměti během provádění kódu. Rust také poskytuje ochranu proti přetečení celých čísel, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, standardně aplikuje koncept neměnných referencí a proměnných, nabízí silné statické typování pro minimalizaci logických chyb.

Zdroj: opennet.ru

Přidat komentář