De achtste versie van patches voor de Linux-kernel met ondersteuning voor de Rust-taal

Miguel Ojeda, auteur van het Rust-for-Linux-project, stelde de release voor van v8-componenten voor het ontwikkelen van apparaatstuurprogramma's in de Rust-taal, ter overweging door Linux-kernelontwikkelaars. Dit is de herziene versie van de patches, rekening houdend met de eerste versie, gepubliceerd zonder versienummer. Rust-ondersteuning wordt als experimenteel beschouwd, maar is al opgenomen in de linux-next branch, beweert geïntegreerd te zijn in de herfstuitgave van 5.20/6.0, en is volwassen genoeg om te beginnen met het creëren van abstractielagen over kernelsubsystemen, en met het schrijven van stuurprogramma's en modulen. De ontwikkeling wordt gefinancierd door Google en de ISRG (Internet Security Research Group), de oprichter van het Let's Encrypt-project en promoot HTTPS en de ontwikkeling van technologieën om de internetbeveiliging te verbeteren.

In de nieuwe versie:

  • De toolkit en een variant van de alloc-bibliotheek, die vrij is van het mogelijk genereren van een "paniek"-status wanneer er fouten optreden, zijn bijgewerkt voor de release van Rust 1.62. Vergeleken met de eerder gebruikte versie heeft de Rust-toolkit de ondersteuning gestabiliseerd voor de const_fn_trait_bound-functionaliteit die wordt gebruikt in kernelpatches.
  • De bindingscode is gescheiden in een afzonderlijk kratpakket “bindings”, wat het opnieuw opbouwen vereenvoudigt als er alleen wijzigingen worden aangebracht in het hoofdpakket “kernel”.
  • Implementatie van de macro “concat_idents!” herschreven in de vorm van een procedurele macro die niet gebonden is aan de concat_idents-functionaliteit en het gebruik van verwijzingen naar lokale variabelen mogelijk maakt.
  • De macro “static_assert!” is herschreven, waardoor het gebruik van “core::assert!()” in elke context mogelijk is in plaats van constanten.
  • Macro "build_error!" aangepast om te werken wanneer de modus “RUST_BUILD_ASSERT_{WARN,ALLOW}” is ingesteld voor modules.
  • Een apart bestand toegevoegd met instellingen “kernel/configs/rust.config”.
  • De “*.i”-bestanden die worden verwerkt in macrovervangingen zijn hernoemd naar “*.rsi”.
  • Ondersteuning voor het bouwen van Rust-componenten met andere optimalisatieniveaus dan die voor C-code worden gebruikt, is stopgezet.
  • Fs-module toegevoegd, die bindingen biedt voor het werken met bestandssystemen. Er wordt een voorbeeld gegeven van een eenvoudig bestandssysteem geschreven in Rust.
  • Werkwachtrijmodule toegevoegd voor het werken met systeemwachtrijen (biedt bindingen over de kernelstructuren work_struct en workqueue_struct).
  • De ontwikkeling van de kasync-module ging verder met de implementatie van asynchrone programmeermethoden (async). Een voorbeeld toegevoegd van een TCP-server op kernniveau geschreven in Rust.
  • De mogelijkheid toegevoegd om interrupts in de Rust-taal af te handelen met behulp van de typen [Threaded]Handler en [Threaded]Registration`.
  • Procedurele macro "#[vtable]" toegevoegd om het werken met tabellen met functieaanwijzers, zoals de file_operations-structuur, eenvoudiger te maken.
  • Implementatie toegevoegd van bidirectioneel gelinkte lijsten "unsafe_list::List".
  • Initiële ondersteuning toegevoegd voor RCU (Read-copy-update) en Guard-type om te controleren of een leesvergrendeling aan de huidige thread is gebonden.
  • Functie Task::spawn() toegevoegd om kernelthreads te maken en automatisch te starten. Ook de Task::wake_up() methode toegevoegd.
  • Een vertragingsmodule toegevoegd waarmee u vertragingen kunt gebruiken (een wrapper over msleep()).

De voorgestelde wijzigingen maken het mogelijk om Rust als tweede taal te gebruiken voor het ontwikkelen van stuurprogramma's en kernelmodules. Rust-ondersteuning wordt gepresenteerd als een optie die niet standaard is ingeschakeld en die er niet toe leidt dat Rust wordt opgenomen als een vereiste build-afhankelijkheid voor de kernel. Door Rust te gebruiken voor de ontwikkeling van stuurprogramma's kunt u met minimale inspanning veiligere en betere stuurprogramma's maken, vrij van problemen zoals geheugentoegang na het vrijmaken, null pointer-dereferenties en bufferoverruns.

Rust dwingt de geheugenveiligheid af tijdens het compileren door referentiecontrole, objecteigendom en het volgen van de levensduur van objecten (scopes), en door de juistheid van geheugentoegang tijdens runtime te evalueren. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

Bron: opennet.ru

Voeg een reactie