- Bellek güvenliği sunan yeni C/C++ derleyicisi Fil-C, mevcut kodlarla yüksek uyumluluk gösteriyor ve çoğu kütüphane ile uygulama değişiklik olmadan çalışıyor
- Debian 13 ortamında Fil-C’nin kaynak koddan derlenip kurulması için adımlar ve glibc ile binutils’i Fil-C ile yeniden derleyen otomatik kurulum betiği sunuluyor
- Yaklaşık 9000 kriptografi yazılımı mikrobenchmark testinde Fil-C, clang’e kıyasla 1 ila 4 kat daha fazla cycle kullanıyor
- Fil-C’nin Debian paket derleme sistemine entegrasyonu deneniyor; yeni bir ABI(
amd64fil0) eklenerek Fil-C tabanlı paketlerin paralel kurulumu mümkün kılınıyor
- Fil-C, bellek güvenliği ile mevcut ekosistem uyumluluğunu aynı anda hedefliyor ve Debian tabanlı sistemlere genişleme potansiyelini gösteriyor
Fil-C’ye genel bakış ve ilk izlenimler
- Fil-C, bellek güvenliğini garanti eden bir C/C++ derleyicisi olarak mevcut kodlarla yüksek uyumluluk gösteriyor
- Kütüphane ve uygulamaların çoğu değişiklik olmadan çalışıyor
- İstisnai olarak düzeltme gerektiren durumlar olsa da bunların çözümü aşırı zor görünmüyor
- Yazar, yönettiği çeşitli sistemleri Fil-C ile derlenmiş koda geçirerek korumayı hedefliyor
- Test ortamı: Debian 13, AMD Ryzen 5 7640HS(6 çekirdek 12 izlek), 12GB RAM, 36GB swap belleği
İlgili kaynaklar ve betikler
- Fil-C ile üst kaynaklar (ör. clang, glibc) arasındaki farkları karşılaştıran denetim amaçlı diff betiği yayımlandı
- Debian 13 üzerinde Fil-C, glibc ve binutils’i indirip derleyen ve kuran filian-install-compiler betiği sunuluyor
- Toplam çalışma süresi: gerçek zaman 86 dakika, kullanıcı zamanı 477 dakika, sistem zamanı 52 dakika
- Fil-C kullanarak Debian kaynak paketleri derleyen filian-install-packages betiği sunuluyor
- Bazı paketlerin (
bzip2 vb.) sorunsuz derlendiği doğrulandı
- Fil-C vs. clang performans grafiği yayımlandı
- Kriptografiyle ilgili yaklaşık 9000 mikrobenchmark sonucunu içeriyor
- Fil-C ile derlenen kod, clang’e göre 1 ila 4 kat daha fazla cycle tüketiyor
Fil-C kurulumu ve derleme
- Gerekli paketler root yetkisiyle kurulduktan sonra derleme, ayrıcalıksız
filc kullanıcısı ile yapılıyor
- Fil-C kaynakları glibc ile çeşitli üst seviye kütüphane ve uygulamaları içeriyor
- Derleme komutu:
time ./build_all_fast_glibc.sh
- musl da seçilebiliyor ancak bazı paketlerle (
attr, elfutils, sed, vim vb.) uyumsuzluk bulunuyor
- Derleme sırasında bellek yetersizliği yaşanırsa swap alanı 36GB’a çıkarılarak sorun çözülebiliyor
- En fazla yaklaşık 19GB swap ve 12GB RAM kullanıldı
- Büyük bir sunucuda (128 çekirdek, 512GB RAM) Fil-C derlemesi 8 dakika, musl derlemesi 6 dakika sürdü
Ek kütüphane ve uygulama derlemeleri
- Fil-C, çok sayıda kütüphane ve uygulamayı derleyen build_all_slow.sh betiğini içeriyor
- Bunun paralelleştirilmiş sürümü olan build-parallel-20251023.py betiği yazıldı
- Hata oluştuğunda durmayıp tüm derlemeyi sürdürüyor
- Paralel derleme ile süre kısaltılabiliyor
- phoenix sisteminde 61 hedeften 60’ı başarıyla tamamlandı (gerçek zaman 101 dakika)
- Yalnızca libcap derlenemedi (
liblto_plugin.so yükleme hatası)
- util-linux için syscall ile ilgili düzeltmeler gerekiyor
- Kalan önemli paketler (
attr, bash, curl, openssl, vim vb.) sorunsuz derlendi
Ek olarak test edilen kütüphane ve uygulamalar
- boost 1.89.0: büyük ölçüde sorunsuz çalışıyor, yalnızca bazı
vfork ile ilgili düzeltmeler gerekiyor
- cdb-20251021: sorunsuz çalışıyor, yapay OOM testlerinde hata mesajı farklılıkları var
- libcpucycles, libgc(gshim yerine), libntruprime, lpeg, luv vb. başarıyla derlenip test edildi
- mutt, tig, w3m gibi önemli CLI uygulamalarının da sorunsuz çalıştığı doğrulandı
Debian entegrasyonu (Filian)
- Debian’ın çoklu mimari yapısından yararlanılarak Fil-C’ye özel ABI (
amd64fil0) eklendi
- Örnek:
apt install bash:amd64fil0 ile Fil-C ile derlenmiş sürüm kurulabiliyor
- Fil-C,
/usr/include yerine kendi dizinini kullandığı için başlık dosyası yolu uyuşmazlığı sorunu ortaya çıkıyor
filian-install-compiler betiği bunu Debian’ın standart yoluna göre ayarlıyor
- Debian derleme araçlarına (
dpdk-buildpackage, sbuild vb.) Fil-C mimarisini tanıma desteği eklendi
/usr/share/dpkg/cputable, config.sub vb. dosyalar değiştiriliyor
- Fil-C ve standart kütüphaneler
/usr/libexec/fil/amd64 yoluna yerleştiriliyor
filcc, fil++ komutları sistem genelinde kullanılabiliyor
Debian paket derleme örneği
fillet yardımcı betiği ile Debian kaynak paketlerinin sembolleri ve kurulum yolları ayarlanıyor
tinycdb paketinin Fil-C ile derlenmesi sonucunda yalnızca amd64fil0 için 3 adet .deb paketi üretildi
- Kurulumdan sonra
nm, ldd komutları ile Fil-C sembolleri(pizlonated_) ve kütüphane yolları doğrulanabiliyor
- Çalıştırma sırasında Fil-C çalışma zamanı korumasının devreye girdiği görüldü (“memory safety” ihlali engelleme mesajı çıkıyor)
Ek Debian paket derlemeleri
- libc-dev: bağımlılık çözümü için sahte paket oluşturuldu
- ncurses: Fil-C ile derlenip kurulabildi
- libmd: mimariler arası sürüm uyumsuzluğu nedeniyle yeniden derlenmesi gerekiyor
- readline: başlık yolu için sembolik bağlantı gerekiyor
- lua5.4: readline bağımlılığı çözüldükten sonra sorunsuz çalışıyor
Sonuç
- Fil-C, bellek güvenliğini güçlendirme ile mevcut C/C++ ekosistemi uyumluluğunu aynı anda sağlamaya yönelik bir girişim
- Debian ortamında paket derleme ve entegrasyon olasılığı kanıtlanmış durumda
- Bazı derleme betikleri ve başlık yolu ayarları gerekse de başlıca açık kaynak paketlerin çoğuyla uyumluluk sağlanmış
1 yorum
Hacker News görüşü
Bunun muhtemelen mikrobenchmark oynaklığından kaynaklandığını düşünüyorum, ama bazı sonuçlar o kadar hızlı görünüyor ki doğrulukla ilgili bir sorun olup olmadığını merak ettiriyor
Bunun için GC shim kütüphanesi ve derleme script'leri hazırlayıp paylaşıyor
Swap'i 36GB'a çıkarınca derleme sorunsuz tamamlanmış ve en fazla 19GB swap + 12GB RAM kullanmış
128 çekirdekli, 512GB RAM'li bir sunucuda Fil-C derlemesi 8 dakika, musl ise 6 dakika sürmüş
Görünüşe göre Fil-C yoğun biçimde statik analiz yapıyor
cdb.cr.yp.to adresinden görülebilir; ayrıca yeni cdb alt alan adının pqconnect kullandığı belirtiliyor
pqconnect, HTTP(S) bağlantı aşamasında kullanılıyor ve her ikisi de açık anahtarı DNS'e kodluyor, ama rolleri farklı
pqconnect, CurveCP gibi açık anahtarı CNAME içine yerleştiriyor
Ancak pq1 kısmı açık anahtar değil, sunucunun uzun ömürlü açık anahtarının hash'i
Fil-C ile ilgili notlar 3 gün önce gönderilmişti
ilgili başlık
önceki tartışma bağlantısı
Amaç, çoğu C/C++ programının Rust'ta yeniden yazılmasına gerek kalmadan güvenli biçimde çalışmasını sağlamak gibi görünüyor
Epic Games'in bununla nasıl bir bağlantısı olduğunu da merak ediyorum
Yeni kod yazmaktan ziyade, WASM sandboxing gibi mevcut kodu güvenli biçimde sarmalamak için daha uygun
Yine de Fil-C, çökmeleri daha isabetli yakalıyor
Rust'ın unsafe modu için de buradan öğrenilecek şeyler olabilir
Özellikle Fil-C ile derlenmiş bağımlılıkların statik olarak linklenmesi ilginç
İşaretçi takibi için tüm programın Fil-C tarafından kontrol edilmesi gerekiyor; bu yüzden FFI mimari olarak uymuyor
Örneğin: Fil-C: A memory-safe C implementation,
Safepoints and Fil-C,
Fil’s Unbelievable Garbage Collector vb.
2024~2025 arasında bellek güvenliği tartışmaları sürüyor
Fil-C, C/C++ ile uyumlu, bellek güvenli bir uygulama; kodların çoğu neredeyse hiç değişmeden derlenebiliyor
Tüm bellek hataları panic olarak yakalanıyor ve güvenlik eşzamanlı GC ile InvisiCaps sayesinde sağlanıyor
Ayrıntılı açıklama resmi sitede bulunabilir
Nedenini öğrenmek isterim; ayrıca Fil-C'yi bizzat denemek istiyorum
ilgili yazı