Pangalawang edisyon ng mga patch para sa Linux kernel na may suporta para sa Rust na wika

Si Miguel Ojeda, may-akda ng proyektong Rust-for-Linux, ay nagmungkahi ng na-update na bersyon ng mga bahagi para sa pagbuo ng mga driver ng device sa Rust na wika para sa pagsasaalang-alang ng mga developer ng Linux kernel. Ang suporta sa kalawang ay itinuturing na eksperimental, ngunit napagkasunduan na para sa pagsasama sa linux-next branch. Tinatanggal ng bagong bersyon ang mga komentong ginawa sa panahon ng talakayan ng unang bersyon ng mga patch. Si Linus Torvalds ay sumali na sa talakayan at iminungkahi na baguhin ang lohika para sa pagproseso ng ilang mga operasyon.

Alalahanin na ang mga iminungkahing pagbabago ay ginagawang posible na gamitin ang Rust bilang pangalawang wika para sa pagbuo ng mga driver at kernel module. Ang suporta sa kalawang ay ipinakita bilang isang opsyon na hindi pinagana bilang default at hindi nagreresulta sa pagsasama ng Rust bilang isang kinakailangang build dependency para sa kernel. Ang paggamit ng Rust para sa pag-develop ng driver ay magbibigay-daan sa iyo na lumikha ng mas ligtas at mas mahusay na mga driver na may kaunting pagsisikap, walang mga problema tulad ng pag-access sa memorya pagkatapos ng pagbabakante, mga hindi pagtukoy sa null pointer, at mga buffer overrun.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay at panghabambuhay ng bagay (saklaw), gayundin sa pamamagitan ng pagsusuri ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.

Ang pinakakapansin-pansing pagbabago sa bagong bersyon ng mga patch:

  • Ang code ng paglalaan ng memorya ay pinalaya mula sa potensyal na pagbuo ng isang "panic" na estado kapag nangyari ang mga error tulad ng out of memory. May kasamang variant ng Rust alloc library, na muling gumagawa ng code para mahawakan ang mga pagkabigo, ngunit ang pinakalayunin ay ilipat ang lahat ng feature na kailangan para sa kernel sa pangunahing edisyon ng alloc (ang mga pagbabago ay naihanda na at nailipat na sa standard Rust library).
  • Sa halip na gabi-gabing build, maaari mo na ngayong gamitin ang beta release at stable release ng rustc compiler para mag-compile ng kernel na may suporta sa Rust. Sa kasalukuyan, ginagamit ang rustc 1.54-beta1 bilang reference compiler, ngunit pagkatapos ilabas ang 1.54 release sa katapusan ng buwan, ito ay susuportahan bilang reference compiler.
  • Nagdagdag ng suporta para sa pagsusulat ng mga pagsusulit gamit ang karaniwang attribute na "#[test]" para sa Rust at ang kakayahang gumamit ng mga doctest upang idokumento ang mga pagsubok.
  • Nagdagdag ng suporta para sa mga arkitektura ng ARM32 at RISCV bilang karagdagan sa dati nang sinusuportahang x86_64 at ARM64.
  • Mga pinahusay na pagpapatupad ng GCC Rust (GCC frontend para sa Rust) at rustc_codegen_gcc (rustc backend para sa GCC), na ngayon ay pumasa sa lahat ng pangunahing pagsubok.
  • Ang isang bagong antas ng abstraction ay iminungkahi para sa paggamit sa mga Rust na programa ng mga mekanismo ng kernel na nakasulat sa C, tulad ng mga pulang-itim na puno, mga bagay na binibilang ng sanggunian, paglikha ng file descriptor, mga gawain, mga file, at mga I/O vectors.
  • Ang mga bahagi ng pagpapaunlad ng driver ay nagpahusay ng suporta para sa file_operations module, ang module! macro, macro registration, at mga pasimulang driver (probe at alisin).
  • Sinusuportahan na ngayon ng Binder ang pagpasa ng mga file descriptor at LSM hook.
  • Ang isang mas functional na halimbawa ng isang Rust driver ay iminungkahi - bcm2835-rng para sa hardware na random number generator ng Raspberry Pi boards.

Bilang karagdagan, ang ilang mga proyekto ng kumpanya na may kaugnayan sa paggamit ng Rust sa kernel ay binanggit:

  • Ang Microsoft ay nagpahayag ng interes sa pakikilahok sa gawain upang maisama ang suporta sa Rust sa kernel ng Linux at handang magbigay ng mga pagpapatupad ng driver para sa Hyper-V sa Rust sa mga darating na buwan.
  • Gumagana ang ARM upang mapabuti ang suporta sa Rust para sa mga system na nakabatay sa ARM. Ang Rust project ay nagmungkahi na ng mga pagbabago na gagawing 64-bit ARM system na isang Tier 1 na platform.
  • Direktang nagbibigay ng suporta ang Google para sa proyektong Rust para sa Linux, gumagawa ng bagong pagpapatupad ng mekanismo ng komunikasyon ng Binder interprocess sa Rust, at isinasaalang-alang ang posibilidad ng muling paggawa ng iba't ibang driver sa Rust. Sa pamamagitan ng ISRG (Internet Security Research Group), nagbigay ang Google ng pagpopondo para sa trabaho upang maisama ang suporta sa Rust sa Linux kernel.
  • Ipinatupad ng IBM ang suporta sa kernel para sa Rust para sa mga sistema ng PowerPC.
  • Ang laboratoryo ng LSE (Systems Research Laboratory) ay nakabuo ng isang driver ng SPI sa Rust.

Pinagmulan: opennet.ru

Magdagdag ng komento