Rammeverk for å skrive sikre drivere for Linux-kjernen i Rust

Josh Triplett, som jobber hos Intel og er i komiteen som fører tilsyn med utviklingen av Crates.io, taler på Open Source Technology Summit innsendt en arbeidsgruppe som har som mål å bringe Rust-språket til paritet med C-språket innen systemprogrammering.

I en arbeidsgruppe som er i ferd med å bli opprettet, vil Rust-utviklere sammen med ingeniører fra Intel utarbeide spesifikasjoner som definerer funksjonaliteten som må implementeres i Rust for systemprogrammering. Systemprogrammering krever ofte manipulering på lavt nivå, for eksempel å utføre privilegerte prosessorinstruksjoner og innhente detaljert informasjon om prosessorens tilstand. Av de lignende funksjonene som allerede er utviklet for Rust, er støtte for navngitte strukturer, fagforeninger, assembly-språkinnlegg (“asm!”-makroen) og BFLOAT16 flytende tallformat.

Josh mener at fremtiden til systemprogrammering tilhører Rust, og C-språket i moderne realiteter gjør krav på plassen som de siste årene ble okkupert av Assembly. Rust
ikke bare avlaster utviklere fra problemene som ligger i C-språket som oppstår på grunn av arbeid på lavt nivå med minne, men gir også muligheten til å bruke det i utviklingen av moderne programmeringsparadigmer.

Under diskusjoner forestillinger
Josh kom opp med ideen om å legge til muligheten til å utvikle drivere i Linux-kjernen i Rust-språket, noe som ville gjøre det mulig å lage tryggere og bedre drivere med minimal innsats, fri for problemer som minnetilgang etter frigjøring, null pekereferanser og bufferoverskridelser.

Greg Kroah-Hartman, som er ansvarlig for å vedlikeholde den stabile grenen til Linux-kjernen, uttrykte at han var villig til å legge til et rammeverk for å utvikle drivere i Rust-språket til kjernen hvis det har reelle fordeler fremfor C, for eksempel vil det gi sikker bindinger over Kernel API. I tillegg anser Greg dette rammeverket bare som et alternativ, ikke aktivt som standard, for ikke å inkludere Rust som en byggeavhengighet til kjernen.

Det viste seg at flere team allerede jobber i denne retningen. For eksempel 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.

Parallell utvikler seg Et annet prosjekt fokuserte på å utvikle drivere for innebygde systemer og IoT-enheter, som også bruker bindgen til å generere lag basert på kjernehodefiler. 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.

Ikke all den tiltenkte funksjonaliteten er implementert ennå, men rammeverket er allerede ganske egnet for arbeid og ble brukt til å skrive en fungerende driver for LAN9512 USB Ethernet-kontrolleren som følger med Raspberry Pi 3-kortet. Den eksisterende smsc95xx-driveren, skrevet av i C språk. Det bemerkes at modulstørrelsen og overhead fra kjøretidskomponenter ved utvikling av en driver i Rust er ubetydelig, noe som gjør at rammeverket kan brukes for enheter med begrensede ressurser.

Kilde: opennet.ru

Legg til en kommentar