Den åttende versjonen av patcher for Linux-kjernen med støtte for Rust-språket

Miguel Ojeda, forfatter av Rust-for-Linux-prosjektet, foreslo utgivelsen av v8-komponenter for utvikling av enhetsdrivere i Rust-språket for vurdering av Linux-kjerneutviklere. Dette er den reviderte versjonen av oppdateringene, tatt i betraktning den første versjonen, publisert uten et versjonsnummer. Ruststøtte regnes som eksperimentell, men er allerede inkludert i linux-next-grenen, hevder å være integrert i høstutgivelsen av 5.20/6.0, og er moden nok til å begynne arbeidet med å lage abstraksjonslag over kjerneundersystemer, samt skrive drivere og moduler. 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.

I den nye versjonen:

  • Verktøysettet og en variant av alloc-biblioteket, fri for mulig generering av en "panikk"-tilstand når feil oppstår, har blitt oppdatert for utgivelsen av Rust 1.62. Sammenlignet med den tidligere brukte versjonen, har Rust-verktøysettet stabilisert støtte for const_fn_trait_bound-funksjonaliteten som brukes i kjernepatcher.
  • Bindingskoden er delt inn i en egen kassepakke "bindinger", noe som forenkler gjenoppbyggingen hvis endringer bare gjøres i hovedpakken "kjernen".
  • Implementering av makroen "concat_idents!" omskrevet i form av en prosedyremakro som ikke er knyttet til concat_idents-funksjonaliteten og tillater bruk av referanser til lokale variabler.
  • "static_assert!"-makroen har blitt skrevet om, og tillater bruk av "core::assert!()" i enhver kontekst i stedet for konstanter.
  • Makro "build_error!" tilpasset til å fungere når "RUST_BUILD_ASSERT_{WARN,ALLOW}"-modus er satt for moduler.
  • Lagt til en egen fil med innstillingene "kernel/configs/rust.config".
  • «*.i»-filene behandlet i makroerstatninger har fått nytt navn til «*.rsi».
  • Støtte for bygging av rustkomponenter med andre optimaliseringsnivåer enn de som brukes for C-kode, er avviklet.
  • Lagt til fs-modul, som gir bindinger for arbeid med filsystemer. Et eksempel på et enkelt filsystem skrevet i Rust er gitt.
  • Lagt til arbeidskømodul for arbeid med systemkøer (gir bindinger over kjernestrukturene work_struct og workqueue_struct).
  • Utviklingen av kasync-modulen fortsatte med implementering av asynkrone programmeringsmetoder (async). Lagt til et eksempel på en TCP-server på kjernenivå skrevet i Rust.
  • Lagt til muligheten til å håndtere avbrudd i Rust-språket ved å bruke typene [Threaded]Handler og [Threaded]Registration`.
  • Lagt til prosedyremakro "#[vtable]" for å gjøre det enklere å jobbe med tabeller med funksjonspekere, for eksempel file_operations-strukturen.
  • Lagt til implementering av toveis koblede lister "unsafe_list::List".
  • Lagt til innledende støtte for RCU (Read-copy-update) og Guard-type for å sjekke om en leselås er bundet til gjeldende tråd.
  • Lagt til Task::spawn() funksjon for å opprette og automatisk starte kjernetråder. La også til Task::wake_up()-metoden.
  • Lagt til en forsinkelsesmodul som lar deg bruke forsinkelser (en innpakning over msleep()).

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.

Kilde: opennet.ru

Legg til en kommentar