2 poin oleh GN⁺ 2025-11-03 | 1 komentar | Bagikan ke WhatsApp
  • Fil-C, kompiler C/C++ baru dengan keamanan memori, menunjukkan kompatibilitas tinggi dengan kode yang sudah ada, dan sebagian besar library serta aplikasi berjalan tanpa modifikasi
  • Tersedia prosedur build dan instalasi dari source untuk Fil-C di lingkungan Debian 13, serta skrip instalasi otomatis untuk mengompilasi ulang glibc dan binutils dengan Fil-C
  • Dalam sekitar 9000 mikrobenchmark perangkat lunak kriptografi, Fil-C menggunakan 1–4 kali jumlah siklus dibanding clang
  • Dicoba integrasi ke sistem build paket Debian dengan Fil-C, dengan menambahkan ABI baru (amd64fil0) untuk memungkinkan instalasi paralel paket berbasis Fil-C
  • Fil-C mengejar keamanan memori sekaligus kompatibilitas dengan ekosistem yang ada, dan menunjukkan potensi perluasan ke sistem berbasis Debian

Gambaran Fil-C dan kesan awal

  • Fil-C adalah kompiler C/C++ yang menjamin keamanan memori, dengan kompatibilitas tinggi terhadap kode yang sudah ada
    • Sebagian besar library dan aplikasi berjalan tanpa modifikasi
    • Dalam beberapa kasus pengecualian yang memerlukan perubahan, tingkat kesulitannya juga tidak terlalu berat
  • Penulis menargetkan untuk mengalihkan beberapa sistem yang dikelolanya ke kode yang dikompilasi dengan Fil-C demi perlindungan
  • Lingkungan pengujian adalah Debian 13, AMD Ryzen 5 7640HS (6 core 12 thread), RAM 12GB, memori swap 36GB

Materi terkait dan skrip

  • Dipublikasikan skrip diff untuk audit yang membandingkan perbedaan antara Fil-C dan source hulu (misalnya clang, glibc)
  • Tersedia skrip filian-install-compiler untuk mengunduh, mengompilasi, dan memasang Fil-C, glibc, dan binutils di Debian 13
    • Total waktu eksekusi: waktu nyata 86 menit, waktu user 477 menit, waktu sistem 52 menit
  • Tersedia skrip filian-install-packages untuk membangun paket source Debian dengan Fil-C
    • Beberapa paket (seperti bzip2) dipastikan berhasil dibangun
  • Dipublikasikan grafik performa Fil-C vs. clang
    • Hasil dari sekitar 9000 mikrobenchmark terkait kriptografi
    • Kode yang dikompilasi dengan Fil-C menghabiskan 1–4 kali lebih banyak siklus dibanding clang
    Iklan

Instalasi dan build Fil-C

  • Setelah memasang paket yang diperlukan dengan hak root, proses build dijalankan oleh pengguna nonprivileged filc
  • Source Fil-C mencakup glibc serta berbagai library dan aplikasi tingkat tinggi
  • Perintah build: time ./build_all_fast_glibc.sh
    • musl juga bisa dipilih, tetapi ada ketidakcocokan dengan beberapa paket (attr, elfutils, sed, vim, dll.)
  • Saat terjadi kekurangan memori selama build, masalah diatasi dengan memperluas swap menjadi 36GB
    • Penggunaan puncak sekitar 19GB swap dan 12GB RAM
    • Pada server besar (128 core, RAM 512GB), build Fil-C memakan waktu 8 menit dan build musl 6 menit

Build library dan aplikasi tambahan

  • Fil-C menyertakan build_all_slow.sh untuk membangun berbagai library dan aplikasi
  • Ditulis skrip build-parallel-20251023.py yang memparalelkan proses ini
    • Build tetap dilanjutkan sampai selesai tanpa berhenti saat terjadi error
    • Waktu dapat dipersingkat melalui build paralel
    Iklan
  • Pada sistem phoenix, 60 dari 61 target berhasil (waktu nyata 101 menit)
  • Hanya libcap yang gagal dibangun (error pemuatan liblto_plugin.so)
  • util-linux memerlukan perbaikan terkait syscall
  • Paket utama lainnya (attr, bash, curl, openssl, vim, dll.) berhasil dibangun tanpa masalah

