- 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
- 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
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
Belum ada komentar.