Catatan djb tentang penggunaan Fil-C
(cr.yp.to)- 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
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
- 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
- Contoh: versi yang dikompilasi dengan Fil-C dapat dipasang lewat
- 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
- Dengan modifikasi pada
- Fil-C dan library standarnya ditempatkan di jalur
/usr/libexec/fil/amd64- Perintah
filccdanfil++dapat digunakan secara global di sistem
- Perintah
Contoh build paket Debian
- Skrip helper
filletmenyesuaikan simbol dan jalur instalasi paket source Debian - Hasil build paket
tinycdbdengan Fil-C menghasilkan 3 paket .deb khusus amd64fil0- Setelah instalasi, perintah
nmdanldddigunakan untuk memeriksa simbol Fil-C (pizlonated_) dan jalur library - Saat dijalankan, dipastikan fitur perlindungan runtime Fil-C aktif (menampilkan pesan pemblokiran pelanggaran “memory safety”)
- Setelah instalasi, perintah
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
Komentar Hacker News
Mungkin ini karena variabilitas microbenchmark, tetapi beberapa hasil terlihat terlalu cepat sehingga menimbulkan pertanyaan apakah ada masalah akurasi
Untuk itu, ia membuat dan membagikan library shim GC serta skrip build
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
Bisa dilihat di cdb.cr.yp.to, dan disebutkan bahwa subdomain cdb yang baru menggunakan pqconnect
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
Namun, bagian pq1 bukanlah kunci publik, melainkan hash dari kunci publik jangka panjang server
Catatan terkait Fil-C dikirim 3 hari lalu
Thread terkait
Tautan diskusi sebelumnya
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
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
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
Karena Fil-C harus mengendalikan seluruh program untuk melacak pointer, FFI memang secara struktural tidak cocok
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
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
Saya ingin tahu alasannya, dan juga ingin mencoba Fil-C sendiri
Tulisan terkait