Miguel Ojeda, autori i projektit Rust-for-Linux, propozoi për shqyrtim nga zhvilluesit e kernelit Linux një variant të tretë të komponentëve për zhvillimin e drejtpërdrejtë të pajisjeve në gjuhën Rust. Mbështetje e Rust konsiderohet si eksperimentale, por tashmë është miratuar për t'u përfshirë në degën linux-next. Zhvillimi financohet nga kompania Google dhe organizata ISRG (Internet Security Research Group), e cila është themeluesi i projektit Let's Encrypt dhe kontribuon në promovimin e HTTPS dhe zhvillimin e teknologjive për rritjen e sigurisë në internet.
Kujtojme se ndryshimet e propozuara ofrojnë mundësinë e përdorimit të Rust si gjuhë të dytë për zhvillimin e drejtuesve dhe moduleve të bërthamës. Mbështetja për Rust paraqitet si një opsion, i cili nuk aktivizohet nga parazgjedhja dhe nuk çon në përfshirjen e Rust në numrin e varësive të detyrueshme për ndërtimin e bërthamës. Përdorimi i Rust për zhvillimin e drejtuesve do të lejojë krijimin e drejtuesve të sigurt dhe më të kualitetshëm me përpjekje minimale, duke eliminuar probleme si përdorimi i hapësirës së memories pas lirimit të saj, dereferencimi i treguesve null dhe tejkalimi i kufijve të tamponit.
Funksionaliteti i sigurt i punës me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve dhe llogaritjes së kohëzgjatjes së jetës së objekteve (fusha e dukshmërisë), si dhe përmes vlerësimit të saktësisë së aksesit në memorie gjatë ekzekutimit të kodit. Rust ofron gjithashtu mjete për mbrojtjen nga tejkalimet e numrave të tërë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron një tipizim statik të fortë për të minimizuar gabimet logjike.
Në variantin e ri të patch-ëve vazhdohet të adresohen vërejtjet e shprehura gjatë diskutimit të versioneve të para dhe të dytë të patch-ëve. Ndryshimet më të dukshme:
- Kalimi i është bërë për të përdorur kompajlerin stabil të lëshuar Rust 1.57 dhe është siguruar lidhja me versionin e stabilizuar të gjuhës Rust 2021. Më parë, pashtet ishin të lidhura me degën beta të Rust dhe përdornin disa veçori gjuhësore që bënin pjesë në kategorinë e veçorive të pasiguruara. Kalimi në specifikimin Rust 2021 lejoi fillimin e punës për të shmangur përdorimin e këtyre veçorive të pasiguruara në pashta, si p.sh. const_fn_transmute, const_panic, const_unreachable_unchecked dhe core_panic dhe try_reserve.
- Ka vazhduar zhvillimi i versionit të bibliotekës Rust alloc, i përfshirë në pashta, i modifikuar për të eliminuar funksionet e shpërndarjes së memories nga mundësitë për të gjeneruar gjendjen "panic" në rast të gabimeve si mungesa e memories. Në versionin e ri janë realizuar opsionet "no_rc" dhe "no_sync" për të çaktivizuar funksionalitetin që nuk përdoret në kodin Rust për kernelin, duke e bërë bibliotekën më modulare. Punimet me zhvilluesit kryesorë të alloc vazhdojnë, duke synuar transferimin e ndryshimeve të nevojshme për kernelin në përbërjen kryesore të bibliotekës. Në biblioteken bazë Rust (core) është transferuar opsioni "no_fp_fmt_parse", i nevojshëm për funksionimin e bibliotekës në nivelin e kernelit.
- U kryer pastrimi i kodit për të eliminuar mundësitë e paralajmërimeve të kompilatorit gjatë ndërtimit të bërthamës në modin CONFIG_WERROR. Gjatë ndërtimit të kodit në gjuhën Rust janë aktivizuar mënyra të tjera diagnostikuese të kompilatorit dhe paralajmërime nga linters Clippy.
- Propozohen abstraksione për përdorim në kodin Rust për bllokimet seqlock (bllokime sekuencash), thirrje callback për menaxhimin e energjisë, Memoria I/O (readX/writeX), trajtuesit e ndërprerjeve dhe rrjedhave, GPIO, aksesin në pajisje, drejtues dhe kredenciale.
- Janë zgjeruar mjetet për zhvillimin e drejtuesve duke përfshirë mutex të lëvizshëm, iterues bitësh, mbështjellje të thjeshtuara mbi treguesit, diagnostikë të përmirësuar të dështimeve dhe infrastrukturë të pavarur nga autobusi i të dhënave.
- ĂshtĂ« pĂ«rmirĂ«suar puna me referencat duke pĂ«rdorur njĂ« tip tĂ« thjeshtuar Ref, i bazuar nĂ« backendin refcount_t, qĂ« pĂ«rdor API-nĂ« e njĂ«jtĂ« tĂ« bĂ«rthamĂ«s pĂ«r numĂ«rimin e referencave. MbĂ«shtetje pĂ«r tipet Arc dhe Rc, tĂ« ofruara nĂ« bibliotekĂ«n e zakonshme alloc, Ă«shtĂ« hequr dhe nuk Ă«shtĂ« e disponueshme nĂ« kodin qĂ« ekzekutohet nĂ« nivelin e bĂ«rthamĂ«s (pĂ«r vetĂ« bibliotekĂ«n janĂ« pĂ«rgatitur opsione qĂ« çaktivizojnĂ« kĂ«to tipa).
- Në përbërjen e patches është shtuar një variant i drajverit PL061 GPIO, i shkruar në Rust. Veçoria e drajverit është se implementimi i tij përsërit praktikisht në çdo rresht drajverin ekzistues GPIO të shkruar në gjuhën C. Për zhvilluesit që dëshirojnë të njohin krijimin e drajverëve në Rust, është përgatitur një krahasim rresht pas rreshti, që mundëson të kuptohet në cilat struktura në Rust është transformuar kodi në C.
- Në kodin kryesor të Rust është pranuar rustc_codegen_gcc, backend i rustc për GCC, që implementon mundësinë e kompilimit të parashikueshëm (AOT) duke përdorur bibliotekën libgccjit. Me një zhvillim të duhur të backend-it, ai do të mundësojë ndërtimin e kodit të përdorur në bërthamën Rust nëpërmjet GCC.
- Përveç kompanive ARM, Google dhe Microsoft, interesi për përdorimin e gjuhës Rust në bërthamën Linux është shprehur edhe nga kompania Red Hat. Përkujtojmë se Google ofron mbështetje direkte për projektin Rust for Linux, zhvillon një zbatim të ri të mekanizmit të ndërveprimit ndërprocesor Binder në Rust dhe shqyrton mundësinë e ribërjes në Rust të disa drejtuesve. Kompania Microsoft ka filluar të zbatojë drejtuesit për Hyper-V në Rust. Kompania ARM po punon për përmirësimin e mbështetjes për Rust në sisteme me procesorë ARM. Kompania IBM ka zbatuar mbështetje për Rust në bërthamën për sistemet PowerPC.
Burimi: opennet.ru
