ΠΡΠΈΡΡΠΎΡ Π₯Π΅Π»Π²ΠΈΠ³ (Christoph Hellwig) Π½Π°ΠΏΡΡΠ½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ dma-mapping ΠΈ configfs. Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ Π² ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈΡΠ΅ ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΡΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΠΈ. Π ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° dma-mapping ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ ΠΠ°ΡΠ΅ΠΊ Π¨ΠΈΠΏΡΠΎΠ²ΡΠΊΠΈ (Marek Szyprowski) ΠΎΡ Samsung, Π° Π² configfs β ΠΠΆΠΎΡΠ» ΠΠ΅ΠΊΠΊΠ΅Ρ (Joel Becker) ΠΎΡ Oracle.
ΠΡΠΈΡΡΠΎΡ Π₯Π΅Π»Π²ΠΈΠ³ Π·Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΎΡΡΠ°Π²Π° Π² ΡΠΏΠΈΡΡΠΊΠ° Π½Π° ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ NVM Express, vmalloc ΠΈ FreeVXFS. Π ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ ΠΡΠΈΡΡΠΎΡ Π΅ ΡΠ»Π΅Π½ΡΠ²Π°Π» Π² ΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Π½ΠΈΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠΌΠΈΡΠ΅Ρ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° Linux Foundation ΠΈ Π΅ ΡΡΠ°ΡΡΠ²Π°Π» Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΊΠ°ΡΠΎ XFS, KVM, Trace events, SCSI ΠΈ Slab Allocator, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΠ» Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° PowerPC Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΡΠΈΡΡΠΎΡ Π΅ Π±ΠΈΠ» ΠΈΡΠ΅Ρ Π² ΡΡΠ΄Π΅Π±Π΅Π½ ΠΈΡΠΊ ΡΡΠ΅ΡΡ VMware, ΡΠ²ΡΡΠ·Π°Π½ Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π»ΠΈΡΠ΅Π½Π·Π° GPL.
ΠΡΠΈΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ dma-mapping ΠΈ configfs Π΅ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π΅Π½ΠΎ ΠΎΡ ΠΈΠ·ΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΠΈΠ½ΡΡ Π’ΠΎΡΠ²Π°Π»Π΄Ρ Π·Π° Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π° Π² ΡΠ΄ΡΠΎΡΠΎ ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΡΠ³Π»Π°ΡΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅, Π·Π° ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅Π·ΠΈ ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ. ΠΡΠ΅Π· ΡΠ½ΡΠ°ΡΠΈ ΠΡΠΈΡΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ½ΠΎ ΠΎΡΠΊΠ°Π·Π° Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ΅ Rust-ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π°Π΄ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ DMA, ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΄ΡΠΎΡΠΎ Π½Π°ΠΏΡΡΠ½Π°Ρ Π° ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Nouveau ΠΈ ARM/Apple. ΠΠ° 24 ΡΠ΅Π²ΡΡΠ°ΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Rust for Linux ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡ Π° ΠΏΠ°ΡΡ ΡΡΡ ΡΠ»ΠΎΠΉ Π½Π° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π·Π° FS configfs, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΡΡΠΎ Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π» ΠΡΠΈΡΡΠΎΡ Π₯Π΅Π»Π²ΠΈΠ³. ΠΡΠΈΡΡΠΎΡ Π½Π΅ ΡΡΠ°ΡΡΠ²Π° Π² Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π½ΠΎΠ²Π°ΡΠ° Rust-ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π·Π° ΡΠ²ΠΎΡΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄Π½ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π° ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° Π½Π° ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π° dma-mapping ΠΈ configfs.
ΠΡΠΈΡΡΠΎΡ Π₯Π΅Π»Π²ΠΈΠ³ ΡΡΠΈΡΠ°, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈ Π΅Π·ΠΈΠΊΠ° Π² ΡΠΎΠ»ΠΊΠΎΠ²Π° ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux Π΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ. Π‘ΠΏΠΎΡΠ΅Π΄ ΠΡΠΈΡΡΠΎΡ, ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΡΠ°Π²ΡΡ ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΊΠΎΠ΄ Π½Π° Π΄ΡΡΠ³ Π΅Π·ΠΈΠΊ. Π ΡΠ°ΡΡΠ½ΠΎΡΡ, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π½Π° Rust, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° C, ΡΡΡΠ±Π²Π° Π΄Π° Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π²Π»ΠΈΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΡΡΡ Ρ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈΡΠ΅. ΠΡΡΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° C ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈΡΠ΅, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²Π»ΠΈΡΡΡ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈΡΠ΅, Π² ΠΊΠΎΠ΄Π° Π½Π° C ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Ρ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Ρ Ρ ΠΊΠΎΠ΄Π° Π½Π° Rust.
Π ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΡΠ°ΠΊΡΠΈ Π·Π° ΠΎΡΡ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° pull-Π·Π°ΡΠ²ΠΊΠΈ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡΠΈΠ² ΠΏΡΠΈ ΠΎΠΏΠΈΡ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Rust. Π‘ΡΠΈΠ²ΡΡ Π²ΡΠ·Π½ΠΈΠΊΠ½Π° Π·Π°ΡΠ°Π΄ΠΈ Π½Π΅ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΎΡΡ Ρ ΠΊΠΎΠ΄Π° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Rust-ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ (bindgen) ΠΈ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡΠΎΠ²Π°, ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈ Π½Π°ΠΏΡΠ΅Π΄Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΡΠΎ, Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° C ΠΊΠΎΠ΄Π° ΠΈ ΡΠ°ΠΌΠΎΡΠΎ ΡΠ΄ΡΠΎ, ΡΠ΅ ΠΎΠΊΠ°Π·Π°Ρ Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΎΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π΅Π½ Π²ΡΠ½ΡΠ΅Π½ ΠΊΠΎΠ΄ Π² ΡΠ΄ΡΠΎΡΠΎ, Π·Π° ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π΄ΡΡΠ³ΠΈ Ρ ΠΎΡΠ°.
ΠΠΈΠ½ΡΡ Π’ΠΎΡΠ²Π°Π»Π΄Ρ ΡΠΌΡΡΠ°, ΡΠ΅ ΠΡΠΈΡΡΠΎΡ Π₯Π΅Π»Π²ΠΈΠ³ Π½ΡΠΌΠ° ΠΏΡΠ°Π²ΠΎΠΌΠΎΡΠΈΡ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ° ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° Rust-ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π·Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° DMA, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ΡΡ Π½Π° ΡΠ΅Π·ΠΈ ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π½Π΅ Π·Π°ΡΡΠ³Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° DMA Mapping ΠΈ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π² ΠΎΡΠ΄Π΅Π»Π½Π° ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π·Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³ΡΠΈΠΆΠΈ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠΈΠ½ΡΡ ΡΡΠ°Π²Π½ΡΠ²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° ΠΡΠΈΡΡΠΎΡ Ρ ΠΎΠΏΠΈΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° DMA, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ ΡΠ°ΠΌΠΎ Π·Π° ΠΊΠΎΠ΄Π° Π½Π° ΡΠ²ΠΎΡΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°, Π° Π½Π΅ Π·Π° Π½Π°ΡΠΈΠ½Π° ΠΈ Ρ
ΠΎΡΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π½ΡΠΊΠΎΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ, Π½ΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° Π½Π°ΠΌΠ΅ΡΠ° Π² ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
