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

Miguel Ojeda, wolemba pulojekiti ya Rust-for-Linux, adakonza mtundu wachinayi wazinthu zopangira madalaivala a zida mu chilankhulo cha Rust kuti aganizidwe ndi opanga ma Linux kernel. Thandizo la dzimbiri limawonedwa ngati loyesera, koma lavomerezedwa kale kuti liphatikizidwe mu linux-nthambi yotsatila ndipo ndi wokhwima mokwanira kuti ayambe ntchito yopanga zigawo zotsalira pazigawo za kernel, komanso kulemba madalaivala ndi ma modules. 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 akupitirizabe kuthetsa ndemanga zomwe zaperekedwa panthawi yokambirana zoyamba, zachiwiri ndi zachitatu za zigamba. Mu mtundu watsopano:

  • Kusintha kogwiritsa ntchito kutulutsidwa kokhazikika kwa Rust 1.58.0 monga chojambulira chapangidwa. Zina mwa zosintha zofunika pa polojekitiyi, zomwe sizinaphatikizidwe mu chida chachikulu cha Rust, mbendera ya "-Zsymbol-mangling-version = v0" (yoyembekezeredwa mu Rust 1.59.0) ndi "mwina_uninit_extra" mode (yoyembekezeredwa mu Rust 1.60.0). .XNUMX) adazindikira..
  • Anawonjezera macheke odziwikiratu kuti ali ndi zida zoyenera za Dzimbiri ndikukulitsa luso loyesa thandizo la dzimbiri mudongosolo.
  • Zatsopano zaperekedwa kuti mupeze matebulo ozindikiritsa zida ("IdArray" ndi "IdTable") kuchokera ku Rust code.
  • Magawo owonjezera kuti mupeze ntchito zokhudzana ndi nthawi (chimango cha wotchi).
  • Madalaivala a nsanja tsopano amatanthauzidwa kupyolera mu machitidwe.
  • Macro yatsopano yawonjezedwa kuti muchepetse kulembetsa kwa oyendetsa pamapulatifomu, ndipo template yatsopano yoyendetsa yaperekedwa.
  • Ma macro owonjezera a "dev_*" zomangidwa.
  • Onjezani "{read,write}*_relaxed" njira zamtundu wa IoMem .
  • Yachotsa katundu wa FileOpener kuti muchepetse ntchito zamafayilo.
  • Gawo la "ThisModule" lawonjezedwa ku mikangano yomwe idaperekedwa polembetsa dalaivala.
  • Template yokhazikika yopangira ma module a kernel m'chinenero cha Rust ikuperekedwa.

Source: opennet.ru

Kuwonjezera ndemanga