Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Python-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² PyPI (Python Package Index) ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΈΡΡΠΎΠ²ΠΎΠΉ Π°ΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΡΠ»Π° Π½Π° ΡΠΌΠ΅Π½Ρ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ PGP-ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ. ΠΠ»ΡΡΠ΅Π²ΡΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ Π°ΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π·Π°Π²Π΅ΡΡΠ΅ΡΡΡ Π½Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ, Π° ΡΡΠ΅ΡΡΠΈΠΌ Π»ΠΈΡΠΎΠΌ (ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²) ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° OpenID Connect (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΡΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΎΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΡΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ Ρ Π½ΠΈΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ Π½Π° GitHub ΠΈΠ»ΠΈ GitLab).
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°ΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΡΡΡΡΠ°Π½ΡΠ΅Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ, ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎ PGP-ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π½Π΅Π΅ Π±ΡΠ» ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π² PyPI ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ. ΠΠ°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΡΠΎ ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΎΡΠΊΡΡΡΡΡ PGP-ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ — ΠΈΠ· 1069 PGP-ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ Ρ 2020 Π³ΠΎΠ΄Π° Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ Π² PyPI, 29% ΠΎΡΠΊΡΡΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π½Π° ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ ΠΊΠ»ΡΡΠ΅ΠΉ, Π° 35% ΠΊΠ»ΡΡΠ΅ΠΉ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π² Ρ ΠΎΠ΄Π΅ Π°ΡΠ΄ΠΈΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄ΡΠ½Π½ΡΠ΅ 36% PGP-ΠΊΠ»ΡΡΠ΅ΠΉ ΠΎΡ Π²Π°ΡΡΠ²Π°Π»ΠΈ Π»ΠΈΡΡ 0.3% ΠΎΡ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
Π Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ Π·Π°Π²Π΅ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠΎΠΆΠΈΠ²ΡΡΠΈΡ ΡΡΠ΅ΠΌΠ΅ΡΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΠΉ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄ΡΠ½Π½ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°ΠΌΠΈ OpenID Connect. Π ΠΌΠΎΠΌΠ΅Π½Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΡΠ΅Π±Ρ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° OpenID, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ Π΅Π³ΠΎ ΡΠ²ΡΠ·Ρ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ. ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ Π°ΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Sigstore ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ in-toto Attestation Framework.
ΠΠ· Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ² Π°ΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ PGP-ΠΊΠ»ΡΡΠ°ΠΌ — ΡΡΠ΅ΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΡΠ°Π·ΡΡΡΠ°Π΅Ρ Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ ΠΊ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ Π½Π° Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΈ Π°ΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ΅ ΠΊ ΡΠΎΠΊΠ΅Π½Ρ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡΠ΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ ΡΠ²ΡΠ·Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ Ρ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π· GitHub Action, Π°ΡΡΠ΅ΡΡΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌΡΡ ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄ΡΠ½Π½ΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌΡΠΌ Π² PyPI ΡΠ°ΠΉΠ»ΠΎΠΌ, ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ, workflow-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΈ Ρ ΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠ»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΎΡΠΌΠΈΡΡΡΡΠΈΠΉ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ PyPI ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π»ΠΎΠ³, Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ ΠΈ Π·Π°ΡΠΈΡΡ ΠΎΡ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π·Π°Π΄Π½ΠΈΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° ΡΡΡΡΠΊΡΡΡΠ° «Π΄Π΅ΡΠ΅Π²ΠΎ ΠΠ΅ΡΠΊΠ»Π°» (Merkle Tree, ΠΊΠ°ΠΆΠ΄Π°Ρ Π²Π΅ΡΠΊΠ° Π²Π΅ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅ Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΠΈΠ΅ Π²Π΅ΡΠΊΠΈ ΠΈ ΡΠ·Π»Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΌΡ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π²ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ PyPI Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° «fabrice», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°ΠΉΠΏΡΠΊΠ²ΠΎΡΠΈΠ½Π³Π° (Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ ΠΎΠΆΠΈΡ ΠΈΠΌΡΠ½, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΡ ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, exampl Π²ΠΌΠ΅ΡΡΠΎ example, djangoo Π²ΠΌΠ΅ΡΡΠΎ django, pyhton Π²ΠΌΠ΅ΡΡΠΎ python ΠΈ Ρ.ΠΏ.) ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π»ΡΡ ΠΏΠΎΠ΄ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ «fabric», Π½Π°ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ 201 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π·Π°Π³ΡΡΠ·ΠΎΠΊ (7 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π·Π°Π³ΡΡΠ·ΠΎΠΊ Π·Π° ΠΏΡΠΎΡΠ»ΡΠΉ ΠΌΠ΅ΡΡΡ). ΠΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡΡΠ°Π²Π°Π»ΡΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ Ρ 2021 Π³ΠΎΠ΄Π° ΠΈ Ρ ΡΠ΅Ρ ΠΏΠΎΡ Π±ΡΠ» Π·Π°Π³ΡΡΠΆΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ 37 ΡΡΡΡΡ ΡΠ°Π·.
ΠΠ°ΠΊΠ΅Ρ «fabrice» ΠΏΠΎΠ²ΡΠΎΡΡΠ» Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π» ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΡ
Ρ
ΠΎΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ AWS (Amazon Web Services), ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±ΡΠΊΠ΄ΠΎΡΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ
ΡΠΊΡΠΈΠΏΡΠΎΠ². ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡ Π² Linux ΠΈ Windows. Π Linux ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ ΡΠ°ΠΉΠ»Ρ Π·Π°Π³ΡΡΠΆΠ°Π»ΠΈΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ~/.local/bin/vscode.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru