ΠΠΈΠ³Π΅Π»Ρ ΠΡ Π΅Π΄Π° (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