Tredje utgave av patcher for Linux-kjernen med støtte for Rust-språket

Miguel Ojeda, forfatter av Rust-for-Linux-prosjektet, har foreslått et tredje komponentalternativ for å utvikle enhetsdrivere i Rust-språket for Linux-kjerneutviklere å vurdere. Ruststøtte regnes som eksperimentell, men er allerede avtalt for inkludering i linux-neste gren. Utviklingen er finansiert av Google og ISRG (Internet Security Research Group), som er grunnleggeren av Let's Encrypt-prosjektet og fremmer HTTPS og utvikling av teknologier for å forbedre Internett-sikkerheten.

Husk at de foreslåtte endringene gjør det mulig å bruke Rust som andrespråk for utvikling av drivere og kjernemoduler. Rust-støtte presenteres som et alternativ som ikke er aktivert som standard og resulterer ikke i at Rust inkluderes som en nødvendig byggeavhengighet for kjernen. Å bruke Rust for driverutvikling vil tillate deg å lage tryggere og bedre drivere med minimal innsats, fri for problemer som minnetilgang etter frigjøring, null-pekereferanser og bufferoverskridelser.

Rust håndhever minnesikkerhet ved kompilering gjennom referansesjekking, objekteierskap og objektlevetidssporing (scopes), og ved å evaluere riktigheten av minnetilganger under kjøring. Rust gir også beskyttelse mot heltallsoverløp, krever at variabelverdier initialiseres før bruk, har bedre feilhåndtering i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, og tilbyr sterk statisk skriving for å minimere logiske feil.

Den nye versjonen av oppdateringene fortsetter å eliminere kommentarene som ble gitt under diskusjonen om den første og andre versjonen av oppdateringene. De mest merkbare endringene:

  • Det er gjort en overgang til å bruke den stabile utgivelsen av Rust 1.57 som referansekompilatoren, og det er gitt en lenke til den stabiliserte utgaven av språket Rust 2021. Tidligere ble patcher knyttet til betagrenen til Rust og brukte noen språkfunksjoner som ble klassifisert som ustabile. Overgangen til Rust 2021-spesifikasjonen tillot oss å sette i gang arbeid for å unngå bruk av slike ustabile funksjoner i patcher som const_fn_transmute, const_panic, const_unavailable_unchecked og core_panic og try_reserve.
  • Utviklingen av alloc-versjonen av Rust-biblioteket inkludert i oppdateringene har fortsatt, modifisert for å fjerne minnetildelingsfunksjonene fra mulig generering av "panikk"-tilstanden når feil oppstår, for eksempel tomt for minne. Den nye versjonen implementerer "no_rc" og "no_sync" alternativene for å deaktivere funksjonalitet som ikke brukes i kjernens Rust-kode, noe som gjør biblioteket mer modulært. Arbeidet fortsetter med hovedallokutviklerne, rettet mot å overføre endringene som trengs for kjernen til hovedbiblioteket. Alternativet "no_fp_fmt_parse", som kreves for at biblioteket skal fungere på kjernenivå, har blitt flyttet til Rust-basebiblioteket (kjerne).
  • Koden har blitt renset for å bli kvitt mulige kompilatoradvarsler når du bygger kjernen i CONFIG_WERROR-modus. Når du bygger kode i Rust, aktiveres ytterligere kompilatordiagnosemoduser og Clippy linter-advarsler.
  • Abstraksjoner foreslås brukt i Rust-kode for seqlocks (sekvenslåser), tilbakeringing for strømstyring, I/O-minne (readX/writeX), avbrudds- og trådbehandlere, GPIO, tilgang til enheter, drivere og legitimasjon.
  • Verktøyene for driverutvikling har blitt utvidet til å inkludere flyttbare mutexes, bit-iteratorer, forenklede pekerbindinger, forbedret feildiagnostikk og databussuavhengig infrastruktur.
  • Forbedret arbeid med lenker ved hjelp av en forenklet Ref-type, basert på refcount_t-backend, som bruker kjerne-API med samme navn for å telle referanser. Støtte for Arc- og Rc-typene gitt i standard alloc-biblioteket er fjernet og er ikke tilgjengelig i kode utført på kjernenivå (det er utarbeidet alternativer for selve biblioteket som deaktiverer disse typene).
  • Patchene inkluderer en versjon av PL061 GPIO-driveren, omskrevet i Rust. En spesiell egenskap ved driveren er at implementeringen nesten linje for linje gjentar den eksisterende GPIO-driveren på C-språket. For utviklere som ønsker å bli kjent med å lage drivere i Rust, er det utarbeidet en linje-for-linje sammenligning som lar dem forstå hvilke konstruksjoner i Rust C-koden konverteres til.
  • Den viktigste Rust-kodebasen har tatt i bruk rustc_codegen_gcc, en rustc-backend for GCC som implementerer forhåndskompilering (AOT) ved å bruke libgccjit-biblioteket. Med riktig utvikling av backend, vil det tillate deg å samle Rust-koden involvert i kjernen ved å bruke GCC.
  • I tillegg til ARM, Google og Microsoft, har Red Hat uttrykt interesse for å bruke Rust-språket i Linux-kjernen. La oss huske at Google gir direkte støtte for Rust for Linux-prosjektet, utvikler en ny implementering av Binder interprosess kommunikasjonsmekanisme i Rust, og vurderer muligheten for å omarbeide ulike drivere i Rust. Microsoft har begynt å implementere drivere for Hyper-V i Rust. ARM jobber med å forbedre ruststøtte for ARM-baserte systemer. IBM har implementert Rust-støtte i kjernen for PowerPC-systemer.

Kilde: opennet.ru

Legg til en kommentar