Fil-C 0.682 β€” memory safety Π±Π΅Π· пСрСписывания


2

Бостоялся выпуск Fil-C 0.682 β€” компилятора C ΠΈ C++, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (memory safety) ΠΈ Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ бОльшиС, Ρ‡Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Rust. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ разрабатываСтся Π€ΠΈΠ»ΠΈΠΏΠΎΠΌ Пизло (Filip Pizlo), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² прСдставлСниях Π½Π΅ нуТдаСтся.

Fil-C основан Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Clang/LLVM 20.x ΠΈ позволяСт ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° C/C++ с Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠ΅ΠΉ прСдотвращСния всСх основных уязвимостСй (out-of-bounds access, use-after-free, double free, type confusion). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ASan ΠΈΠ»ΠΈ MTE, Fil-C ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ строго Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ содСрТит Π»Π°Π·Π΅Π΅ΠΊ Π²Ρ€ΠΎΠ΄Π΅ Π±Π»ΠΎΠΊΠΎΠ² unsafe.

Π—Π° ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠΉ Π³ΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΡˆΡ‘Π» ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° возмоТностСй Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ инструмСнтария с ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠΉ экосистСмой.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности ΠΈ тСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ:

  • InvisiCaps 2.0 ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Capability: БущСствСнно ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° систСма ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (capabilities), ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Π΅Π· измСнСния ΠΈΡ… 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² адрСсном пространствС C. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ capability, сниТСны Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° коррСктная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° union, memcpy, Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ со структурами ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΌΠ°Π½Π΄Π°Ρ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Π»Π°ΠΉΠ½-ассСмблСр.
  • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ сборщик мусора (FUGC): Π’ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ-сборщик мусора Fil’s Unbelievable Garbage Collector Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ сборка, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ ΠΈ GNU Indirect Function.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ARM64: ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ с нуля Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ бэкСнд, Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ, Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΈ ABI для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ARM64 (Linux/aarch64), ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» Π² Ρ„Π°Π·Ρƒ Π±Π΅Ρ‚Π°-тСстирования Π½Π° этой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅.
  • БСзопасный ΠΈΠ½Π»Π°ΠΉΠ½-ассСмблСр ΠΈ SIMD: Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния бСзопасных ассСмблСрных вставок (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ассСмблСрныС Π±Π»ΠΎΠΊΠΈ OpenSSL) с сохранСниСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… инструкций SSE, AVX, AVX2 ΠΈ AVX512 (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ masked load/store, expand/compress, sfence ΠΈ prefetch).
  • Escape Analysis: Начиная с вСрсии 0.671 Π²Π½Π΅Π΄Ρ€Π΅Π½ статичСский Π°Π½Π°Π»ΠΈΠ· ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ΠΈΠ· областСй стСка. Π­Ρ‚ΠΎ стало самым ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π° Π³ΠΎΠ΄: ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния QuickJS выросла Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 6 Ρ€Π°Π·, Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ β€” Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° 10%.
  • Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с C++ ΠΈ соврСмСнными стандартами: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ C++, ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ развСртывания стСка, ucontext, вычисляСмых ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², std::optional ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ‡Π»Π΅Π½Ρ‹ классов.
  • Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ опасных UB-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ LLVM: Fil-C фактичСски ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ» агрСссивныС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ LLVM, ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Undefined Behavior (UB). Π’ частности, ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ strict aliasing ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π°Π½Π°Π»ΠΎΠ³ -fwrapv, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ бСзопасности компилятором.
  • ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° LLVM/Clang 20: ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Clang 20 (c вСрсии Fil-C 0.670), Ρ‡Ρ‚ΠΎ обСспСчило Π»ΡƒΡ‡ΡˆΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ.
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Linux ABI ΠΈ FFI Π½ΠΎΠ²ΠΎΠ³ΠΎ поколСния: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° эмуляция ΠΈ бСзопасныС ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ для дСсятков систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Linux (statx, openat2, pidfd, epoll, splice, futex, timer API ΠΈ Π΄Ρ€.), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° dlopen, dlvsym, libffi ΠΈ FFI-слоя для взаимодСйствия с внСшним ΠΊΠΎΠ΄ΠΎΠΌ.
  • Новая конвСнция Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ API Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ°: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ABI Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для сниТСния ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄Π°. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ API, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ zlock_runtime_threads() (фиксация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для построСния строгих пСсочниц), Π° Ρ‚Π°ΠΊΠΆΠ΅ встроСнный sampling profiler ΠΈ инструмСнты Π΄Π°ΠΌΠΏΠΎΠ² памяти.
  • ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ userspace-дистрибутив /opt/fil: бСзопасноС систСмноС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ glibc 2.40, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ OpenSSH, OpenSSL, sudo, git, curl, wget, rsync, tmux, make, grep, Π° Ρ‚Π°ΠΊΠΆΠ΅ систСмныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (PAM, Kerberos, SELinux, ICU).

Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ сборки Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ…: Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ Π½Π° Π±Π°Π·Π΅ musl (filc) ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ систСмном ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ /opt/fil для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ x86_64 ΠΈ ARM64.

GitHub ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ имССтся ΠΈ бСзопасный ΠΏΠΎ памяти дистрибутив Linux β€” Pizlix

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

ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры | ProHoster