Forslag til diskussion af spørgsmålet om tilføjelse af Rust-udviklingsværktøjer til Linux-kernen

Nick Desagnier (Nick Desaulniers), som arbejder hos Google for at levere støtte opbygning af Linux-kernen ved hjælp af Clang-kompileren og også hjælper rette fejl i Rust-kompileren, Han tilbød holde på en konference Linux blikkenslagerkonference 2020 session for at diskutere at gøre det muligt at udvikle kernekomponenter i Rust. Nick arrangerer en mikrokonference dedikeret til LLVM, og mener, at det ville være rart at diskutere de tekniske aspekter af den mulige integration af Rust-understøttelse i kernen (han har allerede forberedt en fungerende prototype til KBuild) og forstå, om en sådan support bør overhovedet tilføjes, og hvilke restriktioner for brugen af ​​Rust bør accepteres.

Lad os huske, at Linus Torvalds i en nylig diskussion på Open Source Summit og Embedded Linux-konferencen udelukkede ikke fremkomsten af ​​bindinger til udvikling af ikke-kernekerne-undersystemer (for eksempel drivere) på sprog som Rust. Evnen til at udvikle drivere i Rust ville give os 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. Der er allerede flere tredjepartsprojekter til at implementere denne funktion:

  • Udviklere fra firmaet "Fish in a Barrel" forberedt et værktøjssæt til at skrive indlæsbare moduler til Linux-kernen i Rust-sproget ved at bruge et sæt abstrakte lag over grænseflader og kernestrukturer for at øge sikkerheden. Lag genereres automatisk baseret på de eksisterende kernehovedfiler ved hjælp af værktøjet bindgen. Clang bruges til at bygge lag. Ud over mellemlag bruger de samlede moduler staticlib-pakken.
  • Forskere fra det kinesiske universitet i Hong Kong udvikle et projekt til udvikling af drivere til indlejrede systemer og Internet of Things-enheder i Rust, som også bruger bindgen til at generere lag baseret på kerneheader-filer. Rammen giver dig mulighed for at forbedre driversikkerheden uden at foretage ændringer i kernen - i stedet for at skabe yderligere isolationsniveauer for drivere i kernen, foreslås det at blokere problemer på kompileringsstadiet ved at bruge det mere sikre Rust-sprog. Det antages, at en sådan tilgang kan være efterspurgt af udstyrsproducenter, der udvikler proprietære drivere i en fart uden at foretage en ordentlig revision.
  • Rammeudviklere C2Rust til udsendelse af C-kode til Rust, adfærd eksperimenter med at konvertere kernemoduler med minimale manuelle redigeringer. Et af de bemærkede problemer er brugen i mange dele af kernen af ​​kode, der bruger GCC-udvidelser, der endnu ikke er understøttet i C2Rust. For at løse dette problem planlægger C2Rust at tilføje understøttelse af GCC-attributter inline, cold, alias, used og section, samt udvide mulighederne for inline assembler og løse problemer med strukturer, der både er justeret og pakket (f.eks. xregs_state) . Væsentlige problemer, der kræver manuelt arbejde, inkluderer manglende evne til at oversætte ikke-trivielle C-makroer til Rust-makroer og behovet for at omdefinere typer, eftersom C2Rust oversætter C-typer til definitioner i libc-pakken, men denne pakke kan ikke bruges i kernemoduler.

Kilde: opennet.ru

Tilføj en kommentar