Kusindikiza kwachitatu kwa zigamba za Linux kernel mothandizidwa ndi chilankhulo cha Rust

Miguel Ojeda, wolemba pulojekiti ya Rust-for-Linux, wakonza njira yachitatu yopangira madalaivala a zida mu chilankhulo cha Rust kuti opanga ma kernel a Linux aganizire. Thandizo la dzimbiri limawonedwa ngati loyesera, koma lavomerezedwa kale kuti liphatikizidwe mu nthambi yotsatila ya linux. Ntchitoyi imathandizidwa ndi Google ndi ISRG (Internet Security Research Group), yomwe ndi amene anayambitsa pulojekiti ya Let's Encrypt ndipo imalimbikitsa HTTPS ndi chitukuko cha matekinoloje opititsa patsogolo chitetezo cha intaneti.

Kumbukirani kuti zosintha zomwe zasinthidwa zimapangitsa kuti zitheke kugwiritsa ntchito Rust ngati chilankhulo chachiwiri popanga madalaivala ndi ma module a kernel. Thandizo la dzimbiri limaperekedwa ngati njira yomwe siyimathandizidwa mwachisawawa ndipo sizipangitsa kuti Dzimbiri liphatikizidwe ngati kudalira kofunikira kwa kernel. Kugwiritsa ntchito Rust pakukula kwa madalaivala kumakupatsani mwayi wopanga madalaivala otetezeka komanso abwinoko molimbika pang'ono, opanda mavuto monga kukumbukira kukumbukira mutatha kumasula, kuchotsedwa kwa null pointer, ndi buffer overruns.

Chitetezo cha Memory chimaperekedwa mu Rust panthawi yophatikiza kudzera pakuwunika, kuyang'anira umwini wa chinthu ndi nthawi ya moyo wa chinthu (kukula), komanso kuwunika kulondola kwa kukumbukira kukumbukira panthawi yopanga ma code. Dzimbiri limaperekanso chitetezo ku kusefukira kwazinthu zonse, kumafuna kukhazikitsidwa kovomerezeka kwa zinthu zosinthika musanagwiritse ntchito, kuwongolera zolakwika bwino mulaibulale yokhazikika, kumagwiritsa ntchito lingaliro la maumboni osasinthika ndi zosintha mwachisawawa, kumapereka zilembo zolimba kuti muchepetse zolakwika zomveka.

Mawonekedwe atsopano a zigamba akupitiriza kuthetsa ndemanga zomwe zaperekedwa panthawi yokambirana za mtundu woyamba ndi wachiwiri wa zigamba. Zosintha zodziwika kwambiri:

  • Kusintha kwapangidwa kuti agwiritse ntchito kutulutsidwa kokhazikika kwa Rust 1.57 monga chojambulira komanso ulalo wa chilankhulo chokhazikika cha Rust 2021. adasankhidwa kukhala osakhazikika. Kusintha kwa mafotokozedwe a Rust 2021 kunatilola kuti tiyambe ntchito kuti tipewe kugwiritsa ntchito zinthu zosakhazikika ngati zigamba monga const_fn_transmute, const_panic, const_unavailable_unchecked ndi core_panic ndi try_reserve.
  • Kukula kwa mtundu wa alloc wa laibulale ya Rust yomwe idaphatikizidwa m'zigambazo kwapitilirabe, kusinthidwa kuti achotse ntchito zogawitsa kukumbukira zomwe zingatheke m'badwo wa "mantha" pakachitika zolakwika, monga osakumbukira. Mtundu watsopanowu umagwiritsa ntchito zosankha za "no_rc" ndi "no_sync" kuti ziletse magwiridwe antchito osagwiritsidwa ntchito mu kernel Rust code, ndikupangitsa laibulale kukhala yokhazikika. Ntchito ikupitilira ndi opanga ma alloc, omwe cholinga chake ndi kusamutsa zosintha zofunika pa kernel kupita ku laibulale yayikulu. Njira ya "no_fp_fmt_parse", yofunikira kuti laibulale igwire ntchito pamlingo wa kernel, yasunthidwa kupita ku laibulale ya Rust base (core).
  • Khodiyo yatsukidwa kuti muchotse machenjezo omwe angakhale nawo popanga kernel munjira ya CONFIG_WERROR. Mukamanga kachidindo ku Rust, njira zowonjezera zowunikira ndi ma Clippy linter machenjezo amayatsidwa.
  • Zotsalira zimaperekedwa kuti zigwiritsidwe ntchito mu Rust code for seqlocks (maloko otsatizana), kuyimbanso mafoni owongolera mphamvu, I/O Memory (readX/writeX), zosokoneza ndi ulusi, GPIO, kupeza zida, madalaivala ndi zidziwitso.
  • Zida zopangira madalaivala zidakulitsidwa kuti ziphatikizepo ma mutexes osunthika, ma bit iterators, zomangira zolozera zosavuta, zowunikira zowunikira bwino, komanso zida zodziyimira pawokha za data.
  • Ntchito yabwino yokhala ndi maulalo pogwiritsa ntchito mtundu wosavuta wa Ref, kutengera refcount_t backend, yomwe imagwiritsa ntchito kernel API ya dzina lomwelo powerengera maumboni. Thandizo la mitundu ya Arc ndi Rc yoperekedwa mu laibulale yokhazikika ya alloc yachotsedwa ndipo sichipezeka mu code yomwe imachitidwa pamlingo wa kernel (zosankha zakonzedwa kuti laibulale yomwe imalepheretsa mitundu iyi).
  • Zigambazo zikuphatikiza mtundu wa driver wa PL061 GPIO, wolembedwanso ku Rust. Chinthu chapadera cha dalaivala ndikuti kukhazikitsa kwake pafupifupi mzere ndi mzere kumabwereza dalaivala wa GPIO m'chinenero cha C. Kwa opanga omwe akufuna kudziwana ndi kupanga madalaivala ku Rust, kufananitsa kwa mzere ndi mzere kwakonzedwa komwe kumawathandiza kumvetsetsa zomwe zimapangidwira mu Rust code C imasinthidwa kukhala.
  • Rust codebase yayikulu yatengera rustc_codegen_gcc, rustc backend ya GCC yomwe imagwiritsa ntchito kasamalidwe ka nthawi (AOT) pogwiritsa ntchito laibulale ya libgccjit. Ndi chitukuko choyenera cha backend, zimakupatsani mwayi wosonkhanitsa Rust code yomwe ili mu kernel pogwiritsa ntchito GCC.
  • Kuphatikiza pa ARM, Google ndi Microsoft, Red Hat yawonetsa chidwi chogwiritsa ntchito chilankhulo cha Rust mu kernel ya Linux. Tikumbukire kuti Google imapereka chithandizo mwachindunji pa projekiti ya Rust for Linux, ikupanga kukhazikitsa kwatsopano kwa Binder interprocess communication mechanism ku Rust, ndipo ikulingalira za kuthekera kokonzanso madalaivala osiyanasiyana ku Rust. Microsoft yayamba kukhazikitsa madalaivala a Hyper-V ku Rust. ARM ikuyesetsa kukonza chithandizo cha Rust pamakina opangidwa ndi ARM. IBM yakhazikitsa chithandizo cha Rust mu kernel ya machitidwe a PowerPC.

Source: opennet.ru

Kuwonjezera ndemanga