Rust-for-Linux ááá±á¬áá»ááºááᯠáá±ážáá¬ážáá° Miguel Ojeda ááẠLinux kernel developer áá»á¬ážá០ááá·áºááœááºážá ááºážá á¬ážáááºá¡ááœáẠRust áá¬áá¬á áá¬ážááœáẠá ááºáááá¯ááºáá¬áá»á¬áž áá®ááœááºáááºá¡ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážá ááœááºážáá¶áá¬ážáá±á¬áá¬ážááŸááºážááᯠá¡ááá¯ááŒá¯áá²á·áááºá áá¶áá»á±ážáááºááŒááºáž áá¶á·ááá¯ážááŸá¯ááᯠá ááºážáááºáááºáᯠáá°ááá±á¬áºáááºáž linux-next áá¬áááœá²ááœáẠáá«áááºááẠááá±á¬áá°áá¬ážááŒá®ážááŒá áºáááºá áá¬ážááŸááºážá¡áá áºááẠáá¬áá±ážááŸá¯áááááá¬ážááŸááºážááᯠááœá±ážááœá±ážáá±á ááºá¡ááœááºáž ááŒá¯áá¯ááºáá²á·áá±á¬ ááŸááºáá»ááºáá»á¬ážááᯠáááºááŸá¬ážáá±ážáááºá Linus Torvalds ááẠááœá±ážááœá±ážááŸá¯ááœáẠáá«áááºáá²á·ááŒá®áž á¡áá»áá¯á·áá±á¬ áá áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá¯áá¹áááá±áááᯠááŒá±á¬ááºážáá²ááẠá¡ááá¯ááŒá¯áá¬ážáááºá
á¡ááá¯ááŒá¯áá¬ážáá±á¬ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááẠáááá¯ááºáá¬áá»á¬ážááŸáá·áº kernel module áá»á¬ážáááºáá®ážáááºá¡ááœáẠáá¯ááááá¬áá¬á áá¬ážá¡ááŒá ẠRust ááá¯á¡áá¯á¶ážááŒá¯ááẠááŒá áºááá¯ááºááŒá±á¬ááºáž áááááá«á Rust áá¶á·ááá¯ážááŸá¯ááᯠáá¯á¶áá±á¡á¬ážááŒáá·áº ááœáá·áºááá¬ážáá±á¬ ááœá±ážáá»ááºááŸá¯áá áºáá¯á¡áá±ááŒáá·áº áááºááŒáá¬ážááŒá®áž kernel á¡ááœáẠááá¯á¡ááºáá±á¬ áááºáá±á¬ááºááŸá¯ááŸá®ááá¯ááŸá¯áá áºáá¯á¡ááŒá ẠRust áá«áááºááŒááºážááᯠáááŒá áºáá±á«áºá á±áá«á áá¬ááºáá±á¬ááºážááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠRust ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº ááá·áºá¡á¬áž ááœááºáááºážááŒá®ážáá±á¬áẠááŸááºáá¬ááºáááºáá±á¬ááºááœáá·áºá null pointer dereferences ááŸáá·áº buffer overruns áá²á·ááá¯á·áá±á¬ ááŒá¿áá¬áá»á¬ážá០áááºážáá±ážááŒá®áž á¡áááºážáááºáᬠá¡á¬ážá áá¯ááºáá¯ááºááŒááºážááŒáá·áº ááá¯ááá¯áá±ážáááºážááŒá®áž ááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ áá¬ááºáá±á¬ááºážáá»á¬ážááᯠáááºáá®ážááá¯ááºáááºááŒá áºáááºá
ááá¯ážáá¬ážá á áºáá±ážááŒááºážá á¡áá¬ááá¹áá¯ááá¯ááºááá¯ááºááŸá¯ááá¯ááŒá±áá¬áá¶ááŒááºážááŸáá·áº á¡áá¬ááá¹áá¯áááºáááºáž (scope) ááá¯á·ááᯠá á¯á ááºážáá»áááºááœáẠRust ááœáẠMemory áá±ážáááºážáá±ážááᯠáá¶á·ááá¯ážáá±ážááá·áºá¡ááŒáẠáá¯ááºáá¯ááºáá±á¬ááºáá±á ááºá¡ááœááºáž áááºááá¯áá®áááºáá±á¬ááºááŸá¯á ááŸááºáááºááŸá¯ááᯠá¡áá²ááŒááºááŒááºážááŸáááá·áº áá±ážáá«áááºá Rust ááẠááááºážááŒáá·áºááŒáá·áºáá»áŸá¶ááŸá¯áá»á¬ážááᯠá¡áá¬á¡ááœááºáá±ážáááºá á¡áá¯á¶ážáááŒá¯áá® ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬áááºááá¯ážáá»á¬ážááᯠáááŒá áºááá±á áááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá á á¶áá áºáá»á áºááá¯ááºááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ á¡ááŸá¬ážáá»á¬ážááᯠááá¯ááºááœááºáááºá áá¯á¶áá±á¡á¬ážááŒáá·áº áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááá¯ážáá¬ážáá»ááºáá»á¬ážááŸáá·áº ááááºážááŸááºáá»á¬ážá ááá±á¬ááá¬ážááᯠáá»áá·áºáá¯á¶ážáááºá áá¯áá¹ááá¡ááŸá¬ážáá»á¬ážááᯠá¡áááºážáá¯á¶ážááŒá áºá á±ááẠááá¯ááºáá¯á¶áá±á¬á¡ááŒáááºá á¬ááá¯ááºááŒááºážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
Patches áá¬ážááŸááºážá¡áá áºááœáẠá¡áááá¬áá¯á¶ážááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž-
- áááºááá¯áá® ááœá²áá±ááŸá¯áá¯ááºááẠááŸááºáá¬ááºáááŸáááŒááºážáá²á·ááá¯á·áá±á¬ á¡ááŸá¬ážá¡ááœááºážáá»á¬áž áá±á«áºáá±á«ááºáá¬áá±á¬á¡áá«ááœáẠ"ááááºááá·áºá áá¬" á¡ááŒá±á¡áá±ááᯠáááºáá®ážááá¯ááºáá»á±ááŸááááºá áá»ááºááœááºááŸá¯áá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážááẠáá¯ááºááᯠááŒááºáááºááŒá¯ááŒááºáá±ážááá·áº Rust alloc áá áºáá»á áºááá¯ááºá áá°ááœá²áá áºáá¯áá«áááºáááºá ááá¯á·áá±á¬áº á¡áá¯á¶ážá áœááºáááºážááá¯ááºááŸá¬ kernel á¡ááœáẠááá¯á¡ááºáá±á¬á¡ááºá¹áá«áááºá¡á¬ážáá¯á¶ážááᯠalloc á áááºááá¯ááºáá±ááŸá¯ááá¯á· ááœáŸá²ááŒá±á¬ááºážáááºááŒá áºááẠ(á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒááºáááºááŒá®áž á á¶ááá¯á· ááœáŸá²ááŒá±á¬ááºážááŒá®ážááŒá áºáááºá áá¶áá»á±ážáááºá)á
- áá ááºáááºáá±á¬ááºááŸá¯áá»á¬ážá¡á á¬ážá áááºááẠááá¯á¡áá« áá®áá¬áá¯ááºáá±ááŸá¯áá»á¬ážááŸáá·áº rustc compiler ááááºááŒáááºáá±á¬áá¯ááºááœáŸááºááŸá¯áá»á¬ážááᯠRust áá¶á·ááá¯ážááŸá¯ááŒáá·áº kernel áá áºáá¯ááá¯á á¯á ááºážááá¯ááºáá«ááŒá®á áááºááŸáááœáẠrustc 1.54-beta1 ááᯠááá¯ážáá¬ážáá±ážááœá²á·ááŸá¯á¡ááŒá Ạá¡áá¯á¶ážááŒá¯áá±á¬áºáááºáž 1.54 áá¯ááºáá±ááŸá¯ááᯠááá¯ááºááœáẠáá¯ááºáá±ááŒá®ážáá±á¬ááºá áááºážááᯠááá¯ážáá¬ážáá±ážááœá²á·ááŸá¯á¡ááŒá Ạáá¶á·ááá¯ážáá±ážáááºááŒá áºáááºá
- Rust á¡ááœáẠá ᶠâ#[test]â áááºááœáŸááºážáá»ááºááᯠá¡áá¯á¶ážááŒá¯á á á¬áá±ážá á áºáá±ážááŸá¯áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŸáá·áº á á¬ááœááºá á¬áááºážá á áºáá±ážááŸá¯áá»á¬ážá¡ááœáẠdoctests áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºá áœááºážááᯠáááºáá±á¬ááºážááá·áºááœááºážáá¬ážáááºá
- ááááºá áá¶á·ááá¯ážáá±ážáá¬ážááá·áº x32_86 ááŸáá·áº ARM64 á¡ááŒáẠARM64 ááŸáá·áº RISCV áááá¯áá¬áá»á¬áž á¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºááá·áºáá¬ážáááºá
- GCC Rust (GCC frontend for Rust) ááŸáá·áº rustc_codegen_gcc (GCC á¡ááœáẠrustc backend) ááá¯á·ááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áº ááá¯á¡áá« á¡ááŒá±áá¶á á áºáá±ážááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡á±á¬ááºááŒááºááœá¬ážáá«ááŒá®á
- á¡áá®áá±á¬ááº-á¡áááºáá±á¬ááºáá áºáááºáá»á¬ážá ááá¯ážáá¬áž-áá±ááœááºááá·áºá¡áá¬áá»á¬ážá ááá¯ááºáá±á¬áºááŒáá»ááºáááºáá®ážááŸá¯á áá¯ááºáá±á¬ááºá áá¬áá»á¬ážá ááá¯ááºáá»á¬ážááŸáá·áº I/O vector áá»á¬ážáá²á·ááá¯á·áá±á¬ C ááœááºáá±ážáá¬ážáá±á¬ kernel ááá¹ááá¬ážáá»á¬ážá Rust áááá¯ááááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠabstraction á¡ááá·áºá¡áá áºááᯠá¡ááá¯ááŒá¯áá¬ážáááºá
- Driver ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž á¡á áááºá¡ááá¯ááºážáá»á¬ážááẠfile_operations moduleá module! macroá macro ááŸááºáá¯á¶áááºááŒááºážááŸáá·áº á¡ááŒá±áá¶áááá¯ááºáá¬áá»á¬áž (á á¯á¶á ááºážá á áºáá±ážááŒááºážááŸáá·áº áááºááŸá¬ážááŒááºáž) á¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá¬áá«áááºá
- Binder ááẠááŒááºáááºážááœá¬ážáá±á¬ ááá¯ááºáá±á¬áºááŒáá»ááºáá»á¬ážááŸáá·áº LSM áá»áááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
- Raspberry Pi áá¯ááºáá»á¬áž á áá¬á·ááºáá²áá»áááºáž áá¶áá«áẠáá»ááºááá±áᬠá¡ááœáẠRust driver á ááá¯ááᯠáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ á¥ááᬠbcm2835-rng ááᯠá¡ááá¯ááŒá¯áá¬ážáááºá
ááá¯á·á¡ááŒááºá kernel ááœáẠRust á¡áá¯á¶ážááŒá¯ááŸá¯ááŸáá·áºáááºáááºáá±á¬ á¡áá»áá¯á·áá±á¬áá¯áá¹ááá®áá»á¬ážá ááá±á¬áá»ááºáá»á¬ážááᯠáá±á¬áºááŒáá¬ážáá«áááºá
- Microsoft ááẠRust áá¶á·ááá¯ážááŸá¯á¡á¬áž Linux kernel ááœáẠáá±á«ááºážá ááºážááẠá¡áá¯ááºááœááºáá«áááºááẠá áááºáááºá á¬ážááŒá±á¬ááºáž áá±á¬áºááŒáá²á·ááŒá®áž áá¬ááá·áºááá»á¬ážá¡ááœááºáž Rust ááŸá Hyper-V á¡ááœáẠáá¬ááºáá±á¬ááºážá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááẠá¡áááºááá·áºááŒá áºáá±ááŒá®ááŒá áºáááºá
- ARM ááẠARM-based á áá áºáá»á¬ážá¡ááœáẠRust á¡áá±á¬ááºá¡áá¶á·ááᯠááŒáŸáá·áºáááºááẠáá¯ááºáá±á¬ááºáá±áááºá Rust ááá±á¬áá»ááºááẠ64-bit ARM á áá áºáá»á¬ážááᯠTier 1 ááááºáá±á¬ááºážááŒá áºá á±ááá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡ááá¯ááŒá¯áá¬ážááŒá®ážááŒá áºáááºá
- Google ááẠRust for Linux ááá±á¬áá»ááºá¡ááœáẠááá¯ááºááá¯ááºáá¶á·ááá¯ážááŸá¯áá±ážáááºá Rust ááŸá Binder á¡ááŒááºá¡ááŸááºáá¯ááºáá±á¬ááºááŸá¯áááºááœááºáá±ážááá¹ááá¬ážááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡áá áºááᯠáááºáá®ážáá±ááŒá®áž Rust ááœáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬áááá¯ááºáá¬áá»á¬ážááᯠááŒááºáááºáá¯ááºáá±á¬ááºááá¯ááºááŒá±ááᯠá ááºážá á¬ážáá±áááºá ISRG (Internet Security Research Group) ááŸáááá·áº Google ááẠRust á¡áá±á¬ááºá¡áá¶á·ááᯠLinux kernel ááœáẠáá±á«ááºážá ááºážááẠá¡áá¯ááºá¡ááœáẠáááºáá¯á¶ááœá± áá¶á·ááá¯ážáá±ážáá«áááºá
- IBM ááẠPowerPC á áá áºáá»á¬ážá¡ááœáẠRust á¡ááœáẠkernel áá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá
- LSE (Systems Research Laboratory) áá¬ááºááœá²áááºážááẠRust ááœáẠSPI driver ááᯠáá®ááœááºáá²á·áááºá
source: opennet.ru