เบชเบฐเบšเบฑเบšเบ—เบตเบซเป‰เบฒเบ‚เบญเบ‡ patches เบชเปเบฒเบฅเบฑเบš Linux kernel เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบชเบฒ Rust

Miguel Ojeda, เบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ Rust-for-Linux, เป„เบ”เป‰เบชเบฐเป€เบซเบ™เบตเบชเบฐเบšเบฑเบšเบ—เบตเบซเป‰เบฒเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเบญเบธเบ›เบฐเบเบญเบ™เปƒเบ™เบžเบฒเบชเบฒ Rust เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Linux kernel. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เปเบกเปˆเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡, เปเบ•เปˆเป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบชเบฒเบ‚เบฒเบ•เปเปˆเป„เบ›เบ‚เบญเบ‡ linux เปเบฅเบฐเป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเปˆเบฒเบ‡เบžเบฝเบ‡เบžเปเป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบŠเบฑเป‰เบ™ abstraction เบซเบผเบฒเบเบเบงเปˆเบฒเบฅเบฐเบšเบปเบšเบเปˆเบญเบ kernel, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป„เบ”เป€เบงเบตเปเบฅเบฐเป‚เบกเบ”เบนเบ™. เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบถเบ™เบˆเบฒเบ Google เปเบฅเบฐ ISRG (เบเบธเปˆเบกเบ„เบปเป‰เบ™เบ„เป‰เบงเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”), เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบœเบนเป‰เบเปเปˆเบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™ Let's Encrypt เปเบฅเบฐเบชเบปเปˆเบ‡เป€เบชเบตเบก HTTPS เปเบฅเบฐเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”.

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

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

เบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡ patches เบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบฅเบปเบšเบฅเป‰เบฒเบ‡เบ„เปเบฒเป€เบซเบฑเบ™เบ—เบตเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบ—เปเบฒเบญเบดเบ”, เบ—เบตเบชเบญเบ‡, เบ—เบตเบชเบฒเบกเปเบฅเบฐเบชเบตเปˆเบ‚เบญเบ‡ patches. เปƒเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹:

  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ bot เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Intel 0DAY/LKP เปเบฅเบฐเบเบฒเบ™เบžเบดเบกเป€เบœเบตเบเปเบœเปˆเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบเบฐเบเบฝเบกเบ—เบตเปˆเบˆเบฐเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” KernelCI. เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ GitHub CI เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบšเบฑเบ™เบˆเบธ.
  • เป‚เบกเบ”เบนเบ™เปเบเปˆเบ™ Rust เป„เบ”เป‰เบ–เบทเบเบ›เบปเบ”เบ›เปˆเบญเบเบˆเบฒเบเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ crate โ€œ#![no_std]โ€ เปเบฅเบฐ โ€œ#![feature(โ€ฆ)]โ€.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบเบฒเบ™เบ›เบฐเบเบญเบšเบ”เบฝเบง (.o, .s, .ll เปเบฅเบฐ .i).
  • เบ‚เปเป‰เปเบ™เบฐเบ™เปเบฒเบฅเบฐเบซเบฑเบ”เบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเบเบ„เปเบฒเป€เบซเบฑเบ™ (โ€œ//โ€) เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เป€เบญเบเบฐเบชเบฒเบ™ (โ€œ///โ€).
  • เบชเบฐเบ„เบฃเบดเบš is_rust_module.sh เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบ„เบทเบ™เปƒเปเปˆเปเบฅเป‰เบง.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ synchronization static (global sharevariable) primitives เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” "CONFIG_CONSTRUCTORS".
  • เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡ Lock เปเบกเปˆเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹: เบเบญเบ‡โ€‹เปเบฅเบฐ GuardMut เปเบกเปˆเบ™โ€‹เบฅเบงเบกโ€‹เปเบฅเบฐโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ›เบฐโ€‹เป€เบžเบ” parameterizedโ€‹.
  • เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบญเบธเบ›เบฐเบเบญเบ™.
  • เป€เบžเบตเปˆเบก "RwSemaphore" abstraction, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™ wrapper เปƒเบ™เป„เบฅเบเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡ C rw_semaphore.
  • เป€เบžเบทเปˆเบญเปƒเบŠเป‰ mmap, เป‚เบกเบ”เบนเบ™ mm เปƒเปเปˆ เปเบฅเบฐ VMA abstraction เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก (wrapper เบขเบนเปˆเป€เบ—เบดเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ vm_area_struct).
  • เป„เบ”เป€เบงเบต GPIO PL061 เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เป„เบ›เปƒเบŠเป‰ โ€œdev_*!โ€ macro.
  • เบเบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

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

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