Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Packj, ΠΊΠΎΡΡΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Ρ ΡΠΈΡΠΊΠΎΠ²ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π° Π΄Π΅ΠΉΠ½ΠΎΡΡ ΠΈΠ»ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π°ΡΠ°ΠΊΠΈ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Π²ΡΠΏΡΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ (βΠ²Π΅ΡΠΈΠ³Π° Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠΈβ). ΠΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π½Π° Π΅Π·ΠΈΡΠΈΡΠ΅ Python ΠΈ JavaScript, Ρ ΠΎΡΡΠ²Π°Π½ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈΡΠ΅ PyPi ΠΈ NPM (ΡΠ΅ ΡΡΡΠΎ ΠΏΠ»Π°Π½ΠΈΡΠ°Ρ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Ruby ΠΈ RubyGems ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠ΅Ρ). ΠΠΎΠ΄ΡΡ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Python ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° AGPLv3.
ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° 330 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° PyPi Π±ΡΡ Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ 42 Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΡΡ Π·Π°Π΄Π½ΠΈ Π²ΡΠ°ΡΠΈΡΠΊΠΈ ΠΈ 2.4 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΡΠΈΡΠΊΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΊΠΎΠ΄Π°, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° API ΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, ΠΎΡΠ±Π΅Π»ΡΠ·Π°Π½ΠΈ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π½Π° OSV. ΠΠ°ΠΊΠ΅ΡΡΡ MalOSS ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° API. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΠΏΠΈΡΠ½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² Π·Π»ΠΎΠ²ΡΠ΅Π΄Π΅Π½ ΡΠΎΡΡΡΠ΅Ρ. Π¨Π°Π±Π»ΠΎΠ½ΠΈΡΠ΅ ΡΠ° ΠΈΠ·Π³ΠΎΡΠ²Π΅Π½ΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΡΠΎΡΡΠ²Π°Π½Π΅ Π½Π° 651 ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ.
Π’ΠΎΠΉ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΈ ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΠΎΠ΄ΡΡ Π΄ΠΎ ΠΏΠΎΠ²ΠΈΡΠ΅Π½ ΡΠΈΡΠΊ ΠΎΡ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π°, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΡΡΠ΅Π· βevalβ ΠΈΠ»ΠΈ βexecβ, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ² ΠΊΠΎΠ΄ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΡΡΡΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°, Π½Π΅ΡΠ΅Π»Π΅Π²ΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π² ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ (setup.py), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° typequatting (ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠΌΠ΅Π½Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ), ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ ΠΈ ΠΈΠ·ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΏΠΎΡΠΎΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΠΈΠΌΠ΅ΠΉΠ»ΠΈ ΠΈ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅, Π»ΠΈΠΏΡΠ° Π½Π° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Ρ ΠΊΠΎΠ΄.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΠ΅Ρ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° PyPi, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° ΠΊΡΠΌ Π²ΡΠ½ΡΠ΅Π½ ΡΡΡΠ²ΡΡ Ρ ΠΎΡΠ°ΠΊΠ²Π°Π½Π΅ Π΄Π° ΠΎΡΠΊΡΠ°Π΄Π½Π°Ρ ΡΠΎΠΊΠ΅Π½ΠΈ Π·Π° AWS ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ: loglib-ΠΌΠΎΠ΄ΡΠ»ΠΈ (ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ ΠΊΠ°ΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π° Π»Π΅Π³ΠΈΡΠΈΠΌΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° loglib), pyg-modules, pygrata ΠΈ pygrata-utils (ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ ΠΊΡΠΌ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° pyg) ΠΈ hkg-sol-utils.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru