Seconda edizione di patch per il kernel Linux con supporto al linguaggio Rust

МигСль ΠžΡ…Π΅Π΄Π° (Miguel Ojeda), Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Rust-for-Linux, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» для рассмотрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ядра Linux ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² устройств Π½Π° языкС Rust. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Rust рассматриваСтся ΠΊΠ°ΠΊ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ, Π½ΠΎ ΡƒΠΆΠ΅ согласована для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π²Π΅Ρ‚ΠΊΡƒ linux-next. Π’ Π½ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ устранСны замСчания, высказанныС Π² процСссС обсуТдСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ. Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Ricordiamo che le modifiche proposte rendono possibile utilizzare Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Il supporto Rust Γ¨ presentato come un'opzione che non Γ¨ abilitata per impostazione predefinita e non comporta l'inclusione di Rust come dipendenza di compilazione richiesta per il kernel. Usare Rust per lo sviluppo dei driver ti consentirΓ  di creare driver piΓΉ sicuri e migliori con il minimo sforzo, esenti da problemi come l'accesso alla memoria dopo la liberazione, i riferimenti a puntatori nulli e i sovraccarichi del buffer.

La gestione sicura della memoria viene fornita in Rust in fase di compilazione attraverso il controllo dei riferimenti, tenendo traccia della proprietΓ  dell'oggetto e della durata dell'oggetto (ambito), nonchΓ© attraverso la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche protezione contro gli overflow di numeri interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita, offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

НаиболСС Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ измСнСния Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ:

  • Код для распрСдСлСния памяти ΠΈΠ·Π±Π°Π²Π»Π΅Π½ ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ состояния Β«panicΒ» ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибок, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ° памяти. Π’ состав Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ alloc, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½ ΠΊΠΎΠ΄ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сбоСв, Π½ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ являСтся пСрСнос Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΡŽ alloc всСх возмоТностСй, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ядра (измСнСния ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² состав стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Rust).
  • ВмСсто Π½ΠΎΡ‡Π½Ρ‹Ρ… сборок для компиляции ядра с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Rust Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Ρ‚Π° выпуски ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π»ΠΈΠ·Ρ‹ компилятора rustc. Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² качСствС эталонного компилятора ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ rustc 1.54-beta1, Π½ΠΎ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° Ρ€Π΅Π»ΠΈΠ·Π° 1.54 Π² ΠΊΠΎΠ½Ρ†Π΅ мСсяца, Π² качСствС эталонного Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° написания тСстов с использованиСм ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ³ΠΎ для Rust Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Β«#[test]Β» ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния doctests для докумСнтирования тСстов.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ ARM32 ΠΈ RISCV Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ x86_64 ΠΈ ARM64.
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ GCC Rust (GCC-фронтэнда для Rust) ΠΈ rustc_codegen_gcc (бэкСнд rustc для GCC), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ всС Π±Π°Π·ΠΎΠ²Ρ‹Π΅ тСсты.
  • ΠŸΡ€Π΅Π»ΠΎΠΆΠ΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции для использования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° языкС Rust ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ядра, написанных Π½Π° языкС Π‘ΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ красно-Ρ‡Ρ‘Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с подсчётом ссылок, созданиС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов, Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°.
  • Π’ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° модуля Β«file_operationsΒ», макроса Β«module!Β», рСгистрации макросов ΠΈ Ρ€ΡƒΠ΄ΠΈΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² (probe ΠΈ remove).
  • Π’ Binder Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов ΠΈ LSM-Ρ…ΡƒΠΊΠΎΠ².
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π° Rust β€” bcm2835-rng для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл ΠΏΠ»Π°Ρ‚ Raspberry Pi.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, связанныС с использованиСм Rust Π² ядрС:

  • Компания Microsoft Π²Ρ‹Ρ€Π°Π·ΠΈΠ»Π° интСрСс ΠΊ ΡƒΡ‡Π°ΡΡ‚ΠΈΡŽ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Rust Π² ядро Linux ΠΈ Π³ΠΎΡ‚ΠΎΠ²Π° Π² блиТайшиС мСсяцы ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² для Hyper-V Π½Π° Rust.
  • Компания ARM Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈ Rust для систСм Π½Π° Π±Π°Π·Π΅ процСссоров ARM. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ Rust ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ измСнСния, пСрСводящиС 64-разрядныС систСмы ARM Π² число ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ (Tier-1).
  • Компания Google Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Rust for Linux, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° мСТпроцСссного взаимодСйствия Binder Π½Π° Rust ΠΈ рассматриваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Rust Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ². Π§Π΅Ρ€Π΅Π· ISRG (Internet Security Research Group) компания Google обСспСчила финансированиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² ядро Linux ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Rust.
  • Компания IBM Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Rust Π² ядрС для систСм PowerPC.
  • Лаборатория LSE (Systems Research Laboratory) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° SPI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π½Π° Rust.

Fonte: opennet.ru

Aggiungi un commento