Pruposta per discutiri u prublema di aghjunghje l'arnesi di sviluppu Rust Γ  u kernel Linux

Ник Π”Π΅ΡΠ°Π½ΡŒΠ΅ (Nick Desaulniers), Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉΡΡ Π² Google обСспСчСниСм sustegnu сборки ядра Linux с использованиСм компилятора Clang ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ aiutendu ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибки Π² компиляторС Rust, suggerΓ¬ провСсти Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Linux Plumbers Conference 2020 сСссию для обсуТдСния прСдоставлСния возмоТности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ядра Π½Π° языкС Rust. Ник занимаСтся ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΈΠΊΡ€ΠΎ-ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ, посвящённой LLVM, ΠΈ считаСт, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ тСхничСскиС аспСкты Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Rust Π² ядро (ΠΈΠΌ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ для KBuild) ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ограничСния ΠΏΠΎ использованию Rust слСдуСт ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ.

Напомним, Ρ‡Ρ‚ΠΎ Π² Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ дискуссии Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Β«Open Source Summit and Embedded LinuxΒ» Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ» появлСниС привязок для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ нСосновных подсистСм ядра (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²) Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках ΠΊΠ°ΠΊ Rust. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π½Π° языкС Rust ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π±Ρ‹ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ бСзопасныС ΠΈ Π±ΠΎΠ»Π΅Π΅ качСствСнныС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹, ΠΈΠ·Π±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ области памяти послС Π΅Ρ‘ освобоТдСния, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π°. Π£ΠΆΠ΅ сущСствуСт нСсколько сторонних ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ возмоТности:

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Fish in a BarrelΒ» preparatu un toolkit per scrive moduli caricabili per u kernel Linux in a lingua Rust, utilizendu un inseme di strati astratti nantu Γ  l'interfacce Γ¨ strutture di kernel per aumentΓ  a sicuritΓ . I strati sΓ² generati automaticamente in basa di i fugliali di l'intestazione di u kernel esistenti chΓ¬ utilizanu l'utilitΓ  bindgen. Clang hΓ¨ utilizatu per custruisce strati. In piΓΉ di interlayers, i moduli assemblati utilizanu u pacchettu staticlib.
  • Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΠ· ΠšΠΈΡ‚Π°ΠΉΡΠΊΠΎΠ³ΠΎ унивСрситСта Π² Π“ΠΎΠ½ΠΊΠΎΠ½Π³Π΅ sviluppΓ  ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Rust Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² для встраиваСмых систСм ΠΈ устройств ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ bindgen для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ прослоСк Π½Π° основС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ядра. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ бСзопасности Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π±Π΅Π· внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ядро β€” вмСсто создания Π² ядрС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции для Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², прСдлагаСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° этапС компиляции, примСняя Π±ΠΎΠ»Π΅Π΅ бСзопасный язык Rust. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ вострСбован производитСлями оборудования, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π½Π° ΡΠΊΠΎΡ€ΡƒΡŽ Ρ€ΡƒΠΊΡƒ Π±Π΅Π· провСдСния Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ Π°ΡƒΠ΄ΠΈΡ‚Π°.
  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° C2Rust для трансляции Π‘ΠΈ-ΠΊΠΎΠ΄Π° Π½Π° Rust, spende экспСримСнты ΠΏΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€ΡƒΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΊΠ°ΠΌΠΈ. Из ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ отмСчаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… частях ядра ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ GCC, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π² C2Rust. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² C2Rust планируСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ GCC Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² inline, cold, alias, used ΠΈ section, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ возмоТности inline-ассСмблСра ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со структурами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Ρ‹ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, xregs_state). Из сущСствСнных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, отмСчаСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π‘ΠΈ-макросы Π² макросы Rust ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ пСрСопрСдСлСния Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ C2Rust транслируСт Π‘ΠΈ-Ρ‚ΠΈΠΏΡ‹ Π² опрСдСлСния Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ libc, Π½ΠΎ этот ΠΏΠ°ΠΊΠ΅Ρ‚ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² модулях ядра.

Source: opennet.ru

Add a comment