Library dan aplikasi tambahan yang diuji

  • boost 1.89.0: sebagian besar berjalan normal, tetapi beberapa perbaikan terkait vfork diperlukan
  • cdb-20251021: berjalan normal, dengan perbedaan pada pesan error saat uji OOM buatan
  • libcpucycles, libgc (pengganti gshim), libntruprime, lpeg, luv dan lainnya berhasil dibangun dan diuji
  • Aplikasi CLI utama seperti mutt, tig, w3m juga dipastikan berjalan normal

Integrasi Debian (Filian)

  • Memanfaatkan struktur multi-arsitektur Debian dengan menambahkan ABI khusus Fil-C (amd64fil0)
    • Contoh: versi yang dikompilasi dengan Fil-C dapat dipasang lewat apt install bash:amd64fil0
  • Fil-C menggunakan direktori sendiri alih-alih /usr/include, sehingga muncul masalah ketidakcocokan jalur file header
    • Skrip filian-install-compiler menyesuaikan hal ini ke jalur standar Debian
  • Ditambahkan pengenalan arsitektur Fil-C ke alat build Debian (dpdk-buildpackage, sbuild, dll.)
    • Dengan modifikasi pada /usr/share/dpkg/cputable, config.sub, dan lainnya
  • Fil-C dan library standarnya ditempatkan di jalur /usr/libexec/fil/amd64
    • Perintah filcc dan fil++ dapat digunakan secara global di sistem
    Iklan

Contoh build paket Debian

  • Skrip helper fillet menyesuaikan simbol dan jalur instalasi paket source Debian
  • Hasil build paket tinycdb dengan Fil-C menghasilkan 3 paket .deb khusus amd64fil0
    • Setelah instalasi, perintah nm dan ldd digunakan untuk memeriksa simbol Fil-C (pizlonated_) dan jalur library
    • Saat dijalankan, dipastikan fitur perlindungan runtime Fil-C aktif (menampilkan pesan pemblokiran pelanggaran “memory safety”)

Build paket Debian tambahan

  • libc-dev: dibuat paket palsu untuk menyelesaikan dependensi
  • ncurses: dapat dibangun dan dipasang dengan Fil-C
  • libmd: perlu dikompilasi ulang karena ketidakcocokan versi antararsitektur
  • readline: memerlukan symbolic link untuk jalur header
  • lua5.4: berjalan normal setelah dependensi readline diselesaikan

Kesimpulan

  • Fil-C adalah upaya untuk meraih peningkatan keamanan memori sekaligus kompatibilitas dengan ekosistem C/C++ yang ada
  • Kemungkinan build dan integrasi paket di lingkungan Debian telah dibuktikan
  • Meski beberapa skrip build dan penyesuaian jalur header masih diperlukan, kompatibilitas dengan sebagian besar paket open source utama telah tercapai

