Tretie vydanie záplat pre jadro Linuxu s podporou jazyka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, navrhol možnosť tretieho komponentu na vývoj ovládačov zariadení v jazyku Rust pre vývojárov jadra Linuxu, ktorý by mali zvážiť. Podpora hrdze sa považuje za experimentálnu, ale už sa dohodlo na jej zahrnutí do vetvy linux-next. 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.

Pripomeňme, že 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 nevedie k tomu, že Rust je zahrnutý ako požadovaná závislosť 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 pamäti po uvoľnení, dereferences nulového ukazovateľa 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.

Nová verzia záplat pokračuje v odstraňovaní komentárov vznesených počas diskusie o prvej a druhej verzii záplat. Najvýraznejšie zmeny:

  • Prešlo sa na používanie stabilného vydania Rust 1.57 ako referenčného kompilátora a bol poskytnutý odkaz na stabilizované vydanie jazyka Rust 2021. Predtým boli záplaty viazané na beta vetvu Rustu a používali niektoré jazykové funkcie, ktoré boli klasifikované ako nestabilné. Prechod na špecifikáciu Rust 2021 nám umožnil začať prácu, aby sme sa vyhli používaniu takých nestabilných funkcií v opravách, ako sú const_fn_transmute, const_panic, const_unavailable_unchecked a core_panic a try_reserve.
  • Vývoj alokovanej verzie knižnice Rust zahrnutej v záplatách pokračoval, upravený tak, aby zbavil funkcie alokácie pamäte možného generovania „panického“ stavu, keď sa vyskytnú chyby, ako je nedostatok pamäte. Nová verzia implementuje možnosti „no_rc“ a „no_sync“ na zakázanie funkcií, ktoré sa nepoužívajú v kóde Rust jadra, vďaka čomu je knižnica modulárnejšia. Pokračuje práca s hlavnými vývojármi alloc, zameraná na prenos zmien potrebných pre jadro do hlavnej knižnice. Voľba „no_fp_fmt_parse“, potrebná na to, aby knižnica fungovala na úrovni jadra, bola presunutá do základnej knižnice (jadra) Rust.
  • Kód bol vyčistený, aby sa zbavili možných varovaní kompilátora pri zostavovaní jadra v režime CONFIG_WERROR. Pri vytváraní kódu v Ruste sú povolené ďalšie diagnostické režimy kompilátora a varovania Clippy linter.
  • Abstrakcie sú navrhnuté na použitie v kóde Rust pre seqlocky (sekvenčné zámky), volania spätného volania pre správu napájania, I/O pamäť (readX/writeX), obsluhy prerušení a vlákien, GPIO, prístup k zariadeniam, ovládačom a povereniam.
  • Nástroje na vývoj ovládačov boli rozšírené o premiestniteľné mutexy, bitové iterátory, zjednodušené väzby ukazovateľov, vylepšenú diagnostiku porúch a infraštruktúru nezávislú na dátovej zbernici.
  • Vylepšená práca s odkazmi pomocou zjednodušeného typu Ref, založeného na backende refcount_t, ktorý na počítanie referencií používa rozhranie API jadra s rovnakým názvom. Podpora typov Arc a Rc poskytovaná v štandardnej knižnici alloc bola odstránená a nie je dostupná v kóde vykonávanom na úrovni jadra (pre samotnú knižnicu boli pripravené možnosti, ktoré tieto typy deaktivujú).
  • Záplaty obsahujú verziu ovládača PL061 GPIO, prepísanú do jazyka Rust. Zvláštnosťou ovládača je, že jeho implementácia takmer riadok po riadku opakuje existujúci ovládač GPIO v jazyku C. Pre vývojárov, ktorí sa chcú zoznámiť s vytváraním ovládačov v Ruste, bolo pripravené porovnanie riadkov po riadkoch, ktoré im umožňuje pochopiť, na ktoré konštrukcie v Ruste sa kód C prevádza.
  • Hlavná kódová základňa Rust prijala rustc_codegen_gcc, rustc backend pre GCC, ktorý implementuje kompiláciu vopred (AOT) pomocou knižnice libgccjit. Pri správnom vývoji backendu vám to umožní zbierať kód Rust zapojený do jadra pomocou GCC.
  • Okrem ARM, Google a Microsoft prejavil záujem o používanie jazyka Rust v jadre Linuxu aj Red Hat. Pripomeňme, že Google priamo poskytuje podporu projektu Rust for Linux, v Ruste vyvíja novú implementáciu medziprocesového komunikačného mechanizmu Binder a zvažuje možnosť prepracovania rôznych ovládačov v Ruste. Microsoft začal implementovať ovládače pre Hyper-V v Ruste. ARM pracuje na zlepšení podpory Rust pre systémy založené na ARM. IBM implementovalo podporu jadra pre Rust pre systémy PowerPC.

Zdroj: opennet.ru

Pridať komentár