Panukala para sa pagtalakay sa isyu ng pagdaragdag ng Rust development tools sa Linux kernel

Nick Desagnier (Nick Desaulniers), na nagtatrabaho sa Google upang magbigay suporta pagbuo ng Linux kernel gamit ang Clang compiler at gayundin pagtulong ayusin ang mga bug sa Rust compiler, iminungkahi gaganapin sa isang kumperensya Linux Plumbers Conference 2020 session upang talakayin ang paggawang posible na bumuo ng mga bahagi ng kernel sa Rust. Si Nick ay nag-oorganisa ng isang micro-conference na nakatuon sa LLVM, at naniniwala na ito ay magandang pag-usapan ang mga teknikal na aspeto ng posibleng pagsasama ng Rust support sa kernel (naihanda na niya ang isang gumaganang prototype para sa KBuild) at maunawaan kung ang naturang suporta ay dapat idaragdag sa lahat at kung anong mga paghihigpit sa paggamit ng Rust ang dapat tanggapin.

Alalahanin natin na sa isang kamakailang talakayan sa Open Source Summit at Embedded Linux conference, si Linus Torvalds hindi ibinukod ito ang paglitaw ng mga binding para sa pagbuo ng mga non-core kernel subsystem (halimbawa, mga driver) sa mga wika tulad ng Rust. Ang kakayahang bumuo ng mga driver sa Rust ay magbibigay-daan sa amin na lumikha ng mas ligtas at mas mahusay na mga driver na may kaunting pagsusumikap, walang mga problema tulad ng pag-access sa memorya pagkatapos ng pagbabakante, mga hindi pagtukoy sa null pointer, at mga buffer overrun. Mayroon nang ilang mga third-party na proyekto upang ipatupad ang tampok na ito:

  • Mga developer mula sa kumpanyang "Fish in a Barrel" nakahanda isang toolkit para sa pagsusulat ng mga na-load na module para sa Linux kernel sa Rust na wika, gamit ang isang set ng abstract layer sa ibabaw ng mga interface at kernel structures upang mapataas ang seguridad. Awtomatikong nabuo ang mga layer batay sa umiiral na mga file ng header ng kernel gamit ang utility bindgen. Ang clang ay ginagamit upang bumuo ng mga layer. Bilang karagdagan sa mga interlayer, ginagamit ng mga naka-assemble na module ang staticlib package.
  • Mga mananaliksik mula sa Chinese University of Hong Kong bumuo isang proyekto para sa pagbuo ng mga driver para sa mga naka-embed na system at Internet of Things na mga device sa Rust, na gumagamit din ng bindgen upang bumuo ng mga layer batay sa mga file ng kernel header. Ang balangkas ay nagbibigay-daan sa iyo upang mapabuti ang seguridad ng driver nang hindi gumagawa ng mga pagbabago sa kernel - sa halip na lumikha ng karagdagang mga antas ng paghihiwalay para sa mga driver sa kernel, iminungkahi na harangan ang mga problema sa yugto ng compilation, gamit ang mas secure na Rust na wika. Ipinapalagay na ang ganitong paraan ay maaaring hinihiling ng mga tagagawa ng kagamitan na nagpapaunlad ng pagmamay-ari na mga driver nang nagmamadali nang hindi nagsasagawa ng tamang pag-audit.
  • Mga developer ng framework C2 kalawang para sa pagsasahimpapawid ng C code sa Rust, pangangasiwa mga eksperimento sa pag-convert ng mga kernel module na may kaunting manu-manong pag-edit. Ang isa sa mga problemang nabanggit ay ang paggamit sa maraming bahagi ng kernel ng code na gumagamit ng mga extension ng GCC na hindi pa sinusuportahan sa C2Rust. Upang malutas ang problemang ito, plano ng C2Rust na magdagdag ng suporta para sa mga katangian ng GCC na inline, cold, alias, ginamit at seksyon, pati na rin palawakin ang mga kakayahan ng inline assembler at lutasin ang mga problema sa mga istruktura na parehong nakahanay at naka-pack (halimbawa, xregs_state) . Kabilang sa mga makabuluhang problema na nangangailangan ng manu-manong trabaho ang kawalan ng kakayahan na isalin ang mga di-trivial na C macro sa Rust macro at ang pangangailangang muling tukuyin ang mga uri, dahil isinasalin ng C2Rust ang mga uri ng C sa mga kahulugan sa libc package, ngunit hindi magagamit ang package na ito sa mga kernel module.

Pinagmulan: opennet.ru

Magdagdag ng komento