Patch versi kaping enem kanggo kernel Linux kanthi dhukungan basa Rust

Miguel Ojeda, penulis proyek Rust-for-Linux, ngusulake rilis komponen v6 kanggo ngembangake driver piranti ing basa Rust kanggo dipikirake dening pangembang kernel Linux. Iki minangka edisi kaping pitu saka patch, njupuk versi pisanan, diterbitake tanpa nomer versi. Dhukungan teyeng dianggep minangka eksperimen, nanging wis kalebu ing cabang linux-sabanjuré lan cukup dikembangaké kanggo miwiti gawé lapisan abstraksi liwat subsistem kernel, uga nulis driver lan modul. Pangembangan kasebut didanai dening Google lan ISRG (Internet Security Research Group), sing dadi pendiri proyek Let's Encrypt lan promosi HTTPS lan pangembangan teknologi kanggo nambah keamanan Internet.

Ing versi anyar:

  • Toolkit lan varian saka perpustakaan alloc, dibebasake saka kemungkinan generasi "gupuh" negara nalika ana kesalahan, wis dianyari kanggo release saka Rust 1.60, kang stabil support kanggo mode "maybe_uninit_extra" digunakake ing patch kernel.
  • Nambahake kemampuan kanggo mbukak tes saka dokumentasi (tes sing uga digunakake minangka conto ing dokumentasi), liwat konversi wektu kompilasi tes sing disambungake menyang API kernel menyang tes KUnit sing ditindakake sajrone loading kernel.
  • Keperluan wis diadopsi yen tes ngirim ora ngasilake bebaya Clippy linter, kaya kode kernel Rust.
  • Implementasi awal modul "net" kanthi fungsi jaringan diusulake. Kode Rust nduweni akses menyang struktur jaringan kernel kayata Namespace (adhedhasar struktur kernel struct net), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) lan sing padha karo IPv6 .
  • Ana dhukungan awal kanggo teknik pemrograman asinkron (async), diimplementasikake ing wangun modul kasync. Contone, sampeyan bisa nulis kode asinkron kanggo ngapusi soket TCP: async fn echo_server(stream: TcpStream) -> Result {let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; yen n == 0 {bali Ok(()); } stream.write_all(&buf[..n]).ngenteni?; }}
  • Added net :: modul filter kanggo manipulasi saringan paket jaringan. Added conto rust_netfilter.rs karo implementasine Filter ing basa Rust.
  • Added implementasine saka smutex mutex prasaja :: Mutex, kang ora mbutuhake pinning.
  • Ditambahake NoWaitLock, sing ora nate ngenteni kunci, lan yen dikuwasani dening benang liyane, nyebabake kesalahan dilaporake nalika nyoba entuk kunci tinimbang mandhegake panelpon.
  • Added RawSpinLock, dikenali dening raw_spinlock_t ing kernel, kanggo aplikasi kanggo bagean sing ora bisa nganggur.
  • Added jinis ARef kanggo referensi kanggo obyek sing mekanisme pancacahan referensi Applied (tansah-refcounted).
  • Backend rustc_codegen_gcc, sing ngijini sampeyan kanggo nggunakake perpustakaan libgccjit saka project GCC minangka generator kode ing rustc kanggo nyedhiyani rustc support kanggo arsitektur lan optimizations kasedhiya ing GCC, wis dipun ginakaken kemampuan kanggo bootstrapping compiler rustc. Promosi Compiler tegese kemampuan kanggo nggunakake generator kode basis GCC ing rustc kanggo mbangun compiler rustc dhewe. Kajaba iku, release anyar saka GCC 12.1 kalebu mbenakake kanggo libgccjit perlu kanggo rustc_codegen_gcc bisa bener. Persiapan ditindakake kanggo nyedhiyakake kemampuan kanggo nginstal rustc_codegen_gcc nggunakake sarana rustup.
  • Kemajuan ing pangembangan GCC frontend gccrs kanthi implementasine kompiler basa Rust adhedhasar GCC kacathet. Saiki ana rong pangembang full-time sing nggarap gccrs.

Elinga yen owah-owahan sing diusulake bisa nggunakake Rust minangka basa liya kanggo ngembangake driver lan modul kernel. Dhukungan Rust ditampilake minangka pilihan sing ora diaktifake kanthi standar lan ora nyebabake Rust kalebu minangka ketergantungan mbangun sing dibutuhake kanggo kernel. Nggunakake Rust kanggo pangembangan driver bakal ngidini sampeyan nggawe driver sing luwih aman lan luwih apik kanthi gaweyan minimal, bebas saka masalah kayata akses memori sawise dibebasake, dereferensi null pointer, lan overruns buffer.

Penanganan memori-aman diwenehake ing Rust ing wektu kompilasi liwat mriksa referensi, nglacak kepemilikan obyek lan umur obyek (skop), uga liwat evaluasi bener saka akses memori sak eksekusi kode. Rust uga menehi pangayoman marang overflows integer, mbutuhake initialization prentah saka nilai variabel sadurunge digunakake, Ngalahake kasalahan luwih apik ing perpustakaan standar, ditrapake konsep referensi immutable lan variabel minangka standar, nawakake typing statis kuwat kanggo nyilikake kesalahan logis.

Source: opennet.ru

Add a comment