ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈΠ· Π‘ΡΠ΅Π½Π΄ΡΠΎΡΠ΄ΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, ΠΠ°Π»ΠΈΡΠΎΡΠ½ΠΈΠΉΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° Π² Π‘Π°Π½-ΠΠΈΠ΅Π³ΠΎ ΠΈ Π’Π΅Ρ
Π°ΡΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° Π² ΠΡΡΠΈΠ½Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ RLBox, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ
ΡΡΠ½ΠΊΡΠΈΠΉ. RLBox Π½Π°ΡΠ΅Π»Π΅Π½ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΡ Π½Π΅Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ
Π΄ΠΎΠ²Π΅ΡΠΈΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ, Π½ΠΎ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π² ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠ³ΡΡ ΡΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Mozilla ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ RLBox Π² Linux-ΡΠ±ΠΎΡΠΊΠ°Ρ
Firefox 74 ΠΈ macOS-ΡΠ±ΠΎΡΠΊΠ°Ρ
Firefox 75 Π΄Π»Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Graphite, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅ΠΉ Π·Π° ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠΈΡΡΠΎΠ². ΠΡΠΈ ΡΡΠΎΠΌ RLBox Π½Π΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π΄Π»Ρ Firefox ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π»ΡΠ±ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
. ΠΠ°ΡΠ°Π±ΠΎΡΠΊΠΈ RLBox ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ RLBox ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ
Linux ΠΈ macOS, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Windows ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.
ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΡ RLBox ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ C/C++ ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ΄ WebAssembly, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΠΎΡΠΎΡΠΌΠ»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ WebAssembly-ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π΄Π°ΡΡΡΡ Π² ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΡΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΡΠΎΠΊ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΊΡΡΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΠΎΠΊΠ΅Ρ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»). ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° C/C++ Π² WebAssembly ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ wasi-sdk.
ΠΠ»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ WebAssembly-ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Lucet ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ «Π½Π°Π½ΠΎΠΏΡΠΎΡΠ΅ΡΡΠ΅», ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Lucet ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄Π΅, ΡΡΠΎ ΠΈ JIT-Π΄Π²ΠΈΠΆΠΎΠΊ Cranelift, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ Π² Firefox Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ WebAssembly.
Π‘ΠΎΠ±ΡΠ°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ. Π ΡΠ»ΡΡΠ°Π΅ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π°ΡΠ°ΠΊΡΡΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΈ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ API, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ. WebAssembly-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠΎΡΡΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π½ΠΈΠΌΠΈ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠ±ΡΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠΎΡΠΌΠ΅ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π»ΠΈΡΡ ΠΏΡΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ Π΄Π°Π½Π½ΡΡ
Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ). Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π½ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ
ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΡ invoke_sandbox_function().
Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π΅ΡΠ»ΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° register_callback (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ RLBox ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ). ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ (memory safety) ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ
.
Π‘ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ Π½Π΅Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ Π΄ΠΎΠ²Π΅ΡΠΈΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ tainted-ΠΌΠ΅ΡΠΎΠΊ ΠΈ Π΄Π»Ρ «ΠΎΡΠΈΡΡΠΊΠΈ» ΡΡΠ΅Π±ΡΡΡ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΅Π· ΠΎΡΠΈΡΡΠΊΠΈ, ΠΏΠΎΠΏΡΡΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ tainted-Π΄Π°Π½Π½ΡΡ
Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, ΡΡΠ΅Π±ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
(ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ) ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ΅Π±ΠΎΠ»ΡΡΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΏΠ°ΠΌΡΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΡ
Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΏΠ°ΠΌΡΡΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΡΠΌΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ «sandbox-reference».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru