Versioni i tetë i arnimeve për kernelin Linux me mbështetje për gjuhën Rust

Miguel Ojeda, autor i projektit Rust-for-Linux, propozoi lëshimin e komponentëve v8 për zhvillimin e drejtuesve të pajisjeve në gjuhën Rust për t'u marrë në konsideratë nga zhvilluesit e kernelit Linux. Ky është versioni i rishikuar i arnimeve, duke marrë parasysh versionin e parë, të publikuar pa një numër versioni. Mbështetja e Rust konsiderohet eksperimentale, por tashmë është përfshirë në degën e linux-next, pretendon të integrohet në versionin e vjeshtës 5.20/6.0 dhe është mjaft i pjekur për të filluar punën në krijimin e shtresave abstraksioni mbi nënsistemet e kernelit, si dhe shkrimin e drejtuesve dhe drejtuesve dhe modulet. Zhvillimi financohet nga Google dhe ISRG (Internet Security Research Group), i cili është themeluesi i projektit Let's Encrypt dhe promovon HTTPS dhe zhvillimin e teknologjive për të përmirësuar sigurinë në internet.

Në versionin e ri:

  • Paketa e veglave dhe një variant i bibliotekës alloc, pa gjenerimin e mundshëm të gjendjes "paniku" kur ndodhin gabime, janë përditësuar për lëshimin e Rust 1.62. Krahasuar me versionin e përdorur më parë, grupi i veglave Rust ka stabilizuar mbështetjen për funksionalitetin const_fn_trait_bound të përdorur në arna të kernelit.
  • Kodi i lidhjes ndahet në një paketë të veçantë "lidhjesh", e cila thjeshton rindërtimin nëse bëhen ndryshime vetëm në "kernel" të paketës kryesore.
  • Zbatimi i makro "concat_idents!" i rishkruar në formën e një makro procedurale që nuk është e lidhur me funksionalitetin concat_idents dhe lejon përdorimin e referencave për variablat lokale.
  • Makroja “static_assert!” është rishkruar, duke lejuar përdorimin e “core::assert!()” në çdo kontekst në vend të konstanteve.
  • Makro "build_error!" përshtatur për të punuar kur modaliteti "RUST_BUILD_ASSERT_{WARN, LEOW}" është vendosur për modulet.
  • U shtua një skedar i veçantë me cilësimet "kernel/configs/rust.config".
  • Skedarët "*.i" të përpunuara në zëvendësimet makro janë riemërtuar në "*.rsi".
  • Mbështetja për ndërtimin e komponentëve Rust me nivele optimizimi të ndryshme nga ato të përdorura për kodin C është ndërprerë.
  • U shtua moduli fs, i cili siguron lidhje për të punuar me sistemet e skedarëve. Jepet një shembull i një sistemi të thjeshtë skedarësh të shkruar në Rust.
  • Shtuar modulin e radhës së punës për të punuar me radhët e sistemit (siguron lidhje mbi strukturat e kernelit work_struct dhe workqueue_struct).
  • Zhvillimi i modulit kasync vazhdoi me zbatimin e metodave të programimit asinkron (async). U shtua një shembull i një serveri TCP të nivelit bazë të shkruar në Rust.
  • U shtua aftësia për të trajtuar ndërprerjet në gjuhën Rust duke përdorur llojet [Threaded]Handler dhe [Threaded]Registration` llojet.
  • U shtua makro procedurale "#[vtable]" për ta bërë më të lehtë punën me tabelat e treguesve të funksionit, siç është struktura file_operations.
  • U shtua zbatimi i listave të lidhura me dy drejtime "unsafe_list::List".
  • U shtua mbështetja fillestare për RCU (Lexo-kopjo-përditësim) dhe llojin e rojes për të kontrolluar nëse një bllokues leximi është i lidhur me fillin aktual.
  • U shtua funksioni Task::spawn() për të krijuar dhe nisur automatikisht thread-et e kernelit. Shtoi gjithashtu metodën Task::wake_up().
  • U shtua një modul vonese që ju lejon të përdorni vonesat (një mbështjellës mbi msleep()).

Ndryshimet e propozuara bëjnë të mundur përdorimin e Rust si gjuhë të dytë për zhvillimin e drejtuesve dhe moduleve të kernelit. Mbështetja e Rust paraqitet si një opsion që nuk është aktivizuar si parazgjedhje dhe nuk rezulton që Rust të përfshihet si një varësi e nevojshme ndërtimi për kernelin. Përdorimi i Rust për zhvillimin e drejtuesve do t'ju lejojë të krijoni drejtues më të sigurt dhe më të mirë me përpjekje minimale, pa probleme të tilla si qasja në kujtesë pas çlirimit, çreferencat e treguesit null dhe tejkalimet e buferit.

Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmëve të pronësisë së objektit dhe jetëgjatësisë së objektit (fushëveprimit), si dhe përmes vlerësimit të korrektësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.

Burimi: opennet.ru

Shto një koment