Korniza për shkrimin e drejtuesve të sigurt për kernelin Linux në Rust

Josh Triplett, i cili punon në Intel dhe është në komitetin që mbikëqyr zhvillimin e Crates.io, duke folur në Samitin e Teknologjisë me Burim të Hapur paraqitur një grup pune që synon të sjellë gjuhën Rust në barazi me gjuhën C në fushën e programimit të sistemeve.

Në një grup pune që është në proces të krijimit, zhvilluesit e Rust, së bashku me inxhinierët nga Intel, do të përgatisin specifikimet që përcaktojnë funksionalitetin që duhet të zbatohet në Rust për programimin e sistemeve. Programimi i sistemit shpesh kërkon manipulime të nivelit të ulët, të tilla si ekzekutimi i udhëzimeve të privilegjuara të procesorit dhe marrja e informacionit të detajuar për gjendjen e procesorit. Nga veçoritë e ngjashme që janë zhvilluar tashmë për Rust, vërehet mbështetje për strukturat pa emër, bashkimet, insertet e gjuhës së asamblesë (makro "asm!") dhe formati i numrave me pikë lundruese BFLOAT16.

Josh beson se e ardhmja e programimit të sistemit i përket Rust dhe gjuha C në realitetet moderne po pretendon vendin që në vitet e kaluara zinte Asambleja. Ndryshk
jo vetëm që lehtëson zhvilluesit nga problemet e natyrshme në gjuhën C që lindin për shkak të punës së nivelit të ulët me kujtesën, por gjithashtu ofron mundësinë për ta përdorur atë në zhvillimin e paradigmave moderne të programimit.

Në progres diskutime shfaqje
Josh erdhi me idenë e shtimit të aftësisë për të zhvilluar drejtues në kernel Linux në gjuhën Rust, e cila do të bënte të mundur krijimin e drejtuesve më të sigurt dhe më të mirë me përpjekje minimale, pa probleme të tilla si aksesi në memorie pas çlirimit, null. çreferencat e treguesve dhe tejkalimet e buferit.

Greg Kroah-Hartman, i cili është përgjegjës për mirëmbajtjen e degës së qëndrueshme të kernelit Linux, shprehu gatishmërinë e tij për të shtuar një kornizë për zhvillimin e drejtuesve në gjuhën Rust në kernel nëse ka avantazhe reale ndaj C, për shembull, do të sigurojë siguri lidhjet mbi API-në e Kernelit. Për më tepër, Greg e konsideron këtë kornizë vetëm si një opsion, jo aktiv si parazgjedhje, në mënyrë që të mos përfshijë Rust si një varësi ndërtimi në kernel.

Doli se tashmë disa ekipe po punojnë në këtë drejtim. Për shembull, zhvilluesit nga kompania "Peshku në një fuçi" përgatitur një paketë veglash për shkrimin e moduleve të ngarkueshme për kernelin Linux në gjuhën Rust, duke përdorur një grup shtresash abstrakte mbi ndërfaqet dhe strukturat e kernelit për të rritur sigurinë. Shtresat gjenerohen automatikisht bazuar në skedarët ekzistues të kokës së kernelit duke përdorur programin bindingen. Clang përdoret për të ndërtuar shtresa. Përveç ndërshtresave, modulet e montuara përdorin paketën staticlib.

Paralele po zhvillohet Një projekt tjetër u fokusua në zhvillimin e drejtuesve për sistemet e integruara dhe pajisjet IoT, i cili gjithashtu përdor bindgen për të gjeneruar shtresa të bazuara në skedarët e kokës së kernelit. Korniza ju lejon të përmirësoni sigurinë e drejtuesit pa bërë ndryshime në kernel - në vend që të krijoni nivele shtesë të izolimit për drejtuesit në kernel, propozohet të bllokoni problemet në fazën e përpilimit, duke përdorur gjuhën më të sigurt Rust. Supozohet se një qasje e tillë mund të kërkohet nga prodhuesit e pajisjeve që zhvillojnë drejtues të pronarit me nxitim pa kryer një auditim të duhur.

Jo i gjithë funksionaliteti i synuar është zbatuar ende, por korniza tashmë është mjaft e përshtatshme për punë dhe është përdorur për të shkruar një drejtues pune për kontrolluesin USB Ethernet LAN9512 të furnizuar në tabelën Raspberry Pi 3. Drejtuesi ekzistues smsc95xx, i shkruar nga në gjuha C. Vihet re se madhësia e modulit dhe shpenzimet e përgjithshme nga komponentët e kohës së ekzekutimit gjatë zhvillimit të një drejtuesi në Rust janë të parëndësishme, gjë që lejon që korniza të përdoret për pajisjet me burime të kufizuara.

Burimi: opennet.ru

Shto një koment