Miguel Ojeda, skaberen af Rust-for-Linux-projektet, har foreslået en tredje variant af komponenter til udvikling af enhedsdrivere i Rust-sproget til overvejelse af Linux-kernens udviklere. Støtte til Rust betragtes som eksperimentel, men er allerede godkendt til inkludering i linux-next-grenen. Udviklingen bliver finansieret af Google og ISRG (Internet Security Research Group), som er grundlægger af Let’s Encrypt-projektet og fremmer HTTPS samt udviklingen af teknologier til at forbedre internetbeskyttelsen.
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.
I den nye version af patchene fortsættes arbejdet med at fjerne bemærkninger fremsat under diskussionen af de første og anden versioner af patchene. De mest iøjnefaldende ændringer er:
- Der er sket et skifte til at bruge den stabile version af Rust 1.57 som referencekompilator, og der er sikret tilknytning til den stabiliserede udgave af Rust 2021-sproget. Tidligere var patchene knyttet til beta-grenen af Rust og brugte nogle funktioner, der falder ind under kategorien ustabile. Overgangen til specifikationen Rust 2021 har gjort det muligt at starte arbejdet med at afvikle brugen af ustabile funktioner som const_fn_transmute, const_panic, const_unreachable_unchecked og core_panic samt try_reserve i patchene.
- Udviklingen af den Rust-bibliotek alloc, som indgår i patchene, fortsætter; den er ændret for at eliminere hukommelsesfordelingsfunktionernes mulighed for at generere en 'panic'-tilstand, når der opstår fejl såsom mangel på hukommelse. I den nye version er der implementeret indstillingerne 'no_rc' og 'no_sync' til at deaktivere funktionalitet, der ikke anvendes i Rust-koden til kernen, hvilket gør biblioteket mere modulært. Arbejdet med de primære udviklere af alloc fortsætter, og der er fokus på at overføre de nødvendige ændringer til kernen til det primære bibliotek. Indstillingen 'no_fp_fmt_parse', nødvendig for rustbibliotekets arbejde på kerne-niveau, er blevet flyttet til det grundlæggende Rust-bibliotek (core).
- Der er foretaget en oprydning af koden for at eliminere potentielle compileradvarsler ved kompilering af kernen i CONFIG_WERROR-tilstanden. Ved kompilering af koden i Rust-sproget er der blevet inkluderet ekstra diagnostiske kompilatoretilstande og advarsler fra linteren Clippy.
- Der er foreslået abstraktioner til brug i Rust-koden til sekvenslåsning (seqlock), callback-kald til strømstyring, I/O-hukommelse (readX/writeX), afbrudshåndterere og tråde, GPIO, adgang til enheder, drivere og legitimation.
- Værktøjerne til driverudvikling er blevet udvidet med flytbare mutexer, bititeratorer, forenklede indpakninger til pointere, forbedret fejlfinding og infrastruktur, der ikke er afhængig af data-bussen.
- Arbejdet med referencer er forbedret ved at bruge en forenklet type Ref, baseret på backend'en refcount_t, der anvender den samme API fra kernen til referencetælling. Støtte til typerne Arc og Rc, der leveres i standardbiblioteket alloc, er fjernet og ikke tilgængelig i koden, der kører på kerneniveau (til selve biblioteket er der forberedt muligheder for at deaktivere disse typer).
- Der er tilføjet en version af PL061 GPIO-driveren, omskrevet i Rust, til patchene. En særlig funktion ved driveren er, at dens implementering stort set følger den eksisterende GPIO-driver skrevet i C linje for linje. For udviklere, der ønsker at blive bekendt med driverudvikling i Rust, er der forberedt en linje-for-linje sammenligning, som giver indsigt i, hvordan C-koden er oversat til Rust-konstruktioner.
- rustc_codegen_gcc, rustc's backend til GCC, der implementerer muligheden for 'ahead-of-time' (AOT) kompilering ved hjælp af libgccjit-biblioteket, er blevet accepteret i Rust's hovedkodebase. Ved ordentlig udvikling af backend'en vil den muliggøre kompilering af Rust-koden anvendt i kernen ved hjælp af GCC.
- Udover virksomhederne ARM, Google og Microsoft har Red Hat også vist interesse for at bruge Rust i Linux-kernen. Det skal nævnes, at Google direkte understøtter projektet Rust for Linux, udvikler en ny implementering af mekanismen til interprocess kommunikation Binder i Rust og overvejer at omskrive forskellige drivere til Rust. Microsoft er startet med at implementere drivere til Hyper-V i Rust. ARM arbejder på at forbedre understøttelsen af Rust for systemer baseret på ARM-processorer. IBM har implementeret støtte til Rust i kernen for PowerPC-systemer.
Kilde: opennet.ru
