Атака Trojan Source для внСдрСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄, Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΠ· ΠšΠ΅ΠΌΠ±Ρ€ΠΈΠ΄ΠΆΡΠΊΠΎΠ³ΠΎ унивСрситСта ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠΉ подстановки врСдоносного ΠΊΠΎΠ΄Π° Π² Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ исходныС тСксты. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Ρ‚Π°ΠΊΠΈ (CVE-2021-42574) прСдставлСн ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Trojan Source ΠΈ базируСтся Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ тСкста ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ выглядящСго для компилятора/ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ примСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° продСмонстрированы для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… компиляторов ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ², поставляСмых для языков C, C++ (gcc ΠΈ clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go ΠΈ Python.

ΠœΠ΅Ρ‚ΠΎΠ΄ основан Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² коммСнтариях ΠΊ ΠΊΠΎΠ΄Ρƒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Unicode-символов, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… порядок отобраТСния Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ тСкста. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов ΠΎΠ΄Π½ΠΈ части тСкста ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ — справа-Π½Π°Π»Π΅Π²ΠΎ. Π’ повсСднСвной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для вставки Π² Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ строк Π½Π° ΠΈΠ²Ρ€ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ арабском языкС. Но Ссли ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки с Ρ€Π°Π·Π½Ρ‹ΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ тСкста Π² ΠΎΠ΄Π½ΠΎΠΉ строкС, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… символов, ΠΎΡ‚Ρ€Ρ‹Π²ΠΊΠΈ тСкста, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ справа-Π½Π°Π»Π΅Π²ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСкст, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Ρ€Π΅Π΄ΠΎΠ½ΠΎΡΠ½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ тСкст с этой конструкциСй Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ просмотрС ΠΊΠΎΠ΄Π°, Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² слСдом ΠΈΠ΄ΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° символов, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… справа-Π½Π°Π»Π΅Π²ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ налоТСнию Π½Π° Π²Ρ€Π΅Π΄ΠΎΠ½ΠΎΡΠ½ΡƒΡŽ вставку ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… символов. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ останСтся сСмантичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ.

Атака Trojan Source для внСдрСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄, Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π’ процСссС рСцСнзирования ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ столкнётся с Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ порядком Π²Ρ‹Π²ΠΎΠ΄Π° символов ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ Π² соврСмСнном тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, web-интСрфСйсС ΠΈΠ»ΠΈ IDE Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ подозрСния ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π½ΠΎ компилятор ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ логичСский порядок символов ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²Ρ€Π΅Π΄ΠΎΠ½ΠΎΡΠ½ΡƒΡŽ вставку ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ, Π½Π΅ обращая Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ тСкст Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ популярныС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π° (VS Code, Emacs, Atom), Π° Ρ‚Π°ΠΊΠΆΠ΅ интСрфСйсы для просмотра ΠΊΠΎΠ΄Π° Π² рСпозиториях (GitHub, Gitlab, BitBucket ΠΈ всС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Atlassian).

Атака Trojan Source для внСдрСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄, Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ нСсколько способов использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ врСдоносных дСйствий: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ скрытого выраТСния «return», приводящСго ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ; Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ конструкции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ); присвоСниС ΠΈΠ½Ρ‹Ρ… строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, приводящих ΠΊ сбоям ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ строк.

НапримСр, Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ строку: if access_level != «user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}» {

которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π² интСрфСйсС для рСцСнзирования ΠΊΠ°ΠΊ if access_level != «user» { // Check if admin

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π°Ρ‚Π°ΠΊΠΈ (CVE-2021-42694), связанный с использованиСм ΠΎΠΌΠΎΠ³Π»ΠΈΡ„ΠΎΠ², символов, внСшнС ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΏΠΎ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΡŽ, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π½Ρ‹Π΅ unicode-ΠΊΠΎΠ΄Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, символ «ɑ» Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ «a», «ɡ» — «g», «ɩ» — «l»). ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ символы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для ввСдСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅. НапримСр, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π½Π΅ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΌΡ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ дСйствия. Π‘Π΅Π· Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π° сразу Π½Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, какая ΠΈΠ· этих Π΄Π²ΡƒΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вызываСтся Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ мСстС.

Атака Trojan Source для внСдрСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄, Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π’ качСствС ΠΌΠ΅Ρ€Ρ‹ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ рСкомСндуСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² компиляторах, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΈ сборочных инструмСнтах, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Unicode-символы, Π²Ρ‹Π²ΠΎΠ΄ ошибки ΠΈΠ»ΠΈ прСдупрСТдСния ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π² коммСнтариях, строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ… ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… Π½Π΅ΠΏΠ°Ρ€Π½Ρ‹Ρ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ΠΈ U+200F). ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ символы Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ явно Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ Π² спСцификациях языков программирования ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ… ΠΊΠΎΠ΄Π° ΠΈ интСрфСйсах для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСпозиториями.

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 1: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ с устранСниСм уязвимости ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ для GCC, LLVM/Clang, Rust, Go, Python ΠΈ binutils. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ устранили GitHub, Bitbucket ΠΈ Jira. Π’ процСссС ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ исправлСниС для GitLab. Для выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]’ /path/to/source

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 2: Рас Кокс (Russ Cox), ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ОБ Plan 9 ΠΈ языка программирования Go, раскритиковал излишнСС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ описанному ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π°Ρ‚Π°ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ извСстСн (Go, Rust, C++, Ruby) ΠΈ Π½Π΅ воспринимался Π²ΡΠ΅Ρ€ΡŒΡ‘Π·. По мнСнию Кокса ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² основном касаСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ… ΠΊΠΎΠ΄Π° ΠΈ web-интСрфСйсах, Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… инструмСнтов ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вмСсто привлСчСния внимания ΠΊ ΡƒΠΌΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ‚Π°ΠΊΠ°ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΈ процСссов рСцСнзирования ΠΊΠΎΠ΄Π° ΠΈ зависимостСй.

Рас Кокс Ρ‚Π°ΠΊΠΆΠ΅ считаСт, Ρ‡Ρ‚ΠΎ компиляторы Π½Π΅ Ρ‚ΠΎ мСсто, Π³Π΄Π΅ стоит ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ² опасныС символы Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ компилятора остаётся ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ пласт инструмСнтов Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использованиС Π΄Π°Π½Π½Ρ‹Ρ… символов остаётся допустимым, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ систСмы сборки, ассСмблСры, ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ парсСры ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Rust, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΠ΄Π° LTR/RTL Π² компиляторС, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» исправлСниС Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Cargo, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Π°Ρ‚Π°ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» Cargo.toml. Аналогично источниками Π°Ρ‚Π°ΠΊ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠ°ΠΊ BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml ΠΈ requirements.txt.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru