Ram för att skriva säkra drivrutiner för Linux-kärnan i Rust

Josh Triplett, som arbetar på Intel och sitter i kommittén som övervakar utvecklingen av Crates.io, talar vid Open Source Technology Summit lämnats en arbetsgrupp som syftar till att bringa Rust-språket i paritet med C-språket inom området systemprogrammering.

I en arbetsgrupp som håller på att skapas kommer Rust-utvecklare, tillsammans med ingenjörer från Intel, att utarbeta specifikationer som definierar den funktionalitet som behöver implementeras i Rust för systemprogrammering. Systemprogrammering kräver ofta manipulation på låg nivå, som att exekvera privilegierade processorinstruktioner och få detaljerad information om processorns tillstånd. Av de liknande funktioner som redan utvecklats för Rust noteras stöd för icke namngivna strukturer, fackföreningar, assemblerspråksinfogningar (makrot "asm!") och flyttalsformatet BFLOAT16.

Josh tror att framtiden för systemprogrammering tillhör Rust, och C-språket i moderna verkligheter gör anspråk på den plats som under tidigare år ockuperades av Assembly. Rost
inte bara avlastar utvecklare från de problem som ligger i C-språket som uppstår på grund av lågnivåarbete med minne, utan ger också möjlighet att använda det i utvecklingen av moderna programmeringsparadigm.

Under diskussioner föreställningar
Josh kom på idén att lägga till möjligheten att utveckla drivrutiner i Linux-kärnan i Rust-språket, vilket skulle göra det möjligt att skapa säkrare och bättre drivrutiner med minimal ansträngning, fria från problem som minnesåtkomst efter frigöring, null pekarreferenser och buffertöverskridanden.

Greg Kroah-Hartman, som är ansvarig för att underhålla den stabila grenen av Linux-kärnan, uttryckte sin beredvillighet att lägga till ett ramverk för att utveckla drivrutiner i Rust-språket till kärnan om det har verkliga fördelar jämfört med C, till exempel kommer det att ge säker bindningar över Kernel API. Dessutom betraktar Greg detta ramverk endast som ett alternativ, inte aktivt som standard, för att inte inkludera Rust som ett byggberoende på kärnan.

Det visade sig att flera team redan arbetar i denna riktning. Till exempel utvecklare från företaget "Fish in a Barrel" beredd en verktygslåda för att skriva laddningsbara moduler för Linux-kärnan i Rust-språket, med hjälp av en uppsättning abstrakta lager över gränssnitten och kärnstrukturerna för att öka säkerheten. Lager genereras automatiskt baserat på de befintliga kärnhuvudfilerna med hjälp av verktyget bindgen. Clang används för att bygga lager. Förutom mellanskikt använder de monterade modulerna staticlib-paketet.

Parallell utvecklas Ett annat projekt fokuserade på att utveckla drivrutiner för inbyggda system och IoT-enheter, som också använder bindgen för att generera lager baserat på kärnhuvudfiler. Ramverket tillåter dig att förbättra förarsäkerheten utan att göra ändringar i kärnan - istället för att skapa ytterligare isoleringsnivåer för drivrutiner i kärnan, föreslås det att problem blockeras i kompileringsstadiet, genom att använda det säkrare Rust-språket. Det antas att ett sådant tillvägagångssätt kan efterfrågas av utrustningstillverkare som snabbt utvecklar proprietära drivrutiner utan att genomföra en ordentlig revision.

Inte all avsedd funktionalitet har ännu implementerats, men ramverket är redan ganska lämpligt för arbete och användes för att skriva en fungerande drivrutin för LAN9512 USB Ethernet-kontrollern som medföljer Raspberry Pi 3-kortet. Den befintliga drivrutinen för smsc95xx, skriven av i C språk. Det noteras att modulstorleken och overhead från runtime-komponenter vid utveckling av en drivrutin i Rust är obetydliga, vilket gör att ramverket kan användas för enheter med begränsade resurser.

Källa: opennet.ru

Lägg en kommentar