Ikalimang 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 ikalimang bersyon ng mga bahagi para sa pagbuo ng mga driver ng device sa wikang Rust para sa pagsasaalang-alang ng mga developer ng Linux kernel. Ang suporta sa kalawang ay itinuturing na pang-eksperimento, ngunit kasama na sa linux-next branch at sapat na itong binuo upang simulan ang paggawa ng abstraction layer sa mga kernel subsystem, pati na rin ang pagsulat ng mga driver at module. Ang pagpapaunlad ay pinondohan ng Google at ng ISRG (Internet Security Research Group), na siyang nagtatag ng proyektong Let's Encrypt at nagpo-promote ng HTTPS at ang pagbuo ng mga teknolohiya upang mapabuti ang seguridad sa Internet.

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 bagong bersyon ng mga patch ay patuloy na inaalis ang mga komentong ginawa sa panahon ng talakayan ng una, pangalawa, pangatlo at ikaapat na edisyon ng mga patch. Sa bagong bersyon:

  • Idinagdag ang component testing para sa Rust support sa tuluy-tuloy na integration system batay sa Intel-supported 0DAY/LKP bot at nagsimula na ang paglalathala ng mga ulat sa pagsubok. Naghahanda kaming isama ang Rust support sa KernelCI automated testing system. Ang pagsubok batay sa GitHub CI ay inilipat sa paggamit ng mga lalagyan.
  • Ang mga module ng kalawang kernel ay pinalaya mula sa pangangailangang tukuyin ang mga katangian ng crate na β€œ#![no_std]” at β€œ#![feature(…)]”.
  • Nagdagdag ng suporta para sa iisang target na pagpupulong (.o, .s, .ll at .i).
  • Tinutukoy ng mga alituntunin ng code ang mga panuntunan para sa paghihiwalay ng mga komento (β€œ//”) at code sa pagdodokumento (β€œ///”).
  • Ang is_rust_module.sh script ay muling ginawa.
  • Nagdagdag ng suporta para sa static (global shared variable) na mga primitive ng synchronization batay sa pagpapatupad ng "CONFIG_CONSTRUCTORS."
  • Ang pamamahala ng lock ay pinasimple: Ang Guard at GuardMut ay pinagsama at isang naka-parameter na uri.
  • Posibleng tukuyin ang mga karagdagang parameter kapag nagrerehistro ng mga device.
  • Idinagdag ang abstraction na "RwSemaphore", na nagsisilbing wrapper sa rw_semaphore C structure.
  • Upang magamit ang mmap, isang bagong mm module at isang VMA abstraction ang idinagdag (isang wrapper sa vm_area_struct structure).
  • Ang driver ng GPIO PL061 ay inilipat sa paggamit ng "dev_*!" macro.
  • Isang pangkalahatang paglilinis ng code ang isinagawa.

Pinagmulan: opennet.ru

Magdagdag ng komento