Edicioni i tretë i arnimeve për kernelin Linux me mbështetje për gjuhën Rust

Miguel Ojeda, autor i projektit Rust-for-Linux, ka propozuar një opsion të tretë të komponentit për zhvillimin e drejtuesve të pajisjes në gjuhën Rust që zhvilluesit e kernelit Linux ta marrin në konsideratë. Mbështetja e Rust konsiderohet eksperimentale, por tashmë është rënë dakord për përfshirje në degën linux-next. 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ë e internetit.

Kujtojmë se 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.

Versioni i ri i arnimeve vazhdon të eliminojë komentet e bëra gjatë diskutimit të versionit të parë dhe të dytë të arnimeve. Ndryshimet më të dukshme:

  • Është bërë një tranzicion në përdorimin e lëshimit të qëndrueshëm të Rust 1.57 si përpilues referencë dhe është siguruar një lidhje me botimin e stabilizuar të gjuhës Rust 2021. Më parë, arnimet ishin të lidhura me degën beta të Rust dhe përdornin disa veçori gjuhësore që u klasifikuan si të paqëndrueshme. Kalimi në specifikimet Rust 2021 na lejoi të fillojmë punën për të shmangur përdorimin e veçorive të tilla të paqëndrueshme në arna si const_fn_transmute, const_panic, const_unavailable_unchecked dhe core_panic dhe try_reserve.
  • Zhvillimi i versionit alloc të bibliotekës Rust të përfshirë në arna ka vazhduar, i modifikuar për të çliruar funksionet e alokimit të kujtesës nga gjenerimi i mundshëm i gjendjes "paniku" kur ndodhin gabime, si për shembull pa memorie. Versioni i ri zbaton opsionet "no_rc" dhe "no_sync" për të çaktivizuar funksionalitetin që nuk përdoret në kodin Rust të kernelit, duke e bërë bibliotekën më modulare. Puna vazhdon me zhvilluesit kryesorë alloc, me synim transferimin e ndryshimeve të nevojshme për kernelin në bibliotekën kryesore. Opsioni "no_fp_fmt_parse", i nevojshëm që biblioteka të funksionojë në nivelin e kernelit, është zhvendosur në bibliotekën bazë Rust (bërthamë).
  • Kodi është pastruar për të hequr qafe paralajmërimet e mundshme të përpiluesit gjatë ndërtimit të kernelit në modalitetin CONFIG_WERROR. Kur ndërtoni kodin në Rust, aktivizohen mënyrat shtesë të diagnostikimit të përpiluesit dhe paralajmërimet e linterit Clippy.
  • Abstraksionet propozohen për përdorim në kodin Rust për bllokimet vijuese (kyçjet e sekuencës), thirrjet e kthimit të thirrjes për menaxhimin e energjisë, memorien I/O (readX/writeX), mbajtësit e ndërprerjeve dhe temave, GPIO, aksesin në pajisje, drejtuesit dhe kredencialet.
  • Mjetet për zhvillimin e drejtuesve janë zgjeruar për të përfshirë mutexe të zhvendosshëm, përsëritës të biteve, lidhje të thjeshtuara të treguesve, diagnostikim të përmirësuar të gabimeve dhe infrastrukturë të pavarur nga autobusi i të dhënave.
  • Përmirësimi i punës me lidhjet duke përdorur një lloj Ref të thjeshtuar, bazuar në backend-in refcount_t, i cili përdor API-në e kernelit me të njëjtin emër për numërimin e referencave. Mbështetja për llojet Arc dhe Rc të ofruara në bibliotekën standarde të ndarjes është hequr dhe nuk është e disponueshme në kodin e ekzekutuar në nivelin e kernelit (për vetë bibliotekën janë përgatitur opsione që çaktivizojnë këto lloje).
  • Arnimet përfshijnë një version të drejtuesit PL061 GPIO, të rishkruar në Rust. Një veçori e veçantë e drejtuesit është se zbatimi i tij pothuajse rresht pas rreshti përsërit drejtuesin ekzistues GPIO në gjuhën C. Për zhvilluesit që duan të njihen me krijimin e drejtuesve në Rust, është përgatitur një krahasim rresht pas rreshti që u lejon atyre të kuptojnë se në cilat konstruksione në Rust është konvertuar kodi C.
  • Baza kryesore e kodeve Rust ka miratuar rustc_codegen_gcc, një prapavijë rustc për GCC që zbaton përpilimin përpara kohe (AOT) duke përdorur bibliotekën libgccjit. Me zhvillimin e duhur të backend-it, do t'ju lejojë të mbledhni kodin Rust të përfshirë në kernel duke përdorur GCC.
  • Përveç ARM, Google dhe Microsoft, Red Hat ka shprehur interes për përdorimin e gjuhës Rust në kernelin Linux. Le të kujtojmë se Google ofron drejtpërdrejt mbështetje për projektin Rust for Linux, po zhvillon një zbatim të ri të mekanizmit të komunikimit ndërprocesor Binder në Rust dhe po shqyrton mundësinë e ripërpunimit të drejtuesve të ndryshëm në Rust. Microsoft ka filluar zbatimin e drejtuesve për Hyper-V në Rust. ARM po punon për të përmirësuar mbështetjen Rust për sistemet e bazuara në ARM. IBM ka implementuar mbështetjen Rust në kernel për sistemet PowerPC.

Burimi: opennet.ru

Shto një koment