Pátá 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 pátou verzi komponent pro vývoj ovladačů zařízení v jazyce Rust. Podpora Rust je považována za experimentální, ale je již zahrnuta ve větvi linux-next a je dostatečně rozvinutá, aby mohla začít pracovat na vytváření abstraktních vrstev nad subsystémy jádra, stejně jako na psaní ovladačů a modulů. 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.

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.

Nová verze oprav nadále odstraňuje komentáře učiněné během diskuse o prvním, druhém, třetím a čtvrtém vydání oprav. V nové verzi:

  • Do systému průběžné integrace založeného na botě 0DAY/LKP podporovaného Intelem bylo přidáno testování komponent pro podporu Rust a bylo zahájeno zveřejňování testovacích zpráv. Připravujeme integraci podpory Rust do automatizovaného testovacího systému KernelCI. Testování založené na GitHub CI bylo přeneseno do používání kontejnerů.
  • Moduly Rust kernel jsou osvobozeny od potřeby definovat atributy přepravky „#![no_std]“ a „#![feature(…)]“.
  • Přidána podpora pro jednotlivé cíle sestavení (.o, .s, .ll a .i).
  • Pravidla pro kód definují pravidla pro oddělení komentářů („//“) a dokumentování kódu („///“).
  • Skript is_rust_module.sh byl přepracován.
  • Přidána podpora pro statická (globální sdílená proměnná) synchronizační primitiva založená na implementaci "CONFIG_CONSTRUCTORS".
  • Správa zámku je zjednodušená: Guard a GuardMut jsou kombinovány a jeden parametrizovaný typ.
  • Při registraci zařízení je možné definovat další parametry.
  • Přidána abstrakce "RwSemaphore", která funguje jako obal nad strukturou rw_semaphore C.
  • Pro použití mmap byl přidán nový modul mm a abstrakce VMA (obal nad strukturou vm_area_struct).
  • Ovladač GPIO PL061 byl přepnut na makro „dev_*!“.
  • Bylo provedeno celkové vyčištění kódu.

Zdroj: opennet.ru

Přidat komentář