Nick Desaulniers (), der arbejder hos Google for at sikre kernen i Linux med Clang-compiler, og også med at rette fejl i Rust-compileren, afholde på konferencen en session om muligheden for at udvikle kernekomponenter i Rust. Nick arrangerer en mikro-konference, der fokuserer på LLVM, og mener, det ville være nyttigt at diskutere de tekniske aspekter ved mulig integration af Rust-support i kernen (en arbejdsprototype til KBuild er allerede klar) og finde ud af, om det overhovedet er nødvendigt at tilføje denne støtte, samt hvilke begrænsninger for brugen af Rust der bør overvejes.
Lad os minde om, at i en nylig diskussion på konferencen "Open Source Summit and Embedded Linux" udelukkede Linus Torvalds muligheden for bindings til udvikling af sekundære kerneundersystemer (f.eks. drivere) i sprog som Rust. Muligheden for at udvikle drivere i Rust ville tillade at skabe sikre og af højere kvalitet drivere med minimale besvær, fri for problemer som hukommelsestilgang efter frigivelse, dereferens af nullpekere og bufferoverløb. Der findes allerede flere eksterne projekter, der implementerer denne mulighed:
- Udviklere fra "Fish in a Barrel" har værktøjer til at skrive lastbare moduler til Linux-kernen i Rust, ved at bruge et sæt abstrakte lag over kerne-interfaces og -strukturer for at øge sikkerheden. Lagene genereres automatisk baseret på de eksisterende header-filer i kernen ved hjælp af værktøjet . For at bygge lagene anvendes Clang. De opbyggede moduler bruger ud over lagene også pakken staticlib.
- Forskere fra Hong Kong University Et projekt til udvikling af drivere på Rust til indlejrede systemer og Internet of Things-enheder, som også anvender bindgen til at generere lag baseret på header-filer fra kernen. Frameworket muliggør en forbedring af driveres sikkerhed uden at ændre kernen — i stedet for at skabe yderligere isolationslag i kernen for drivere, foreslås det at blokkere problemer ved kompilering ved at anvende det mere sikre sprog Rust. Det antages, at en sådan tilgang kan være efterspurgt af hardwareproducenter, der udvikler proprietære drivere hastigt uden at gennemføre ordentlige audits.
- Udviklerne af frameworket til at oversætte C-kode til Rust, eksperimenter med at konvertere kernelmoduler med minimale manuelle justeringer. Blandt problemerne nævnes brugen af kode i mange dele af kernen, der anvender GCC-udvidelser, som fortsat ikke understøttes i C2Rust. For at løse dette problem planlægges det i C2Rust at tilføje støtte til GCC-attributter inline, cold, alias, used og section samt at udvide mulighederne for inline-assembler og løse problemer med strukturer, der både er udjævnet og pakket (f.eks. xregs_state). Blandt de væsentlige problemer, der kræver manuel intervention, nævnes det, at det er umuligt at oversætte ikke-trivielle C-makroer til Rust-makroer og nødvendigheden af at redefinere typer, da C2Rust oversætter C-typer til definitioner i libc-pakken, men denne pakke kan ikke anvendes i kernelmoduler.
Kilde: opennet.ru
