Kadro por verki sekurajn ŝoforojn por la Linukso-kerno en Rust

Josh Triplett, kiu laboras ĉe Intel kaj estas en la komisiono kontrolanta la evoluon de Crates.io, parolante ĉe la Malferma Fonta Teknologia Pintkunveno enkondukita laborgrupo celanta alporti la Rust-lingvon al egaleco kun la C-lingvo en la kampo de sistemaj programado.

En laborgrupo kiu estas kreiĝanta, Rust-programistoj, kune kun inĝenieroj de Intel, preparos specifojn difinantajn la funkciecon kiu devas esti efektivigita en Rust por sistemprogramado. Sistemprogramado ofte postulas malalt-nivelan manipuladon, kiel ekzekutado de privilegiaj procesorinstrukcioj kaj akirado de detalaj informoj pri la stato de la procesoro. El la similaj funkcioj jam evoluigitaj por Rust, oni rimarkas subtenon por nenomitaj strukturoj, kuniĝoj, enigaĵoj de asembla lingvo (la makroo "asm!") kaj la glitkoma nombroformato BFLOAT16.

Josh opinias, ke la estonteco de sistema programado apartenas al Rust, kaj la C-lingvo en modernaj realaĵoj postulas la lokon, kiu en pasintaj jaroj estis okupita de Asembleo. Rusto
ne nur malpezigas programistojn de la problemoj enecaj en la C-lingvo kiuj ekestas pro malaltnivela laboro kun memoro, sed ankaŭ disponigas la ŝancon uzi ĝin en la evoluo de modernaj programaj paradigmoj.

Dum diskutoj prezentoj
Josh elpensis la ideon aldoni la kapablon evoluigi ŝoforojn en la Linukso-kerno en la Rust-lingvo, kio ebligus krei pli sekurajn kaj pli bonajn ŝoforojn kun minimuma penado, liberaj de problemoj kiel memoraliro post liberigo, nula. montriloj dereferences kaj bufro-tropasoj.

Greg Kroah-Hartman, kiu respondecas pri konservado de la stabila branĉo de la Linukso-kerno, esprimis sian pretecon aldoni kadron por disvolvi ŝoforojn en la Rust-lingvo al la kerno se ĝi havas realajn avantaĝojn super C, ekzemple, ĝi provizos sekuran. ligadoj super Kernel API. Krome, Greg konsideras ĉi tiun kadron nur kiel opcion, ne aktiva defaŭlte, por ne inkluzivi Rust kiel konstruan dependecon de la kerno.

Montriĝis, ke pluraj teamoj jam laboras en ĉi tiu direkto. Ekzemple, programistoj de la kompanio "Fiŝo en Barelo" preparita ilaro por skribi ŝarĝeblajn modulojn por la Linukso-kerno en la Rust-lingvo, uzante aron de abstraktaj tavoloj super la interfacoj kaj kernstrukturoj por pliigi sekurecon. Tavoloj estas aŭtomate generitaj surbaze de la ekzistantaj kernaj kapdosieroj uzante la ilon bindgen. Clang estas uzata por konstrui tavolojn. Aldone al intertavoloj, la kunvenitaj moduloj uzas la staticlib-pakaĵon.

Paralela disvolviĝas Alia projekto temigis evoluigado de ŝoforoj por enigitaj sistemoj kaj IoT-aparatoj, kiu ankaŭ uzas bindgen por generi tavolojn bazitajn sur kernaj kapdosieroj. La kadro ebligas al vi plibonigi la sekurecon de ŝoforoj sen fari ŝanĝojn al la kerno - anstataŭ krei pliajn izoligajn nivelojn por ŝoforoj en la kerno, oni proponas bloki problemojn en la kompila stadio, uzante la pli sekuran Rust-lingvon. Oni supozas, ke tia aliro povas esti postulata de ekipaĵproduktantoj evoluantaj proprietajn ŝoforojn en hasto sen fari taŭgan revizion.

Ne ĉio el la celita funkcieco ankoraŭ estis efektivigita, sed la kadro jam estas sufiĉe taŭga por laboro kaj estis uzata por skribi funkciantan pelilon por la LAN9512 USB Ethernet-regilo provizita en la Raspberry Pi 3-tabulo. La ekzistanta smsc95xx-ŝoforo, skribita de en C lingvo. Oni rimarkas, ke la modula grandeco kaj superŝarĝo de rultempaj komponantoj dum evoluigado de ŝoforo en Rust estas sensignifaj, kio permesas la kadron esti uzata por aparatoj kun limigitaj rimedoj.

fonto: opennet.ru

Aldoni komenton