L'ottava versione di patches per u kernel Linux cΓΉ supportu per a lingua Rust

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

In a nova versione:

  • Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ alloc, ΠΈΠ·Π±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ состояния Β«panicΒ» ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибок, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ Π΄ΠΎ выпуска Rust 1.62. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ€Π°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ вСрсиСй Π² инструмСнтарии Rust стабилизирована ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ const_fn_trait_bound, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² ΠΏΠ°Ρ‚Ρ‡Π°Ρ… ΠΊ ядру.
  • Код привязок Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ crate-ΠΏΠ°ΠΊΠ΅Ρ‚ Β«bindingsΒ», Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ пСрСсборку Π² случаС внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² основной ΠΏΠ°ΠΊΠ΅Ρ‚ Β«kernelΒ».
  • РСализация макроса Β«concat_idents!Β» пСрСписана Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ макроса, Π½Π΅ привязанного ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ concat_idents ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ссылок Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.
  • ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Π½ макрос Β«static_assert!Β», Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«core::assert!()Β» Π² любом контСкстС вмСсто констант.
  • ΠœΠ°ΠΊΡ€ΠΎΡ Β«build_error!Β» Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ выставлСнии для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π΅ΠΆΠΈΠΌΠ° Β«RUST_BUILD_ASSERT_{WARN,ALLOW}Β».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с настройками Β«kernel/configs/rust.configΒ».
  • ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π² макроподстановках Ρ„Π°ΠΉΠ»Ρ‹ Β«*.iΒ» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹ Π² Β«*.rsiΒ».
  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сборки Rust-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² с уровнями ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ примСняСмых для ΠΊΠΎΠ΄Π° Π½Π° языкС Π‘ΠΈ.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ fs, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ обвязки для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ систСмами. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, написанной Π½Π° языкС Rust.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ workqueue для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с систСмными очСрСдями (прСдоставляСт обвязки Π½Π°Π΄ структурами ядра work_struct ΠΈ workqueue_struct).
  • ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ модуля kasync с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² асинхронного программирования (async). Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра TCP-сСрвСра, написанного Π½Π° Rust.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π½Π° языкС Rust ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ [Threaded]Handler ΠΈ Ρ‚ΠΈΠΏΠΎΠ² [Threaded]Registration`.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ макрос Β«#[vtable]Β», ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ структура file_operations.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° рСализация Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… связных списков Β«unsafe_list::ListΒ».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° RCU (Read-copy-update) ΠΈ Ρ‚ΠΈΠΏ Guard для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ привязки Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция Task::spawn() для создания ΠΈ автоматичСского запуска ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ядра. Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Task::wake_up().
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ delay, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ (ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ msleep()).

I cambiamenti pruposti permettenu di utilizà Rust cum'è una seconda lingua per sviluppà drivers è moduli di kernel. U supportu di Rust hè presentatu cum'è una opzione chì ùn hè micca attivata per difettu è ùn hà micca risultatu in Rust esse inclusu cum'è una dependenza di creazione necessaria per u kernel. Utilizà Rust per u sviluppu di u driver vi permetterà di creà drivers più sicuri è megliu cù u minimu sforzu, senza prublemi cum'è l'accessu à a memoria dopu a liberazione, dereferences di puntatore nulla è buffer overruns.

A gestione sicura di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, tenendu traccia di a pruprietà di l'ughjettu è a vita di l'ughjettu (scopu), è ancu per a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.

Source: opennet.ru

Add a comment