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

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

เปƒเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹:

  • เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบฅเบฐเบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบˆเบฑเบ”เบชเบฑเบ™, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบชเบฐเบ–เบฒเบ™เบฐ "เบ•เบปเบเปƒเบˆ" เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เป€เบกเบทเปˆเบญเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™, เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบ Rust 1.62. เป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบเบฑเบšเบฎเบธเปˆเบ™เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™, เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบท Rust เป„เบ”เป‰เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฐเบ–เบฝเบ™เบฅเบฐเบžเบฒเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ const_fn_trait_bound เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ kernel patches.
  • เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ–เบทเบเปเบเบเบญเบญเบเป€เบ›เบฑเบ™เบŠเบธเบ” crate เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ "bindings", เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‡เปˆเบฒเบเบ”เบฒเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบเบฑเบšเบŠเบธเบ”เบ•เบปเป‰เบ™เบ•เป "kernel".
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฐเบซเบฒเบžเบฒเบ "concat_idents!" เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ macro เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบšเปเปˆเบ•เบดเบ”เบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ concat_idents เปเบฅเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ•เบปเบงเปเบ›เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.
  • เบกเบฐเบซเบฒเบžเบฒเบ "static_assert!" เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆ, เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปƒเบŠเป‰ "core:: assert!()" เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เปƒเบ”เบ™เบถเปˆเบ‡เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆ.
  • Macro "build_error!" เบ›เบฑเบšโ€‹เปƒเบซเป‰โ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบฎเบนเบšโ€‹เปเบšเบš โ€œRUST_BUILD_ASSERT_{WARN, ALLOW}โ€ เบ–เบทเบโ€‹เบ•เบฑเป‰เบ‡โ€‹เป„เบงเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป‚เบกโ€‹เบ”เบนเบ™โ€‹.
  • เป€เบžเบตเปˆเบกเป„เบŸเบฅเปŒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ โ€œkernel/configs/rust.configโ€.
  • เป„เบŸเบฅเปŒ โ€œ*.iโ€ เบ—เบตเปˆเบ›เบฐเบกเบงเบ™เบœเบปเบ™เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบกเบฐเบซเบฒเบžเบฒเบเป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เบŠเบทเปˆเป€เบ›เบฑเบ™ โ€œ*.rsiโ€.
  • เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบš Rust เบ—เบตเปˆเบกเบตเบฅเบฐเบ”เบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบ—เบตเปˆเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ” C เป„เบ”เป‰เบ–เบทเบเบขเบธเบ”เป€เบŠเบปเบฒ.
  • เป€เบžเบตเปˆเบกเป‚เบกเบ”เบนเบ™ fs, เป€เบŠเบดเปˆเบ‡เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ Rust เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰.
  • เป€เบžเบตเปˆเบกเป‚เบกเบ”เบนเบ™ workqueue เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเปเบ–เบงเบฅเบฐเบšเบปเบš (เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เปƒเบ™เป„เบฅเบเบฐ work_struct เปเบฅเบฐ workqueue_struct kernel เป‚เบ„เบ‡เบชเป‰เบฒเบ‡).
  • เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™ kasync เบชเบทเบšเบ•เปเปˆเบ”เป‰เบงเบเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก asynchronous (async). เป€เบžเบตเปˆเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ TCP เบฅเบฐเบ”เบฑเบšเบซเบผเบฑเบเบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ Rust.
  • เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปƒเบ™เบžเบฒเบชเบฒ Rust เป‚เบ”เบเปƒเบŠเป‰เบ›เบฐเป€เบžเบ” [Threaded]Handler เปเบฅเบฐ [Threaded]Registration`.
  • เป€เบžเบตเปˆเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ macro "#[vtable]" เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบ•เบปเบงเบŠเบตเป‰เบŸเบฑเบ‡เบŠเบฑเบ™, เป€เบŠเบฑเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ file_operations.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบšเบšเบชเบญเบ‡เบ—เบดเบ”เบ—เบฒเบ‡ "unsafe_list::List".
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš RCU (Read-copy-update) เปเบฅเบฐเบ›เบฐเป€เบžเบ” Guard เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เบญเปˆเบฒเบ™ lock เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบเบฐเบ—เบนเป‰เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.
  • เป€เบžเบตเปˆเบกเปœเป‰เบฒเบงเบฝเบ::spawn() เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ เปเบฅเบฐเป€เบฅเบตเปˆเบกเบเบฐเบ—เบนเป‰ kernel เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰เบเบฑเบ‡เป„เบ”เป‰เป€เบžเบตเปˆเบกเบงเบดเบ—เบตเบเบฒเบ™ Task::wake_up() .
  • เป€เบžเบตเปˆเบกเป‚เบกเบ”เบนเบ™เบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒ (wrapper over msleep()).

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

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

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

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