Den sjette version af patches til Linux-kernen med understøttelse af Rust-sproget

Miguel Ojeda, forfatteren af Rust-for-Linux-projektet, har foreslået, at Linux-kerneudviklere overvejer udgivelsen af v6 komponenter til udvikling af enhedsdrivere på Rust. Dette er den syvende udgave af patchene, inklusive den første version udgivet uden versionsnummer. Rust-support betragtes som eksperimentel, men den er allerede inkluderet i linux-next-grenen og er tilstrækkeligt udviklet til at begynde arbejdet med at oprette abstraheringslag over kernelens subsystems samt til at skrive drivere og moduler. Udviklingen finansieres af Google og ISRG (Internet Security Research Group), som er grundlæggeren af Let’s Encrypt-projektet og støtter fremme af HTTPS og udvikling af teknologier til at øge internettets sikkerhed.

I den nye version:

  • Værktøjet og versionen af biblioteksalloc, som er fri for mulige 'panic'-tilstande ved fejl, er blevet opdateret til Rust 1.60, hvor understøttelsen af 'maybe_uninit_extra' -tilstanden er blevet stabiliseret og anvendes i patchene til kernen.
  • Muligheden for at udføre tests fra dokumentationen er blevet tilføjet (tests, der samtidigt fungerer som eksempler i dokumentationen), ved at omdanne tests bundet til API'et i kernen til KUnit-tests, der udføres under kernelens opstart.
  • Krav er blevet accepteret, ifølge hvilke tests ikke må føre til advarsler fra linters som Clippy, ligesom koden til kernen skrevet i Rust.
  • En indledende implementering af modulet 'net' med netværksfunktioner er blevet foreslået. For Rust-koden er der givet adgang til netværksstrukturer fra kernen såsom 'Namespace' (baseret på kernen 'struct net'), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) og deres ækvivalenter for IPv6.
  • Indledende støtte til asynkron programmering (async) er blevet implementeret i form af modulet kasync. For eksempel kan der oprettes asynkront fungerende kode til manipulation af 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?; } }
  • Modulet net::filter til manipulation af netværkspakke-filtre er blevet tilføjet. Der er tilføjet et eksempel rust_netfilter.rs med en implementering af en filter på Rust.
  • Tilføjelsen af en simpel mutex smutex::Mutex, der ikke kræver binding (pinning).
  • Tilføjet NoWaitLock, der aldrig fører til ventetid ved frigivelse, og hvis det er optaget af en anden tråd, resulterer der i en fejl ved forsøget på at få låsen i stedet for at stoppe det kaldende.
  • Tilføjet RawSpinLock, der svarer til raw_spinlock_t i kernen, anvendt til sektioner, der ikke kan være i ventetilstand.
  • Tilføjet ARef-type til referencer på objekter, der har en reference tællingsmekanisme (always-refcounted).
  • I rustc_codegen_gcc-backend, der muliggør brugen af libgccjit-biblioteket fra GCC-projektet som kodegenerator i rustc for at understøtte de tilgængelige arkitekturer og optimeringer i GCC i rustc, er der implementeret en mulighed for at bootstrappe rustc-kompilatoren. Med bootstrapping af kompilatoren forstås muligheden for at bruge GCC-baserede kodegeneratorer til at samle selve rustc-kompilatoren. Desuden er der i den seneste udgave af GCC 12.1 inkluderet rettelser i libgccjit, der er nødvendige for korrekt drift af rustc_codegen_gcc. Der arbejdes på at muliggøre installation af rustc_codegen_gcc ved hjælp af rustup-værktøjet.
  • Fremskridt i udviklingen af GCC-frontenden gccrs med implementeringen af Rust-sprogkompilatoren baseret på GCC bemærkes. I øjeblikket arbejder to udviklere på gccrs i fuldtidsstilling.

Det skal bemærkes, at de foreslåede ændringer giver mulighed for at bruge Rust som det andet sprog til udvikling af drivere og kerne-moduler. Rust-understøttelse præsenteres som en mulighed, der ikke er aktiveret som standard og ikke fører til, at Rust bliver en obligatorisk byggeafhængighed for kernen. Brug af Rust til driverudvikling vil gøre det muligt at skabe sikre og af højere kvalitet drivere med minimal indsats, fri for problemer som adgang til hukommelse efter frigivelse, dereferencering af nullpegepinde og buffer-overløb.

Sikker hukommelseshåndtering sikres i Rust under kompileringen gennem referencekontrol, overvågning af ejerskab af objekter og livscyklus (scope) af objekter, samt evaluering af korrekt hukommelsestilgang under kodeudførelse. Rust tilbyder også midler til beskyttelse mod heltalsoverskridelser, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med immutability (uændrede) referencer og variabler som standard, og tilbyder stærk statisk typekontrol for at minimere logiske fejl.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster