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

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

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster