Patch edisi katelu kanggo kernel Linux kanthi dhukungan kanggo basa Rust

МигСль ΠžΡ…Π΅Π΄Π° (Miguel Ojeda), Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Rust-for-Linux, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» для рассмотрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ядра Linux Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² устройств Π½Π° языкС Rust. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Rust рассматриваСтся ΠΊΠ°ΠΊ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ, Π½ΠΎ ΡƒΠΆΠ΅ согласована для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π²Π΅Ρ‚ΠΊΡƒ linux-next. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° финансируСтся ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ISRG (Internet Security Research Group), которая являСтся ΡƒΡ‡Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Let’s Encrypt ΠΈ способствуСт ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡŽ HTTPS ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ защищённости ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°.

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.

Π’ Π½ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ устранСниС Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ, высказанных Π² процСссС обсуТдСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ вСрсий ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ. НаиболСС Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ измСнСния:

  • ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Ρ‘Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° использованиС Π² качСствС эталонного компилятора ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ выпуска Rust 1.57 ΠΈ обСспСчСна привязка ΠΊ стабилизированной Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ языка Rust 2021. Π Π°Π½Π΅Π΅ ΠΏΠ°Ρ‚Ρ‡ΠΈ Π±Ρ‹Π»ΠΈ завязаны Π½Π° Π±Π΅Ρ‚Π°-Π²Π΅Ρ‚ΠΊΡƒ Rust ΠΈ использовали Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности языка, входящиС Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Rust 2021 ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΡƒΡ…ΠΎΠ΄Ρƒ ΠΎΡ‚ использования Π² ΠΏΠ°Ρ‚Ρ‡Π°Ρ… Ρ‚Π°ΠΊΠΈΡ… Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… возмоТностСй, ΠΊΠ°ΠΊ const_fn_transmute, const_panic, const_unreachable_unchecked ΠΈ core_panic ΠΈ try_reserve.
  • ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ входящСго Π² состав ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ alloc, ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΉ для избавлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ распрСдСлСния памяти ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ состояния Β«panicΒ» ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибок, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ° памяти. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ Β«no_rcΒ» ΠΈ Β«no_syncΒ» для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Rust-ΠΊΠΎΠ΄Π΅ для ядра, Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° с основными Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ alloc, нацСлСнная Π½Π° пСрСнос Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ядра измСнСния Π² основной состав Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Rust (core) пСрСнСсСна опция Β«no_fp_fmt_parseΒ», нСобходимая для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° чистка ΠΊΠΎΠ΄Π° для избавлСния ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ компилятора ΠΏΡ€ΠΈ сборкС ядра Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ CONFIG_WERROR. ΠŸΡ€ΠΈ сборкС ΠΊΠΎΠ΄Π° Π½Π° языкС Rust Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ диагностичСскиС Ρ€Π΅ΠΆΠΈΠΌΡ‹ компилятора ΠΈ прСдупрСТдСния Π»ΠΈΠ½Ρ‚Π΅Ρ€Π° Clippy.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ абстракции для использования Π² ΠΊΠΎΠ΄Π΅ Π½Π° языкС Rust Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ seqlock (sequence locks), callback-Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для управлСния ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ΠΌ, I/O Memory (readX/writeX), ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², GPIO, доступа ΠΊ устройствам, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌ ΠΈ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ срСдства для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² с задСйствованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ², Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½Ρ‹Ρ… обвязок Π½Π°Π΄ указатСлями, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ диагностики сбоСв ΠΈ инфраструктуры, Π½Π΅ зависимой ΠΎΡ‚ ΡˆΠΈΠ½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° со ссылками ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ref, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° бэкСндС refcount_t, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹ΠΉ API ядра для подсчёта ссылок. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Arc ΠΈ Rc, прСдоставляСмых Π² ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ alloc, ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΈ Π½Π΅ доступна Π² ΠΊΠΎΠ΄Π΅, выполняСмом Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра (для самой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹).
  • Π’ состав ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° PL061 GPIO, пСрСписанный Π½Π° Rust. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ рСализация практичСски построчно повторяСт ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ GPIO Π½Π° языкС Π‘ΠΈ. Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с созданиСм Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π½Π° Rust, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΎ построчноС сравнСниС, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΊΠΈΠ΅ конструкции Π½Π° Rust ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ ΠΊΠΎΠ΄ Π½Π° Π‘ΠΈ.
  • Π’ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Rust принят rustc_codegen_gcc, бэкСнд rustc для GCC, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ (AOT) компиляции с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libgccjit. ΠŸΡ€ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΌ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ бэкСнда ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ задСйствованный Π² ядрС Rust-ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ GCC.
  • Помимо ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ARM, Google ΠΈ Microsoft, интСрСс ΠΊ использованию языка Rust Π² ядрС Linux Π²Ρ‹Ρ€Π°Π·ΠΈΠ»Π° компания Red Hat. Напомним, Ρ‡Ρ‚ΠΎ Google Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Rust for Linux, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° мСТпроцСссного взаимодСйствия Binder Π½Π° Rust ΠΈ рассматриваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Rust Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ². Компания Microsoft приступила ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² для Hyper-V Π½Π° Rust. Компания ARM Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈ Rust для систСм Π½Π° Π±Π°Π·Π΅ процСссоров ARM. Компания IBM Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Rust Π² ядрС для систСм PowerPC.

Source: opennet.ru

Add a comment