Den tredje udgave af patches til Linux-kernen med understøttelse af Rust-sproget

Miguel Ojeda, forfatter til Rust-for-Linux-projektet, har foreslået en tredje komponentmulighed til udvikling af enhedsdrivere i Rust-sproget, som Linux-kerneudviklere kan overveje. Rustunderstøttelse betragtes som eksperimentel, men er allerede blevet aftalt til optagelse i linux-next-grenen. Udviklingen er finansieret af Google og ISRG (Internet Security Research Group), som er grundlæggeren af ​​Let's Encrypt-projektet og promoverer HTTPS og udviklingen af ​​teknologier til at forbedre internetsikkerheden.

Husk at de foreslåede ændringer gør det muligt at bruge Rust som et andet sprog til udvikling af drivere og kernemoduler. Rust-understøttelse præsenteres som en mulighed, der ikke er aktiveret som standard og resulterer ikke i, at Rust inkluderes som en påkrævet build-afhængighed for kernen. Brug af Rust til driverudvikling vil give dig mulighed for at skabe sikrere og bedre drivere med minimal indsats, fri for problemer såsom hukommelsesadgang efter frigørelse, nul pointer-dereferencer og bufferoverskridelser.

Hukommelsessikker håndtering leveres i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab og objektlevetid (scope), samt gennem evaluering af korrektheden af ​​hukommelsesadgang under kodeudførelse. Rust giver også beskyttelse mod heltalsoverløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige referencer og variabler som standard, tilbyder stærk statisk skrivning for at minimere logiske fejl.

Den nye version af programrettelserne fortsætter med at eliminere de kommentarer, der blev givet under diskussionen om den første og anden version af programrettelserne. De mest bemærkelsesværdige ændringer:

  • Der er foretaget en overgang til at bruge den stabile udgivelse af Rust 1.57 som referencekompiler, og der er leveret et link til den stabiliserede udgave af Rust 2021-sproget. Tidligere var patches knyttet til beta-grenen af ​​Rust og brugte nogle sprogfunktioner, der blev klassificeret som ustabile. Overgangen til Rust 2021-specifikationen gjorde det muligt for os at påbegynde arbejde for at undgå brugen af ​​sådanne ustabile funktioner i patches som const_fn_transmute, const_panic, const_unavailable_unchecked og core_panic og try_reserve.
  • Udviklingen af ​​alloc-versionen af ​​Rust-biblioteket, der er inkluderet i patches, er fortsat, modificeret for at fjerne hukommelsesallokeringsfunktionerne for mulig generering af "panik"-tilstanden, når der opstår fejl, såsom tom hukommelse. Den nye version implementerer "no_rc" og "no_sync" mulighederne for at deaktivere funktionalitet, der ikke bruges i kernens Rust-kode, hvilket gør biblioteket mere modulært. Arbejdet fortsætter med de vigtigste alloc-udviklere med det formål at overføre de nødvendige ændringer til kernen til hovedbiblioteket. "no_fp_fmt_parse", der kræves for at biblioteket kan fungere på kerneniveau, er blevet flyttet til Rust-basebiblioteket (kerne).
  • Koden er blevet renset for at slippe af med mulige kompileringsadvarsler, når kernen bygges i CONFIG_WERROR-tilstand. Når du bygger kode i Rust, aktiveres yderligere compiler-diagnosetilstande og Clippy linter-advarsler.
  • Abstraktioner foreslås til brug i Rust-kode til seqlocks (sekvenslåse), callback-opkald til strømstyring, I/O-hukommelse (readX/writeX), interrupt- og thread-handlere, GPIO, adgang til enheder, drivere og legitimationsoplysninger.
  • Værktøjerne til driverudvikling er blevet udvidet til at omfatte flytbare mutexes, bit-iteratorer, forenklede pointerbindinger, forbedret fejldiagnostik og databus-uafhængig infrastruktur.
  • Forbedret arbejde med links ved hjælp af en forenklet Ref-type, baseret på refcount_t-backend, som bruger kernel API af samme navn til at tælle referencer. Understøttelse af Arc- og Rc-typerne i standard alloc-biblioteket er blevet fjernet og er ikke tilgængelig i kode udført på kerneniveau (der er blevet forberedt indstillinger for selve biblioteket, som deaktiverer disse typer).
  • Patches inkluderer en version af PL061 GPIO-driveren, omskrevet i Rust. Et særligt træk ved driveren er, at dens implementering næsten linje for linje gentager den eksisterende GPIO-driver i C-sproget. For udviklere, der ønsker at stifte bekendtskab med at skabe drivere i Rust, er der udarbejdet en linje-for-linje sammenligning, der giver dem mulighed for at forstå, hvilke konstruktioner i Rust C-koden konverteres til.
  • Den primære Rust-kodebase har adopteret rustc_codegen_gcc, en rustc-backend til GCC, der implementerer AOT-kompilering (ahead-of-time) ved hjælp af libgccjit-biblioteket. Med korrekt udvikling af backend, vil det give dig mulighed for at indsamle Rust-koden involveret i kernen ved hjælp af GCC.
  • Ud over ARM, Google og Microsoft har Red Hat udtrykt interesse for at bruge Rust-sproget i Linux-kernen. Lad os huske på, at Google direkte yder support til Rust for Linux-projektet, udvikler en ny implementering af Binder interprocess-kommunikationsmekanismen i Rust og overvejer muligheden for at omarbejde forskellige drivere i Rust. Microsoft er begyndt at implementere drivere til Hyper-V i Rust. ARM arbejder på at forbedre rustunderstøttelse af ARM-baserede systemer. IBM har implementeret Rust-understøttelse i kernen til PowerPC-systemer.

Kilde: opennet.ru

Tilføj en kommentar