Forslag for å diskutere spørsmålet om å legge til Rust-utviklingsverktøy til Linux-kjernen

Nick Desagnier (Nick Desaulniers), som jobber hos Google for å tilby Brukerstøtte bygge Linux-kjernen ved å bruke Clang-kompilatoren og også hjelpe fikse feil i Rust-kompilatoren, предложил holde på en konferanse Linux Rørleggerkonferanse 2020 sesjon for å diskutere å gjøre det mulig å utvikle kjernekomponenter i Rust. Nick arrangerer en mikrokonferanse dedikert til LLVM, og mener at det ville vært fint å diskutere de tekniske aspektene ved mulig integrering av Rust-støtte i kjernen (han har allerede utarbeidet en fungerende prototype for KBuild) og forstå om slik støtte bør legges til i det hele tatt og hvilke restriksjoner på bruken av Rust bør aksepteres.

La oss huske at i en nylig diskusjon på Open Source Summit og Embedded Linux-konferansen, Linus Torvalds utelukket det ikke fremveksten av bindinger for utvikling av kjerneundersystemer som ikke er kjerne (for eksempel drivere) på språk som Rust. Muligheten til å utvikle drivere i Rust vil tillate oss å lage tryggere og bedre drivere med minimal innsats, uten problemer som minnetilgang etter frigjøring, null-peker-referanser og bufferoverskridelser. Det er allerede flere tredjepartsprosjekter for å implementere denne funksjonen:

  • Utviklere fra selskapet "Fish in a Barrel" forberedt et verktøysett for å skrive lastbare moduler for Linux-kjernen på Rust-språket, ved å bruke et sett med abstrakte lag over grensesnittene og kjernestrukturene for å øke sikkerheten. Lag genereres automatisk basert på de eksisterende kjerneoverskriftsfilene ved å bruke verktøyet bindgen. Clang brukes til å bygge lag. I tillegg til mellomlag bruker de sammensatte modulene staticlib-pakken.
  • Forskere fra det kinesiske universitetet i Hong Kong utvikle et prosjekt for utvikling av drivere for innebygde systemer og Internet of Things-enheter i Rust, som også bruker bindgen til å generere lag basert på kjerneoverskriftsfiler. Rammeverket lar deg forbedre driversikkerheten uten å gjøre endringer i kjernen - i stedet for å lage ytterligere isolasjonsnivåer for drivere i kjernen, foreslås det å blokkere problemer på kompileringsstadiet ved å bruke det sikrere Rust-språket. Det antas at en slik tilnærming kan være etterspurt av utstyrsprodusenter som utvikler proprietære drivere i all hast uten å gjennomføre en skikkelig revisjon.
  • Rammeutviklere C2Rust for kringkasting av C-kode til Rust, oppførsel eksperimenter med å konvertere kjernemoduler med minimale manuelle redigeringer. Et av problemene som er notert er bruken i mange deler av kjernen av kode som bruker GCC-utvidelser som ennå ikke støttes i C2Rust. For å løse dette problemet planlegger C2Rust å legge til støtte for GCC-attributter inline, cold, alias, used og section, samt utvide mulighetene til inline assembler og løse problemer med strukturer som er både justert og pakket (for eksempel xregs_state) . Vesentlige problemer som krever manuelt arbeid inkluderer manglende evne til å oversette ikke-trivielle C-makroer til Rust-makroer og behovet for å redefinere typer, siden C2Rust oversetter C-typer til definisjoner i libc-pakken, men denne pakken kan ikke brukes i kjernemoduler.

Kilde: opennet.ru

Legg til en kommentar