Derde editie van patches voor de Linux-kernel met ondersteuning voor de Rust-taal

Miguel Ojeda, auteur van het Rust-for-Linux-project, heeft een derde componentoptie voorgesteld voor het ontwikkelen van apparaatstuurprogramma's in de Rust-taal, die Linux-kernelontwikkelaars kunnen overwegen. Rust-ondersteuning wordt als experimenteel beschouwd, maar er is al overeenstemming bereikt over opname in de linux-next-branch. 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.

Bedenk dat de voorgestelde wijzigingen het mogelijk maken 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.

De nieuwe versie van de patches blijft de opmerkingen elimineren die zijn gemaakt tijdens de bespreking van de eerste en tweede versie van de patches. De meest opvallende veranderingen:

  • Er is overgestapt naar het gebruik van de stabiele release van Rust 1.57 als referentiecompiler en er is een link voorzien naar de gestabiliseerde editie van de taal Rust 2021. Voorheen waren patches gekoppeld aan de bètatak van Rust en gebruikten ze enkele taalfuncties die werden als instabiel geclassificeerd. De overgang naar de Rust 2021-specificatie stelde ons in staat werkzaamheden te initiëren om het gebruik van dergelijke onstabiele functies in patches als const_fn_transmute, const_panic, const_unavailable_unchecked en core_panic en try_reserve te vermijden.
  • De ontwikkeling van de alloc-versie van de Rust-bibliotheek die in de patches is opgenomen, is voortgezet, aangepast om de geheugentoewijzingsfuncties te ontdoen van mogelijke generatie van de “paniek”-status wanneer er fouten optreden, zoals onvoldoende geheugen. De nieuwe versie implementeert de opties “no_rc” en “no_sync” om functionaliteit uit te schakelen die niet wordt gebruikt in de kernel Rust-code, waardoor de bibliotheek modulairer wordt. Het werk met de belangrijkste alloc-ontwikkelaars wordt voortgezet, gericht op het overbrengen van de wijzigingen die nodig zijn voor de kernel naar de hoofdbibliotheek. De optie “no_fp_fmt_parse”, vereist om de bibliotheek op kernelniveau te laten werken, is verplaatst naar de Rust-basisbibliotheek (core).
  • De code is opgeschoond om mogelijke compilerwaarschuwingen te verwijderen bij het bouwen van de kernel in de CONFIG_WERROR-modus. Bij het bouwen van code in Rust zijn extra diagnostische modi van de compiler en Clippy-linterwaarschuwingen ingeschakeld.
  • Er worden abstracties voorgesteld voor gebruik in Rust-code voor seqlocks (sequentievergrendelingen), callback-oproepen voor energiebeheer, I/O-geheugen (readX/writeX), interrupt- en threadhandlers, GPIO, toegang tot apparaten, stuurprogramma's en inloggegevens.
  • De tools voor de ontwikkeling van stuurprogramma's zijn uitgebreid met verplaatsbare mutexen, bit-iterators, vereenvoudigde pointerbindingen, verbeterde foutdiagnostiek en databus-onafhankelijke infrastructuur.
  • Verbeterd werken met links met behulp van een vereenvoudigd Ref-type, gebaseerd op de refcount_t-backend, die de kernel-API met dezelfde naam gebruikt voor het tellen van referenties. Ondersteuning voor de Arc- en Rc-typen die in de standaard alloc-bibliotheek worden geleverd, is verwijderd en is niet beschikbaar in code die op kernelniveau wordt uitgevoerd (er zijn opties voorbereid voor de bibliotheek zelf die deze typen uitschakelen).
  • De patches bevatten een versie van de PL061 GPIO-driver, herschreven in Rust. Een bijzonder kenmerk van de driver is dat de implementatie ervan vrijwel regel voor regel de bestaande GPIO-driver in de C-taal herhaalt. Voor ontwikkelaars die kennis willen maken met het maken van stuurprogramma's in Rust, is er een regel-voor-regel vergelijking gemaakt waarmee ze kunnen begrijpen in welke constructies in Rust de C-code wordt omgezet.
  • De belangrijkste Rust-codebase heeft rustc_codegen_gcc overgenomen, een rustc-backend voor GCC die een AOT-compilatie (ahead of time) implementeert met behulp van de libgccjit-bibliotheek. Met de juiste ontwikkeling van de backend kun je de Rust-code die bij de kernel betrokken is, verzamelen met behulp van GCC.
  • Naast ARM, Google en Microsoft heeft Red Hat interesse getoond in het gebruik van de Rust-taal in de Linux-kernel. Laten we niet vergeten dat Google rechtstreeks ondersteuning biedt voor het Rust voor Linux-project, een nieuwe implementatie van het Binder-interprocess-communicatiemechanisme in Rust ontwikkelt en de mogelijkheid overweegt om verschillende stuurprogramma's in Rust te herwerken. Microsoft is begonnen met het implementeren van stuurprogramma's voor Hyper-V in Rust. ARM werkt aan het verbeteren van Rust-ondersteuning voor ARM-gebaseerde systemen. IBM heeft Rust-ondersteuning geïmplementeerd in de kernel voor PowerPC-systemen.

Bron: opennet.ru

Voeg een reactie