1 komentar

 
GN⁺ 2025-11-03
Komentar Hacker News
  • Dari benchmark yang ditautkan, ada kasus di mana Fil-C terlihat lebih cepat daripada C
    Mungkin ini karena variabilitas microbenchmark, tetapi beberapa hasil terlihat terlalu cepat sehingga menimbulkan pertanyaan apakah ada masalah akurasi
  • Penulis tampaknya sangat terkesan dengan Fil-C dan sedang mencoba membangun ulang seluruh sistem Debian dengan Fil-C
    Untuk itu, ia membuat dan membagikan library shim GC serta skrip build
  • Karena server hanya punya swap 12GB, kompilasi Fil-C beberapa kali harus dimulai ulang akibat kehabisan memori
    Setelah swap ditambah menjadi 36GB, build berjalan normal, dan penggunaan puncaknya mencapai 19GB swap + 12GB RAM
    Pada server 128 core dengan RAM 512GB, build Fil-C memakan waktu 8 menit, sedangkan musl 6 menit
    Tampaknya Fil-C melakukan banyak analisis statis
    • Itu kemungkinan besar justru proses build LLVM+Clang itu sendiri
  • Menarik bahwa versi 64-bit baru dari cdb mendukung database skala exabyte
    Bisa dilihat di cdb.cr.yp.to, dan disebutkan bahwa subdomain cdb yang baru menggunakan pqconnect
    • Sebenarnya cdb.cr.yp.to tidak memiliki record NS, jadi strukturnya membuat DNSCurve yang bekerja
      pqconnect digunakan pada tahap koneksi HTTP(S), dan keduanya sama-sama mengodekan kunci publik di DNS, tetapi perannya berbeda
      pqconnect, seperti CurveCP, menyertakan kunci publik di CNAME
    • Menurut RFC1034, cdb.cr.yp.to dapat dianggap sebagai subdomain dari cr.yp.to dan yp.to
      Namun, bagian pq1 bukanlah kunci publik, melainkan hash dari kunci publik jangka panjang server
    • Penggunaan pqconnect sudah ada sejak sebelumnya, tetapi CNAME cdb.cr.yp.to tampaknya baru ditambahkan sekitar 21 Oktober
      Catatan terkait Fil-C dikirim 3 hari lalu
      Thread terkait
    • Sebagai referensi, ada juga diskusi terkait 11 hari lalu
      Tautan diskusi sebelumnya
  • Menurut saya ini proyek yang keren
    Tujuannya tampaknya agar sebagian besar program C/C++ bisa berjalan aman tanpa perlu ditulis ulang ke Rust
    Saya juga penasaran bagaimana Epic Games terlibat di dalamnya
    • Fil-C adalah bahasa berbasis garbage collection, jadi jauh lebih lambat daripada C
      Ini lebih cocok untuk membungkus kode lama yang sudah ada agar aman, mirip sandboxing WASM, daripada untuk menulis kode baru
      Namun Fil-C bisa menangkap crash dengan lebih akurat
  • Senang rasanya melihat pekerjaan Phil akhirnya mendapat pengakuan yang layak
    Sepertinya ada hal yang bisa dijadikan referensi juga untuk mode unsafe di Rust
    Khususnya, cara menautkan dependensi yang dikompilasi dengan Fil-C secara statis terdengar menarik
    • Namun saat ini Fil-C tidak mendukung FFI
      Karena Fil-C harus mengendalikan seluruh program untuk melacak pointer, FFI memang secara struktural tidak cocok
  • Beberapa thread utama terkait Fil-C dirangkum
    Misalnya: Fil-C: A memory-safe C implementation,
    Safepoints and Fil-C,
    Fil’s Unbelievable Garbage Collector dan lainnya
    Diskusi tentang keamanan memori terus berlanjut sepanjang 2024–2025
  • Bagi yang belum tahu apa itu Fil-C, ada ringkasannya
    Fil-C adalah implementasi aman-memori yang kompatibel dengan C/C++, dan sebagian besar kode bisa dikompilasi hampir tanpa perubahan
    Semua error memori dideteksi sebagai panic, dan keamanan dijaga dengan GC konkuren dan InvisiCaps
    Penjelasan lengkap bisa dilihat di situs resminya
    • Untuk menggunakan Fil-C, Anda harus menerima adanya Garbage Collector saat runtime
  • Menarik bahwa skrip build_all_fast_glibc.sh membutuhkan memori 31GB
    Saya ingin tahu alasannya, dan juga ingin mencoba Fil-C sendiri
    • Itu karena proses build dan linking LLVM memang berat
  • Menarik melihat seorang kriptografer terkenal menggunakan bash dan curl
    • Sebenarnya curl | bash kadang-kadang memang tidak masalah
      Tulisan terkait