Siga na shida na faci na Linux kernel tare da goyan bayan yaren Rust

Miguel Ojeda, marubucin aikin Rust-for-Linux, ya ba da shawarar sakin abubuwan v6 don haɓaka direbobin na'ura a cikin yaren Rust don la'akari da masu haɓaka kernel na Linux. Wannan shine bugu na bakwai na faci, la'akari da sigar farko, wanda aka buga ba tare da lambar sigar ba. Ana ɗaukar goyon bayan tsatsa a matsayin gwaji, amma an riga an haɗa shi a cikin reshe na gaba na Linux kuma an haɓaka isasshe don fara aiki akan ƙirƙirar yadudduka na kernel subsystems, da kuma rubuta direbobi da kayayyaki. Google da ISRG (Rukunin Binciken Tsaro na Intanet) ne suka dauki nauyin wannan ci gaban, wanda shine wanda ya kafa aikin Mu Encrypt kuma yana haɓaka HTTPS da haɓaka fasahar inganta tsaro ta Intanet.

A cikin sabon sigar:

  • Kayan aikin kayan aiki da bambance-bambancen ɗakin karatu na allo, waɗanda aka 'yanta daga yuwuwar ƙarni na yanayin "firgita" lokacin da kurakurai suka faru, an sabunta su zuwa sakin Rust 1.60, wanda ke tabbatar da tallafi ga yanayin "maybe_uninit_extra" da aka yi amfani da shi a cikin facin kernel.
  • An ƙara ikon gudanar da gwaje-gwaje daga takaddun (gwaji waɗanda kuma ake amfani da su azaman misalai a cikin takaddun), ta hanyar jujjuya lokaci-lokaci na gwaje-gwajen da aka ɗaure da kernel API zuwa gwaje-gwajen KUnit da aka aiwatar yayin loda kernel.
  • An karɓi buƙatun waɗanda bai kamata gwaje-gwaje su haifar da gargaɗin Clippy linter ba, kamar lambar kernel ɗin Rust.
  • An gabatar da fara aiwatar da tsarin "net" tare da ayyukan cibiyar sadarwa. Lambar tsatsa tana da damar yin amfani da tsarin cibiyar sadarwa na kwaya kamar Namespace (dangane da tsarin tsarin kernel), SkBuff (tsarin sk_buff), TcpListener, TcpStream (tsarin soket), Ipv4Addr (tsarin in_addr), SocketAddrV4 (tsarin sockaddr_in equivalent) da IPs. .
  • Akwai tallafi na farko don dabarun shirye-shiryen asynchronous (async), wanda aka aiwatar ta hanyar kasync module. Misali, zaku iya rubuta lambar asynchronous don sarrafa kwas ɗin TCP: async fn echo_server (rafi: TcpStream) -> Sakamako {bari mut buf = [0u8; 1024]; madauki {bari n = rafi. karanta (&mut buf). jira?; idan n == 0 {dawo Ok(()); } rafi.write_all (&buf[..n]) jira?; } }
  • Ƙara net :: tsarin tacewa don sarrafa fakitin fakitin cibiyar sadarwa. Ƙara misalin rust_netfilter.rs tare da aiwatar da tacewa a cikin yaren Rust.
  • Ƙara aiwatar da smutex mai sauƙi :: Mutex, wanda baya buƙatar pinning.
  • Ƙara NoWaitLock, wanda baya jiran kullewa, kuma idan wani zaren ya shagaltar da shi, yana haifar da rahoton kuskure lokacin ƙoƙarin samun makullin maimakon dakatar da mai kira.
  • Ƙara RawSpinLock, wanda raw_spinlock_t ya gano a cikin kernel, don amfani da sassan da ba za su iya zama marasa aiki ba.
  • Ƙara nau'in AREf don nassoshi zuwa abu wanda ake amfani da injin ƙidayar magana (ko da yaushe-ƙididdigewa).
  • Rustc_codegen_gcc backend, wanda ke ba ku damar amfani da ɗakin karatu na libgccjit daga aikin GCC azaman janareta na lamba a rustc don samar da rustc tare da goyan bayan gine-gine da haɓakawa da ke cikin GCC, ya aiwatar da ikon bootstrapping na rustc tarawa. Haɓakawa mai haɗawa yana nufin ikon yin amfani da janareta na lamba GCC a cikin rustc don gina rustc compiler kanta. Bugu da kari, sakin kwanan nan na GCC 12.1 ya haɗa da gyare-gyare zuwa libgccjit waɗanda ake buƙata don rustc_codegen_gcc yayi aiki daidai. Ana ci gaba da shirye-shirye don samar da ikon shigar da rustc_codegen_gcc ta amfani da kayan aikin rustup.
  • An lura da ci gaban ci gaban GCC frontend gccrs tare da aiwatar da mai tara harshe na Rust bisa GCC. A halin yanzu akwai masu haɓaka cikakken lokaci guda biyu waɗanda ke aiki akan gccrs.

Ka tuna cewa canje-canjen da aka gabatar sun ba da damar yin amfani da Rust azaman harshe na biyu don haɓaka direbobi da samfuran kwaya. Ana gabatar da tallafin tsatsa azaman zaɓi wanda ba a kunna shi ta tsohuwa ba kuma baya haifar da shigar da tsatsa azaman dogaron ginawa da ake buƙata don kernel. Yin amfani da Rust don haɓaka direba zai ba ku damar ƙirƙirar mafi aminci kuma mafi kyawun direbobi tare da ƙaramin ƙoƙari, 'yanci daga matsaloli kamar samun damar ƙwaƙwalwar ajiya bayan 'yantarwa, ɓangarorin maƙasudin null, da buffer overruns.

Ana ba da amincin ƙwaƙwalwar ajiya a cikin Tsatsa a lokacin tattarawa ta hanyar duba tunani, kiyaye bin diddigin mallakar abu da tsawon rayuwa (ikon), haka kuma ta hanyar kimanta daidaitaccen damar ƙwaƙwalwar ajiya yayin aiwatar da lambar. Tsatsa kuma yana ba da kariya daga ambaliya mai lamba, yana buƙatar ƙaddamar da ƙima mai mahimmanci kafin amfani, yana sarrafa kurakurai mafi kyau a cikin daidaitaccen ɗakin karatu, yana amfani da ra'ayi na nassoshi marasa canzawa da masu canji ta tsohuwa, yana ba da buga rubutu mai ƙarfi don rage kurakurai masu ma'ana.

source: budenet.ru

Add a comment