Miguel Ojeda, autori i projektit Rust-for-Linux, propozoi pĂ«r shqyrtim nga zhvilluesit e bĂ«rthamĂ«s Linux njĂ« variant tĂ« tretĂ« tĂ« komponentĂ«ve pĂ«r zhvillimin e drejtorive tĂ« pajisjeve nĂ« gjuhĂ«n Rust. MbĂ«shtetja pĂ«r Rust konsiderohet si eksperimenti, por tashmĂ« Ă«shtĂ« miratuar pĂ«r t'u pĂ«rfshirĂ« nĂ« degĂ«n linux-next. Zhvillimi financohet nga kompania Google dhe organizata ISRG (Grupi pĂ«r KĂ«rkimin e SigurisĂ« nĂ« Internet), e cila Ă«shtĂ« themeluesi i projektit Letâs Encrypt dhe nxit avancimin e HTTPS dhe zhvillimin e teknologjive pĂ«r pĂ«rmirĂ«simin e sigurisĂ« sĂ« internetit.
Kujtojmë se ndryshimet e propozuara japin mundësinë për të përdorur Rust si gjuhën e dytë për zhvillimin e drejtorive dhe moduleve të bërthamës. Mbështetja për Rust paraqitet si një opsion, i cili nuk është aktiv me parazgjedhje dhe nuk çon në përfshirjen e Rust në listën e varësive të detyrueshme për ndërtimin e bërthamës. Përdorimi i Rust për zhvillimin e drejtorive do të lejojë krijimin e drejtorive të sigurta dhe më të kualitetshme me minimumin e mundimeve, duke eliminuar probleme si manipulimi me hapësirën e memories pas lirimit të saj, dereferencimi i pikave null dhe tejkalimi i kufijve të tamponit.
Trajtimi i sigurt i memories garantohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve dhe marrëveshjes së kohëzgjatjes së objekteve (zona e dukshmërisë), si dhe përmes vlerësimit të saktësisë së qasjes në memory gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga mbushjet e 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ë pazëvendësueshëm (immutable) si standard, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.
Në variantin e ri të patch-eve vazhdohet përmirësimi i vërejtjeve të shprehura gjatë diskutimeve të versioneve të para dhe të dyta të patch-eve. Ndryshimet më të dukshme janë:
- ĂshtĂ« realizuar kalimi nĂ« pĂ«rdorimin si kompilator referencĂ« tĂ« versionit stabil Rust 1.57 dhe Ă«shtĂ« siguruar lidhja me versionin e stabilizuar tĂ« gjuhĂ«s Rust 2021. MĂ« parĂ«, patch-et ishin lidhur me degĂ«n beta tĂ« Rust dhe pĂ«rdornin disa mundĂ«si tĂ« gjuhĂ«s qĂ« pĂ«rfshiheshin nĂ« kategorinĂ« e paqĂ«ndrueshme. Kalimi nĂ« specifikimin Rust 2021 lehuar tĂ« fillonte punĂ«n pĂ«r tĂ« dalĂ« nga pĂ«rdorimi nĂ« patch-e tĂ« mundĂ«sive tĂ« paqĂ«ndrueshme si const_fn_transmute, const_panic, const_unreachable_unchecked dhe core_panic dhe try_reserve.
- ĂshtĂ« vazhduar zhvillimi i versionit tĂ« bibliotekĂ«s Rust alloc, i integruar nĂ« patches, i modifikuar pĂ«r tĂ« eliminuar funksionet e shpĂ«rndarjes sĂ« memories nga gjeneratat e mundshme tĂ« gjendjes "panic" nĂ« rast tĂ« gabimeve, siç Ă«shtĂ« 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. Vazhdon puna me zhvilluesit kryesorĂ« tĂ« alloc, e cila ka si qĂ«llim transferimin e ndryshimeve tĂ« nevojshme pĂ«r kernelin nĂ« pĂ«rbĂ«rjen kryesore tĂ« bibliotekĂ«s. Opsioni "no_fp_fmt_parse", i nevojshĂ«m pĂ«r funksionimin e bibliotekĂ«s nĂ« nivelin e kernelit, Ă«shtĂ« transferuar nĂ« bibliotekĂ«n bazĂ« Rust (core).
- ĂshtĂ« bĂ«rĂ« pastrimi i kodit pĂ«r tĂ« eliminuar njoftimet e mundshme tĂ« kompilatorit gjatĂ« ndĂ«rtimit tĂ« kernelit nĂ« mĂ«nyrĂ«n CONFIG_WERROR. GjatĂ« ndĂ«rtimit tĂ« kodit nĂ« gjuhĂ«n Rust janĂ« pĂ«rfshirĂ« modet diagnostikuese shtesĂ« tĂ« kompilatorit dhe njoftime tĂ« linters Clippy.
- Janë propozuar abstraksione për përdorim në kodin Rust të bllokimeve seqlock (bllokime sekuencash), thirrjeve callback për menaxhimin e energjisë, I/O Memory (readX/writeX), përpunuesve të ndërprerjeve dhe këndvështrimeve, GPIO, aksesin në pajisje, drejtuesit dhe kredencialet.
- Janë zgjeruar mjetet për zhvillimin e drejtuesve duke angazhuar mutex të zhvendosur, iterues të bitëve, lidhje të thjeshta mbi treguesit, diagnostikë të përmirësuar të dështimeve dhe një infrastrukturë të pavarur nga autobusi i të dhënave.
- ĂshtĂ« pĂ«rmirĂ«suar puna me referencat pĂ«rmes njĂ« tipi tĂ« thjeshtuar Ref, i bazuar nĂ« backendin refcount_t, i cili pĂ«rdor API-nĂ« e njĂ«jtĂ« tĂ« kernelit pĂ«r numĂ«rimin e referencave. MbĂ«shtetje pĂ«r tipet Arc dhe Rc, tĂ« ofruara nĂ« bibliotekĂ«n standarde alloc, Ă«shtĂ« hequr dhe nuk Ă«shtĂ« e disponueshme nĂ« kodin qĂ« ekzekutohet nĂ« nivelin e kernelit (pĂ«r bibliotekĂ«n vetĂ« janĂ« pĂ«rgatitur opsione pĂ«r tĂ« ç aktivizuar kĂ«to tipe).
- Në përbërjen e patches është shtuar një variant drejtuesi PL061 GPIO, i ri-shkruar në Rust. Veçoria e drejtuesit është se realizimi i tij përsërit praktikisht rresht për rresht drejtuesin ekzistues GPIO në gjuhën C. Për zhvilluesit që dëshirojnë të njohin krijimin e drejtuesve në Rust, është përgatitur një krahasim rresht për rresht, që lejon të kuptojnë se në cilat konstrukte në Rust është transformuar kodi në C.
- Në bazën e kodit 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 zhvillimin e duhur të backend-it, ai do të lejojë ndërtimin e kodit të angazhuar në bërthama Rust duke përdorur GCC.
- Përveç kompanive ARM, Google dhe Microsoft, interesi për përdorimin e gjuhës Rust në bërthamën Linux është shprehur nga kompania Red Hat. Kujtojmë se Google ofron mbështetje të drejtpërdrejtë për projektin Rust for Linux, zhvillon një realizim të ri të mekanizmit të ndërveprimit midis proceseve Binder në Rust dhe shqyrton mundësinë e ripërpunimit të disa driverëve të ndryshëm në Rust. Kompania Microsoft ka filluar implementimin e driverëve për Hyper-V në Rust. Kompania ARM po punon për të përmirësuar mbështetje për Rust për sistemet e bazuara në procesorët ARM. Kompania IBM ka realizuar mbështetje për Rust në bërthamë për sistemet PowerPC.
Burimi: opennet.ru
