2 puan yazan GN⁺ 2025-11-03 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2025-11-03
Hacker News görüşü
  • Bağlantı verilen benchmark sonuçlarına bakınca, bazı durumlarda Fil-C'nin C'den daha hızlı göründüğü oluyor
    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
  • Yazar, Fil-C'den epey etkilenmiş ve tüm Debian sistemini Fil-C ile yeniden derlemeyi deniyor
    Bunun için GC shim kütüphanesi ve derleme script'leri hazırlayıp paylaşıyor
  • Sunucuda yalnızca 12GB swap olduğu için Fil-C derlemesi sırasında bellek yetersizliğinden dolayı birkaç kez yeniden başlatmak zorunda kalmış
    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
    • Bu büyük olasılıkla LLVM+Clang'ın kendisini derleme sürecinden kaynaklanıyordur
  • Yeni yayımlanan 64 bit cdb sürümünün eksabayt ölçeğinde veritabanlarını desteklemesi ilginç
    cdb.cr.yp.to adresinden görülebilir; ayrıca yeni cdb alt alan adının pqconnect kullandığı belirtiliyor
    • Aslında cdb.cr.yp.to için NS kaydı yok, yani yapı DNSCurve ile çalışıyor
      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
    • RFC1034'e göre cdb.cr.yp.to, cr.yp.to ve yp.to'nun bir alt alan adı (subdomain) olarak görülebilir
      Ancak pq1 kısmı açık anahtar değil, sunucunun uzun ömürlü açık anahtarının hash'i
    • pqconnect kullanımı eskiden beri vardı, ama cdb.cr.yp.to'nun CNAME kaydı 21 Ekim civarında yeni eklenmiş görünüyor
      Fil-C ile ilgili notlar 3 gün önce gönderilmişti
      ilgili başlık
    • Ayrıca 11 gün önce de bununla ilgili bir tartışma vardı
      önceki tartışma bağlantısı
  • Bunun harika bir proje olduğunu düşünüyorum
    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
    • Fil-C, çöp toplayıcı tabanlı bir dil, bu yüzden C'den çok daha yavaş
      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
  • Phil'in çalışmasının sonunda hak ettiği takdiri görmeye başlamasına sevindim
    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ç
    • Ancak Fil-C şu anda FFI desteklemiyor
      İşaretçi takibi için tüm programın Fil-C tarafından kontrol edilmesi gerekiyor; bu yüzden FFI mimari olarak uymuyor
  • Fil-C ile ilgili başlıca başlıklar derlenmiş
    Ö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'nin ne olduğunu bilmeyenler için bir özet
    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
    • Fil-C kullanmak için çalışma zamanında Garbage Collector'ü kabul etmek gerekiyor
  • build_all_fast_glibc.sh script'inin 31GB bellek istemesi şaşırtıcı
    Nedenini öğrenmek isterim; ayrıca Fil-C'yi bizzat denemek istiyorum
    • Bunun sebebi LLVM derleme ve linkleme sürecinin ağır olması
  • Ünlü bir kriptografi uzmanının bash ve curl kullanması ilginç
    • Aslında curl | bash bazı durumlarda gayet makul olabilir
      ilgili yazı