Ang ikatulo nga edisyon sa mga patch alang sa Linux kernel nga adunay suporta alang sa Rust nga pinulongan

Si Miguel Ojeda, tagsulat sa Rust-for-Linux nga proyekto, nagsugyot ug ikatulo nga bahin nga kapilian alang sa pagpalambo sa mga driver sa device sa Rust nga pinulongan alang sa Linux kernel developers nga tagdon. Ang suporta sa Rust giisip nga eksperimento, apan gikasabutan na alang sa paglakip sa sunod nga sanga sa linux. Ang kalamboan gipondohan sa Google ug sa ISRG (Internet Security Research Group), nga mao ang nagtukod sa Let's Encrypt nga proyekto ug nagpasiugda sa HTTPS ug sa pagpalambo sa mga teknolohiya aron mapausbaw ang seguridad sa Internet.

Hinumdomi nga ang gisugyot nga mga pagbag-o nagpaposible sa paggamit sa Rust isip ikaduha nga pinulongan alang sa pagpalambo sa mga drayber ug kernel modules. Ang suporta sa Rust gipresentar isip usa ka opsyon nga dili mahimo pinaagi sa default ug dili moresulta sa Rust nga gilakip isip usa ka gikinahanglan nga pagsalig sa pagtukod alang sa kernel. Ang paggamit sa Rust alang sa pagpalambo sa drayber magtugot kanimo sa paghimo og mas luwas ug mas maayo nga mga drayber nga adunay gamay nga paningkamot, gawasnon sa mga problema sama sa pag-access sa memorya human sa pagpalaya, null pointer dereferences, ug buffer overruns.

Ang pagdumala nga luwas sa memorya gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa pakisayran, pagsubay sa pagpanag-iya sa butang ug kinabuhi sa butang (sangkap), ingon man pinaagi sa pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Ang bag-ong bersyon sa mga patch nagpadayon sa pagwagtang sa mga komento nga gihimo sa panahon sa paghisgot sa una ug ikaduha nga bersyon sa mga patch. Ang labing mamatikdan nga mga pagbag-o:

  • Gihimo ang usa ka transisyon sa paggamit sa stable nga pagpagawas sa Rust 1.57 isip reference compiler ug usa ka link sa stabilized nga edisyon sa Rust 2021 nga pinulongan ang gihatag. giklasipikar nga dili lig-on. Ang pagbalhin ngadto sa Rust 2021 nga espesipikasyon nagtugot kanamo sa pagsugod sa trabaho aron malikayan ang paggamit sa mga dili lig-on nga mga bahin sa mga patch sama sa const_fn_transmute, const_panic, const_unavailable_unchecked ug core_panic ug try_reserve.
  • Ang pag-uswag sa alloc nga bersyon sa Rust library nga gilakip sa mga patches nagpadayon, giusab aron mawala ang mga function sa alokasyon sa panumduman sa posible nga henerasyon sa "panic" nga estado kung adunay mga sayup nga mahitabo, sama sa wala sa memorya. Ang bag-ong bersyon nagpatuman sa "no_rc" ug "no_sync" nga mga kapilian sa pag-disable sa pag-andar nga wala gigamit sa kernel Rust code, nga naghimo sa librarya nga mas modular. Nagpadayon ang pagtrabaho kauban ang mga nag-unang tig-develop sa alloc, nga gitumong sa pagbalhin sa mga pagbag-o nga gikinahanglan alang sa kernel ngadto sa panguna nga librarya. Ang "no_fp_fmt_parse" nga kapilian, gikinahanglan alang sa librarya nga magtrabaho sa lebel sa kernel, gibalhin ngadto sa Rust base library (kinauyokan).
  • Ang kodigo gilimpyohan aron mawagtang ang posibleng mga pasidaan sa compiler sa pagtukod sa kernel sa CONFIG_WERROR mode. Kung magtukod og code sa Rust, ang dugang nga compiler diagnostic modes ug Clippy linter warnings gi-enable.
  • Ang mga abstraction gisugyot nga gamiton sa Rust code para sa seqlocks (sequence lock), callback calls para sa power management, I/O Memory (readX/writeX), interrupt ug thread handler, GPIO, access sa mga device, drivers ug credentials.
  • Ang mga galamiton alang sa pagpalambo sa mga drayber gipalapdan nga naglakip sa mga mabalhin nga mutexes, bit iterators, gipasimple nga pointer bindings, gipaayo nga diagnostics sa sayop, ug data bus-independent nga imprastraktura.
  • Gipauswag nga trabaho sa mga link gamit ang gipasimple nga tipo sa Ref, base sa refcount_t backend, nga naggamit sa kernel API sa parehas nga ngalan alang sa pag-ihap sa mga pakisayran. Ang suporta alang sa Arc ug Rc nga mga matang nga gihatag sa standard alloc library gikuha na ug wala na sa code nga gipatuman sa kernel level (giandam na ang mga opsyon para sa library mismo nga nag-disable niini nga mga tipo).
  • Ang mga patch naglakip sa usa ka bersyon sa PL061 GPIO driver, gisulat pag-usab sa Rust. Ang usa ka espesyal nga bahin sa drayber mao nga ang pagpatuman niini halos linya sa linya nga gisubli ang kasamtangan nga drayber sa GPIO sa C nga pinulongan. Alang sa mga developers nga gustong masinati sa paghimo og mga drayber sa Rust, giandam ang usa ka line-by-line nga pagtandi nga nagtugot kanila nga masabtan kung asa nga mga konstruksyon sa Rust ang C code ang gi-convert.
  • Ang nag-unang Rust codebase nagsagop sa rustc_codegen_gcc, usa ka rustc backend para sa GCC nga nagpatuman sa ahead-of-time (AOT) compilation gamit ang libgccjit library. Uban sa husto nga pag-uswag sa backend, kini magtugot kanimo sa pagkolekta sa Rust code nga nalambigit sa kernel gamit ang GCC.
  • Dugang sa ARM, Google ug Microsoft, ang Red Hat nagpahayag og interes sa paggamit sa Rust nga pinulongan sa Linux kernel. Atong hinumdoman nga ang Google direkta nga naghatag suporta alang sa Rust alang sa Linux nga proyekto, nagpalambo sa usa ka bag-ong pagpatuman sa Binder interprocess nga mekanismo sa komunikasyon sa Rust, ug gikonsiderar ang posibilidad sa pag-rework sa lainlaing mga drayber sa Rust. Gisugdan na sa Microsoft ang pagpatuman sa mga drayber alang sa Hyper-V sa Rust. Ang ARM nagtrabaho aron mapaayo ang suporta sa Rust alang sa mga sistema nga nakabase sa ARM. Gipatuman sa IBM ang suporta sa Rust sa kernel alang sa mga sistema sa PowerPC.

Source: opennet.ru

Idugang sa usa ka comment