Is-sitt verżjoni tal-garża għall-qalba tal-Linux b'appoġġ għall-lingwa Rust

Miguel Ojeda, awtur tal-proġett Rust-for-Linux, ippropona r-rilaxx ta 'komponenti v6 għall-iżvilupp ta' sewwieqa tal-apparat fil-lingwa Rust għal konsiderazzjoni mill-iżviluppaturi tal-kernel Linux. Din hija s-seba' edizzjoni tal-garża, b'kont meħud tal-ewwel verżjoni, ippubblikata mingħajr numru tal-verżjoni. L-appoġġ tas-sadid huwa kkunsidrat bħala sperimentali, iżda diġà huwa inkluż fil-fergħa linux-next u huwa żviluppat biżżejjed biex jibda x-xogħol fuq il-ħolqien ta 'saffi ta' astrazzjoni fuq sottosistemi tal-kernel, kif ukoll kitba ta 'sewwieqa u moduli. L-iżvilupp huwa ffinanzjat minn Google u l-ISRG (Internet Security Research Group), li huwa l-fundatur tal-proġett Let's Encrypt u jippromwovi HTTPS u l-iżvilupp ta 'teknoloġiji biex itejbu s-sigurtà tal-Internet.

Fil-verżjoni l-ġdida:

  • L-għodda u varjant tal-librerija alloc, meħlusa minn ġenerazzjoni possibbli ta 'stat "paniku" meta jseħħu żbalji, ġew aġġornati għar-rilaxx ta' Rust 1.60, li jistabbilizza l-appoġġ għall-mod "maybe_uninit_extra" użat fl-irqajja tal-kernel.
  • Miżjud il-kapaċità li tmexxi testijiet mid-dokumentazzjoni (testijiet li jintużaw ukoll bħala eżempji fid-dokumentazzjoni), permezz ta 'konverżjoni fil-ħin tal-kompilazzjoni ta' testijiet marbuta mal-API tal-kernel f'testijiet KUnit esegwiti waqt it-tagħbija tal-kernel.
  • Ġew adottati rekwiżiti li t-testijiet m'għandhomx jirriżultaw fi twissija Clippy linter, bħall-kodiċi tal-qalba Rust.
  • Hija proposta implimentazzjoni inizjali tal-modulu "net" b'funzjonijiet tan-netwerk. Il-kodiċi tas-sadid għandu aċċess għal strutturi tan-netwerk tal-kernel bħal Namespace (ibbażat fuq l-istruttura tal-kernel struct net), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) u l-ekwivalenti IPv6 tagħhom .
  • Hemm appoġġ inizjali għal tekniki ta 'programmazzjoni asinkronika (async), implimentati fil-forma tal-modulu kasync. Pereżempju, tista 'tikteb kodiċi asinkroniku biex timmanipula sockets TCP: async fn echo_server (stream: TcpStream) -> Riżultat { let mut buf = [0u8; 1024]; loop {let n = stream.read(&mut buf).wait?; jekk n == 0 { ritorn Ok (()); } stream.write_all(&buf[..n]).wait?; } }
  • Net::modulu tal-filtru miżjud għall-manipulazzjoni tal-filtri tal-pakkett tan-netwerk. Eżempju miżjud rust_netfilter.rs b'implimentazzjoni ta' filtru fil-lingwa Rust.
  • Implimentazzjoni miżjuda ta 'mutex smutex sempliċi::Mutex, li ma teħtieġx pinning.
  • Miżjud NoWaitLock, li qatt ma jistenna għal lock, u jekk okkupat minn ħajt ieħor, jikkawża żball li jiġi rrappurtat meta jipprova jakkwista l-lock minflok iwaqqaf lil min iċempel.
  • Miżjud RawSpinLock, identifikat minn raw_spinlock_t fil-qalba, biex japplika għal sezzjonijiet li ma jistgħux ikunu idle.
  • Tip ARef miżjud għal referenzi għal oġġett li għalih jiġi applikat il-mekkaniżmu tal-għadd ta' referenza (dejjem-refcounted).
  • Il-backend rustc_codegen_gcc, li jippermettilek tuża l-librerija libgccjit mill-proġett GCC bħala ġeneratur tal-kodiċi fir-rustc biex tipprovdi rustc b'appoġġ għal arkitetturi u ottimizzazzjonijiet disponibbli fil-GCC, implimenta l-abbiltà li bootstrapping il-kompilatur rustc. Il-promozzjoni tal-kompilatur tfisser il-ħila li tuża ġeneratur tal-kodiċi bbażat fuq il-GCC f'rustc biex tibni l-kompilatur tar-rustc innifsu. Barra minn hekk, ir-rilaxx riċenti tal-GCC 12.1 jinkludi soluzzjoni għal libgccjit meħtieġa biex rustc_codegen_gcc jaħdem b'mod korrett. Għaddejjin tħejjijiet biex tiġi pprovduta l-abbiltà li tinstalla rustc_codegen_gcc billi tuża l-utilità rustup.
  • Huwa nnutat il-progress fl-iżvilupp tal-frontend gccrs tal-GCC bl-implimentazzjoni tal-kompilatur tal-lingwa Rust ibbażat fuq GCC. Bħalissa hemm żewġ żviluppaturi full-time li jaħdmu fuq gccrs.

Ifakkar li l-bidliet proposti jagħmluha possibbli li jintuża Rust bħala t-tieni lingwa għall-iżvilupp ta 'sewwieqa u moduli tal-kernel. L-appoġġ għas-sadid huwa ppreżentat bħala għażla li mhix attivata awtomatikament u ma tirriżultax fl-inklużjoni ta 'Rut fost id-dipendenzi tal-bini meħtieġa għall-kernel. L-użu ta' Rust biex tiżviluppa sewwieqa jippermettilek toħloq sewwieqa aktar sikuri u aħjar bi sforz minimu, ħielsa minn problemi bħall-aċċess għal żona tal-memorja wara li tiġi meħlusa, dereferencing null pointers, u buffer overruns.

Is-sikurezza tal-memorja hija pprovduta f'Rut fil-ħin tal-kompilazzjoni permezz ta 'verifika ta' referenza, iżżomm kont tal-proprjetà tal-oġġett u l-ħajja tal-oġġett (ambitu), kif ukoll permezz ta 'evalwazzjoni tal-korrettezza tal-aċċess għall-memorja waqt l-eżekuzzjoni tal-kodiċi. Rust jipprovdi wkoll protezzjoni kontra overflows integer, jeħtieġ inizjalizzazzjoni obbligatorja ta 'valuri varjabbli qabel l-użu, jimmaniġġja l-iżbalji aħjar fil-librerija standard, japplika l-kunċett ta' referenzi immutabbli u varjabbli b'mod awtomatiku, joffri tajpjar statiku qawwi biex jimminimizza l-iżbalji loġiċi.

Sors: opennet.ru

Żid kumment