Ko te putanga tuatoru o nga papanga mo te kernel Linux me te tautoko mo te reo Rust

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

Kia maumahara ko nga huringa e whakaarohia ana ka taea te whakamahi i te Rust hei reo tuarua mo te whakawhanake i nga taraiwa me nga waahanga kernel. Ko te tautoko waikura ka whakaatuhia hei whiringa kaore e taea te taunoa me te kore e uru ki te waikura hei ti'aturi hanga mo te kernel. Ma te whakamahi i te Rust mo te whanaketanga taraiwa ka taea e koe te hanga taraiwa haumaru me te pai ake me te iti o te whakapau kaha, kaore he raruraru penei i te uru mahara i muri i te wateatanga, nga tohu tohu korekore, me te nui o te aukati.

Ka whakaratohia te haumaru mahara i roto i te Rust i te wa whakahiato ma te tirotiro tohutoro, te pupuri i te mana o te ahanoa me te oranga o te ahanoa (whanui), tae atu ki te arotake i te tika o te uru mahara i te wa e mahia ana te waehere. Ko te waikura hoki he whakamarumaru mai i nga puhaketanga integer, me whakahau kia tiimata nga uara taurangi i mua i te whakamahi, ka pai ake te hapai i nga hapa i roto i te whare pukapuka paerewa, te whakamahi i te kaupapa o nga tohutoro koretake me nga taurangi ma te taunoa, e tuku ana i te patopato pateko kaha hei whakaiti i nga hapa arorau.

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

  • ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Ρ‘Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° использованиС Π² качСствС эталонного компилятора ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ выпуска 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

Tāpiri i te kōrero