Ramme til at skrive sikre drivere til Linux-kernen i Rust

Josh Triplett, der arbejder hos Intel og er i udvalget, der fører tilsyn med udviklingen af ​​Crates.io, taler ved Open Source Technology Summit indsendt en arbejdsgruppe, der har til formål at bringe Rust-sproget i paritet med C-sproget inden for systemprogrammering.

I en arbejdsgruppe, der er ved at blive oprettet, vil Rust-udviklere sammen med ingeniører fra Intel udarbejde specifikationer, der definerer den funktionalitet, der skal implementeres i Rust til systemprogrammering. Systemprogrammering kræver ofte manipulation på lavt niveau, såsom at udføre privilegerede processorinstruktioner og indhente detaljerede oplysninger om processorens tilstand. Af de lignende funktioner, der allerede er udviklet til Rust, er understøttelse af unavngivne strukturer, fagforeninger, assemblersprog-indsættelser (“asm!”-makroen) og BFLOAT16-talformatet med flydende komma.

Josh mener, at fremtiden for systemprogrammering tilhører Rust, og C-sproget i moderne realiteter hævder det sted, som i tidligere år blev besat af Assembly. Rust
fritager ikke kun udviklere for de problemer, der ligger i C-sproget, som opstår på grund af arbejde på lavt niveau med hukommelse, men giver også mulighed for at bruge det i udviklingen af ​​moderne programmeringsparadigmer.

under diskussioner forestillinger
Josh kom op med ideen om at tilføje muligheden for at udvikle drivere i Linux-kernen i Rust-sproget, hvilket ville gøre det muligt at skabe sikrere og bedre drivere med minimal indsats, fri for problemer såsom hukommelsesadgang efter frigørelse, null pointer-dereferencer og bufferoverskridelser.

Greg Kroah-Hartman, som er ansvarlig for at vedligeholde den stabile gren af ​​Linux-kernen, udtrykte sin vilje til at tilføje en ramme til udvikling af drivere i Rust-sproget til kernen, hvis den har reelle fordele i forhold til C, for eksempel vil det give sikker bindinger over Kernel API. Derudover betragter Greg kun denne ramme som en mulighed, ikke aktiv som standard, for ikke at inkludere Rust som en build-afhængighed af kernen.

Det viste sig, at flere teams allerede arbejder i denne retning. For eksempel 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.

Parallel udvikler sig Et andet projekt fokuserede på at udvikle drivere til indlejrede systemer og IoT-enheder, som også bruger bindgen til at generere lag baseret på kerneheader-filer. Rammerne 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.

Ikke al den tilsigtede funktionalitet er endnu implementeret, men rammen er allerede ganske velegnet til arbejde og blev brugt til at skrive en fungerende driver til LAN9512 USB Ethernet-controlleren, der leveres i Raspberry Pi 3-kortet. Den eksisterende smsc95xx-driver, skrevet af i C sprog. Det bemærkes, at modulstørrelsen og overhead fra runtime-komponenter ved udvikling af en driver i Rust er ubetydelige, hvilket gør det muligt at bruge rammerne til enheder med begrænsede ressourcer.

Kilde: opennet.ru

Tilføj en kommentar