เบเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป„เบ”เป€เบงเบตเบ—เบตเปˆเบ›เบญเบ”เป„เบžเบชเปเบฒเบฅเบฑเบš Linux kernel เปƒเบ™ Rust

Josh Triplett, เบœเบนเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ Intel เปเบฅเบฐเบขเบนเปˆเปƒเบ™เบ„เบฐเบ™เบฐเบเปเบฒเบกเบฐเบเบฒเบ™เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เปเบเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Crates.io, เป€เบงเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบชเบธเบ”เบเบญเบ”เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบต Open Source. เปเบ™เบฐ เบ™เบณ เบเบธเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบเป€เบžเบทเปˆเบญเปเบ™เปƒเบชเปˆเบ™เปเบฒเป€เบญเบปเบฒเบžเบฒเบชเบฒ Rust เป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบชเบฐเป€เบซเบกเบตเบžเบฒเบšเบเบฑเบšเบžเบฒเบชเบฒ C เปƒเบ™เบ‚เบปเบ‡เป€เบ‚เบ”เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบฅเบฐเบšเบปเบš.

เปƒเบ™เบเบธเปˆเบกเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Rust, เบฎเปˆเบงเบกเบเบฑเบšเบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบˆเบฒเบ Intel, เบˆเบฐเบเบฐเบเบฝเบกเบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ Rust เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบฅเบฐเบšเบปเบš. เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบฅเบฐเบšเบปเบšเบกเบฑเบเบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปเปˆเบฒ, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ—เบตเปˆเบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เปเบฅเบฐเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบต. เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเป‰เบงเบชเปเบฒเบฅเบฑเบš Rust, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเบŠเบทเปˆ, เบชเบฐเบซเบฐเบžเบฑเบ™, เบเบฒเบ™เปƒเบชเปˆเบžเบฒเบชเบฒเบ›เบฐเบเบญเบš (macro "asm!") เปเบฅเบฐเบฎเบนเบšเปเบšเบšเบ•เบปเบงเป€เบฅเบเบˆเบธเบ”เบฅเบญเบ BFLOAT16 เปเบกเปˆเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™.

Josh เป€เบŠเบทเปˆเบญเบงเปˆเบฒเบญเบฐเบ™เบฒเบ„เบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบฅเบฐเบšเบปเบšเป€เบ›เบฑเบ™เบ‚เบญเบ‡ Rust, เปเบฅเบฐเบžเบฒเบชเบฒ C เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบเปเบฒเบฅเบฑเบ‡เบญเป‰เบฒเบ‡เป€เบญเบปเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปƒเบ™เบ›เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡เป‚เบ”เบเบชเบฐเบžเบฒ. เบ‚เบฑเบ”
เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เป€เบ—เบปเบฒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฒเบเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบžเบฒเบชเบฒ C เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เปˆเปเบฒ, เปเบ•เปˆเบเบฑเบ‡เปƒเบซเป‰เป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบšเบšเปเบœเบ™เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก.

เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ เบเบฒเบ™เบชเบฐเปเบ”เบ‡
Josh เบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเปƒเบ™ Linux kernel เปƒเบ™เบžเบฒเบชเบฒ Rust, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป€เบงเบตเบ—เบตเปˆเบ›เบญเบ”เป„เบžเปเบฅเบฐเบ”เบตเบเบงเปˆเบฒเป€เบเบปเปˆเบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”, เบšเปเปˆเป€เบชเบเบ„เปˆเบฒเบˆเบฒเบเบšเบฑเบ™เบซเบฒเป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบง, null เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ•เบปเบงเบŠเบตเป‰ เปเบฅเบฐ buffer overruns.

Greg Kroah-Hartman, เบœเบนเป‰เบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเปƒเบ™เบเบฒเบ™เบฎเบฑเบเบชเบฒเบชเบฒเบ‚เบฒเบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ‚เบญเบ‡ Linux kernel, เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบ„เบงเบฒเบกเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเปƒเบ™เบžเบฒเบชเบฒ Rust เบเบฑเบš kernel เบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบ•เปเปˆ C, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฑเบ™เบˆเบฐเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž. เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เปƒเบ™เป„เบฅเบเบฐ Kernel API. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, Greg เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบญเบšเบ™เบตเป‰เบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰ Rust เป€เบ›เบฑเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบเบฑเบšเปเบเปˆเบ™.

เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบ—เบตเบกเบ‡เบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ™เบตเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฒเบเบšเปเบฅเบดเบชเบฑเบ” "เบ›เบฒเปƒเบ™เบ–เบฑเบ‡" เบเบฐเบเบฝเบก เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป‚เบซเบผเบ”เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบš Linux kernel เปƒเบ™เบžเบฒเบชเบฒ Rust, เบ™เปเบฒเปƒเบŠเป‰เบŠเบธเบ”เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡ kernel เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž. เบŠเบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป„เบŸเบฅเปŒเบชเปˆเบงเบ™เบซเบปเบง kernel เบ—เบตเปˆเบกเบตเบขเบนเปˆเป‚เบ”เบเปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ” เบœเบนเบเบกเบฑเบ”. Clang เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบฑเป‰เบ™. เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบ interlayers, เป‚เบกเบ”เบนเบ™เบ›เบฐเบเบญเบšเปƒเบŠเป‰เบŠเบธเบ” staticlib.

เบ‚เบฐ เปœเบฒเบ™ เบเบณ เบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ เป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™เป„เบ”เป‰เบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฑเบ‡เบ•เบปเบงเปเบฅเบฐเบญเบธเบ›เบฐเบเบญเบ™ IoT, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เปƒเบŠเป‰ bindgen เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบฑเป‰เบ™เบ•เปˆเบฒเบ‡เป†เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป„เบŸเบฅเปŒเบซเบปเบงเบ‚เบญเบ‡เปเบเปˆเบ™. เบเบญเบšเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เป„เบ”เป€เบงเบตเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ kernel - เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเป‚เบ”เบ”เบ”เปˆเบฝเบงเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เบ‚เบฑเบšเปƒเบ™ kernel, เบกเบฑเบ™เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบชเบฐเบเบฑเบ”เบšเบฑเบ™เบซเบฒเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบชเบฒ Rust เบ—เบตเปˆเบ›เบญเบ”เป„เบžเบเบงเปˆเบฒ. เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เบœเบฐเบฅเบดเบ”เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเบœเบนเป‰เบ‚เบฑเบšเบ‚เบตเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบขเปˆเบฒเบ‡เบฎเบตเบšเบ”เปˆเบงเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก.

เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ—เบตเปˆเบ•เบฑเป‰เบ‡เป„เบงเป‰เบ—เบฑเบ‡เปเบปเบ”เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ—เบทเปˆเบญ, เปเบ•เปˆเบเบญเบšเปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ เปเบฅเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เป„เบ”เป€เบงเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบš LAN9512 USB Ethernet controller เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบ™เบเบฐเบ”เบฒเบ™ Raspberry Pi 3. เป„เบ”เป€เบงเบต smsc95xx เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบ‚เบฝเบ™เป‚เบ”เบเปƒเบ™ เบžเบฒเบชเบฒ C. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เปเบฅเบฐ overhead เบˆเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบš runtime เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเปƒเบ™ Rust เปเบกเปˆเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบเบญเบšเบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบˆเปเบฒเบเบฑเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™