8 puan yazan ahwjdekf 2025-03-16 | Henüz yorum yok. | WhatsApp'ta paylaş

Rust gerçekten güvenli mi?

C++ gerçekten o kadar güvensiz mi?

YouTube'da bu ilginç konuda yapılmış bir sunum vardı, ben de paylaşmak istedim.
Başlığı çevirecek olursak, "bellek güvenli bir dil kullanın demek o kadar basit bir mesele değil" gibi bir anlam taşıyor.
Konuşmacı, tek bir tarafa kaymadan, görece adil bir perspektiften kendi düşüncelerini aktarıyor.

  • Rust, panic yoluyla bellek güvenli olmayan kodun çalıştırılmasını engeller; ancak unsafe Rust bu korumaları aşabilir.
  • Ancak unsafe Rust açık bir opt-in gerektirdiği için, güvensiz C/C++ koduna göre daha görünürdür. Bu bölümler daha odaklı biçimde incelenebilir.
  • Rust crate'lerinin yaklaşık %30'u güvensiz kod kullanıyor; gömülü sistemlerde bu oran iki kat daha yüksektir.
  • Sanitizer'lar (dinamik analiz araçları), hem Rust hem de C/C++ kodunda bellek hatalarını tespit edebilir.
  • Rust geliştiricilerinin %70'i, C/C++ kütüphanelerine yönelik FFI (yabancı fonksiyon arayüzü) üzerinden güvensiz kod çağırıyor.
  • Rust projelerinde kullanılan birçok önemli kütüphane de C/C++ ile yazılmıştır (SQLite, OPCUA kütüphanesi).
  • Sanitizer'lar, kaynak kod mevcut olduğunda LLVM IR katmanında hem Rust hem de C/C++ kodunu analiz edebilir.
  • Miri, Rust'taki tanımsız davranışı orta seviye gösterimde tespit etmeye yönelik tamamlayıcı bir araçtır.
  • Miri'nin avantajları: net hatalar sunması ve tüm tanımsız davranışları aynı anda kontrol etmesi. Sınırlamaları: C/C++ kodunu yorumlayamaz.
  • Rust standart kütüphanesi fonksiyonlarının yaklaşık %20'si güvensiz kod kullanır.
  • Kritik altyapılar için yalnızca bellek güvenli kod değil, aynı zamanda maddi hasarı veya can güvenliği risklerini önleyecek şekilde doğru kod da gerekir.
  • Güvenli Rust programları bile hatalı çalışabilir veya hizmet reddi saldırılarına açık olabilir.
  • Özellik testi, sınır durumlarını bulmak için rastgele girdiler üreterek yardımcı olabilir; ancak imkânsız hatalarla baş etmekte zorlanır.
  • Kani, kısıtlar içinde bir programın doğruluğunu matematik kullanarak kontrol eden bir model denetleyicisidir.
  • Kani'nin avantajları: kısıtlar içindeki tüm girdileri matematiksel olarak değerlendirmesi. Sınırlamaları: döngülerin açılması gerekir ve eşzamanlılık ya da C/C++ FFI desteği yoktur.
  • Rust için sonuç: Rust güvenlidir, ama düşünüldüğü kadar güvenli değildir.
  • Bjarne Stroustrup, C ile C++ arasında ayrım yapıyor ve C++'ın daha güvenli kod için tasarlandığını belirtiyor.
  • C++ Core Guidelines, tür güvenliği, sınır güvenliği ve ömür güvenliği için profiller sunarak Rust'ın sağladığı güvencelere yaklaşır.
  • C++'ın en büyük sorunu, varsayılan olarak güvensiz kod yazmanın fazla kolay olmasıdır. Sorun geliştiricilerin çaba göstermemesi değil.

Henüz yorum yok.

Henüz yorum yok.