Druhá edice oprav pro linuxové jádro s podporou jazyka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, navrhl vývojářům linuxového jádra aktualizovanou verzi komponent pro vývoj ovladačů zařízení v jazyce Rust. Podpora Rust je považována za experimentální, ale již byla dohodnuta pro zahrnutí do větve linux-next. Nová verze odstraňuje komentáře vznesené během diskuse o první verzi oprav. Linus Torvalds se již zapojil do diskuze a navrhl změnu logiky pro zpracování některých bitových operací.

Připomeňme, že navrhované změny umožňují použít 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í jádra. 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.

Nejvýraznější změny v nové verzi záplat:

  • Kód alokace paměti je osvobozen od potenciálního generování stavu "panika", když dojde k chybám, jako je nedostatek paměti. Je zahrnuta varianta knihovny Rust alloc, která přepracuje kód tak, aby zvládal selhání, ale konečným cílem je přenést všechny funkce potřebné pro jádro do hlavní edice alloc (změny již byly připraveny a převedeny do standardu Rust knihovna).
  • Namísto nočních sestav můžete nyní používat beta verze a stabilní verze kompilátoru rustc ke kompilaci jádra s podporou Rust. V současné době se jako referenční kompilátor používá rustc 1.54-beta1, ale po vydání 1.54 na konci měsíce bude podporován jako referenční kompilátor.
  • Přidána podpora pro psaní testů pomocí standardního atributu “#[test]” pro Rust a možnost používat doctests k dokumentaci testů.
  • Přidána podpora pro architektury ARM32 a RISCV kromě dříve podporovaných x86_64 a ARM64.
  • Vylepšené implementace GCC Rust (GCC frontend pro Rust) a rustc_codegen_gcc (rustc backend pro GCC), který nyní prošel všemi základními testy.
  • Nová úroveň abstrakce je navržena pro použití v programech Rust jaderných mechanismů napsaných v C, jako jsou červeno-černé stromy, objekty počítané s referencemi, vytváření deskriptorů souborů, úlohy, soubory a I/O vektory.
  • Komponenty pro vývoj ovladačů mají vylepšenou podporu pro modul file_operations, makro module!, registraci maker a základní ovladače (probe and remove).
  • Binder nyní podporuje předávání deskriptorů souborů a háčků LSM.
  • Je navržen funkčnější příklad ovladače Rust - bcm2835-rng pro hardwarový generátor náhodných čísel desek Raspberry Pi.

Kromě toho jsou zmíněny projekty některých společností související s použitím Rustu v jádře:

  • Microsoft vyjádřil zájem o účast na práci na integraci podpory Rust do linuxového jádra a je připraven v nadcházejících měsících poskytnout implementace ovladačů pro Hyper-V na Rustu.
  • ARM pracuje na vylepšení podpory Rust pro systémy založené na ARM. Projekt Rust již navrhl změny, které by ze 64bitových systémů ARM učinily platformu Tier 1.
  • Google přímo poskytuje podporu projektu Rust for Linux, v Rustu vyvíjí novou implementaci meziprocesového komunikačního mechanismu Binder a zvažuje možnost přepracování různých ovladačů v Rustu. Prostřednictvím ISRG (Internet Security Research Group) poskytl Google finanční prostředky na práci na integraci podpory Rust do linuxového jádra.
  • IBM implementovalo podporu jádra pro Rust pro systémy PowerPC.
  • Laboratoř LSE (Systems Research Laboratory) vyvinula ovladač SPI v Rustu.

Zdroj: opennet.ru

Přidat komentář