De zesde versie van de patches voor de Linux-kernel met ondersteuning voor de programmeertaal Rust

Miguel Ojeda, de auteur van het Rust-for-Linux-project, heeft voorgesteld om versie 6 van de componenten voor de ontwikkeling van apparaatdrivers in de programmeertaal Rust ter overweging voor te leggen aan de ontwikkelaars van de Linux-kernel. Dit is de zevende editie van de patches, rekening houdend met de eerste versie, die zonder versienummer is gepubliceerd. Ondersteuning voor Rust wordt beschouwd als experimenteel, maar is al opgenomen in de linux-next tak en is voldoende ontwikkeld om te beginnen met het creĆ«ren van abstractielagen boven de subsysteem van de kernel, evenals voor het schrijven van drivers en modules. De ontwikkeling wordt gefinancierd door Google en de organisatie ISRG (Internet Security Research Group), die ook de oprichter is van het Let’s Encrypt-project en bijdraagt aan de promotie van HTTPS en de ontwikkeling van technologieĆ«n voor een veiliger internet.

In de nieuwe versie:

  • De toolkit en de alloc-bibliotheekvariant, die is ontdaan van mogelijke generaties van de toestand "panic" bij fouten, zijn bijgewerkt naar de release van Rust 1.60, waarin de ondersteuning voor de "maybe_uninit_extra" modus is gestabiliseerd, die wordt toegepast in de patches voor de kernel.
  • De mogelijkheid om tests uit de documentatie (tests die tegelijkertijd dienen als voorbeelden in de documentatie) uit te voeren is toegevoegd, door middel van de transformatie tijdens de compilatie van tests die zijn gekoppeld aan de kernel-API, in KUnit-tests die worden uitgevoerd tijdens het opstarten van de kernel.
  • Vereisten zijn aangenomen waarbij tests geen waarschuwingen van de linter Clippy mogen genereren, net als de code voor de kernel geschreven in Rust.
  • Een initiĆ«le implementatie van de module "net" met netwerkfunctionaliteiten is voorgesteld. Voor code in Rust is er toegang verleend tot netwerkstructuren van de kernel zoals "Namespace" (gebaseerd op de kernelstructuur "struct net"), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) en hun equivalenten voor IPv6.
  • InitiĆ«le ondersteuning voor asynchrone programmeermethoden (async) is gerealiseerd in de vorm van de kasync-module. Bijvoorbeeld, je kunt asynchrone code maken voor het manipuleren van TCP-sockets: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; if n == 0 { return Ok(()); } stream.write_all(&buf[..n]).await?; } }
  • De module net::filter is toegevoegd voor het manipuleren van netwerkpakketfilters. Er is een voorbeeld rust_netfilter.rs toegevoegd met de implementatie van een filter in de programmeertaal Rust.
  • Een eenvoudige mutex smutex::Mutex is toegevoegd, die geen binding (pinning) vereist.
  • Een NoWaitLock-blokkering is toegevoegd, die nooit leidt tot wachten op vrijgave; als het door een andere thread wordt overgenomen, geeft het een foutmelding bij het proberen om de blokkering te verkrijgen in plaats van de oproeper te laten stoppen.
  • Een RawSpinLock-blokkering is toegevoegd, die overeenkomt met raw_spinlock_t in de kernel, en wordt toegepast op secties die niet in een wachttoestand kunnen verkeren.
  • Een ARef-type is toegevoegd voor verwijzingen naar objecten die gebruikmaken van een mechanisme voor referentietelling (altijd referentietelling).
  • In de backend rustc_codegen_gcc, die de libgccjit-bibliotheek van het GCC-project als codegenerator in rustc mogelijk maakt om ondersteuning voor beschikbare architecturen en optimalisaties in rustc te bieden, is de mogelijkheid van compiler bootstraping geĆÆmplementeerd. Met compiler bootstraping wordt bedoeld dat de codegenerator op basis van GCC in rustc wordt gebruikt om rustc zelf te bouwen. Bovendien zijn in de recente release van GCC 12.1 correcties in libgccjit opgenomen die nodig zijn voor de goede werking van rustc_codegen_gcc. Er wordt gewerkt aan het mogelijk maken van de installatie van rustc_codegen_gcc met de rustup-tool.
  • De voortgang van de ontwikkeling van de GCC-frontend gccrs wordt vermeld met de implementatie van de Rust-taalcompiler op basis van GCC. Momenteel werken twee ontwikkelaars fulltime aan gccrs.

Laten we niet vergeten dat de voorgestelde wijzigingen het mogelijk maken om Rust als tweede taal te gebruiken voor het ontwikkelen van stuurprogramma's en kernelmodules. Ondersteuning voor Rust wordt gepresenteerd als een optie die standaard niet is ingeschakeld en die niet leidt tot het opnemen van Rust in de verplichte build afhankelijkheden van de kernel. Het gebruik van Rust voor het ontwikkelen van stuurprogramma's zal het mogelijk maken om met minimale inspanning veilige en kwalitatief hoogwaardige stuurprogramma's te creƫren, vrij van problemen zoals het aanspreken van geheugengebieden na vrijgave, het de-referencen van null-pointers en buffer-overflows.

Veilige geheugentoegang wordt in Rust tijdens de compilatie gegarandeerd door middel van referentietests, objecteigenaarschap en het bijhouden van de levensduur van objecten (scope), evenals door het evalueren van de geldigheid van geheugentoegang tijdens het uitvoeren van code. Rust biedt ook middelen om te beschermen tegen gehele getallenoverflows, vereist dat variabelen verplicht worden geĆÆnitialiseerd voordat ze worden gebruikt, behandelt fouten beter in de standaardbibliotheek, past het concept van onveranderlijkheid (immutable) van verwijzingen en variabelen standaard toe en biedt sterke statische typecontrole om logische fouten te minimaliseren.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster