2 puan yazan GN⁺ 2024-12-22 | 1 yorum | WhatsApp'ta paylaş
  • C'yi güvenli Rust'a derlemek için formalize edilmiş bir yöntem

  • Rust dilinin popülerliği hızla artsa da, birçok kritik kod tabanı hâlâ C ile yazılmış durumda ve bunları elle yeniden yazmak gerçekçi değil. Bu nedenle C'yi otomatik olarak Rust'a derlemek çekici bir alternatif olarak öne çıkıyor.

  • Mevcut birçok araştırma, Rust'ın çeşitli özelliklerini (ör. unsafe) kullanarak C'nin giderek daha büyük bir bölümünü ele alacak şekilde ilerliyor. Ancak otomasyonun cazibesine karşın, unsafe'a bağımlı kod üretmek Rust'ın sağladığı bellek güvenliği garantisini geçersiz kılar ve böylece mevcut bir kod tabanını güvenli bir dile taşımanın ana avantajını ortadan kaldırır.

  • Biz farklı bir yol izleyerek C'yi güvenli Rust'a derleme yöntemini inceledik: yani Rust'ın tip sistemine uygun çalışarak bellek güvenliğini kolayca garanti eden kod üreten bir yaklaşım.

  • Araştırmamızın birkaç özgün katkısı şunlardır:

    • C'nin bazı kısımlarının güvenli Rust'a tip yönlendirmeli çevirisi
    • Rust'ın slice ve split işlemlerini kullanarak C işaretçi aritmetiğini ifade edebilen split-tree tabanlı yeni bir statik analiz
    • Hangi ödünç almanın değişebilir (mutable) olması gerektiğini kesin olarak çıkaran bir analiz
    • C yapılarının Rust'ın sahiplenmeyen ve sahiplenen ayrımıyla uyumlu tiplerine uygun bir derleme stratejisi
  • Bu yaklaşımı, halihazırda formal olarak doğrulanmış C kod tabanlarına uyguladık: HACL* şifreleme kütüphanesi ve EverParse'in ikili ayrıştırıcısı ile serileştiricisi. Desteklenen C alt kümesinin her iki uygulamayı güvenli Rust'a çevirmek için yeterli olduğunu gösterdik.

  • Yapılan değerlendirmede, Rust'ın aliasing (takma ad) disiplinini ihlal eden bazı bölümlerin otomatik bir cerrahi yeniden yazımla giderilebileceğini ve eklenen stratejik kopyaların performansa etkisinin önemsiz olduğunu gördük.

  • Özellikle HACL* için, yaklaşımın uygulanması sonucunda modern algoritmaların tamamını içeren 80.000 satırlık doğrulanmış bir kriptografi kütüphanesinin tamamen saf Rust ile yazıldığını gösterdik. Bu, bu alandaki ilk örnektir.

1 yorum

 
GN⁺ 2024-12-22
Hacker News yorumları
  • Rust'a bir projeyi taşırken bazı sonuçlar gördüm

    • C programlarını Rust'a taşımak, Rust'un sıkı kısıtları sayesinde hataları hızla bulmamı sağlıyor
    • C'den Rust'a otomatik geçiş tamamen çözülmüş bir mesele değil; iki dilin temelde farklı tasarımlardan gelmesi nedeniyle
    • Bazı durumlarda C'den Rust'a taşımak mümkün olmayabilir; bu, her ikisinin doğasında bulunan güvensizlikten kaynaklanıyor
    • Araçlar geliştikçe taşımak süreci daha akıcı hale gelebilir
  • Biçimsel olarak doğrulanmış bir C kod tabanı ile tipik sistem C kod tabanı farklıdır

  • 2002 yılında araştırmacılar, güvenli bir C lehçesi olan Cyclone üzerine bir makale yayımladı ve C'den Cyclone'a kod taşırken güvenlik hataları tespit etti

    • Bu tip manuel veya otomatik geçişler güvenli bir dilin benimsenmesini artırabilir ve mevcut hataları ortaya çıkarma potansiyeline sahip olabilir
  • Rust'a doğrudan çeviri hem güvenli hem güvensiz bölümler üretebilir; manuel çaba, güvensiz bölgelerin güvenliğini doğrulamaya odaklanabilir

    • Güvensiz bölümlerin büyük olması hâlâ fayda sağlayabilir
  • C'nin küçük bir kısmını derlemeye ilişkin beklentim düşüktü

    • Rust'un ownership modeli gerçek hayattaki C programlarından çok farklı olduğundan
  • Zig'in C dönüşümü ile karşılaştırılmasıyla ilgili bir merakım var

    • Zig yeni kodla mevcut C kodunun birlikte kullanıldığı iyi bir karma ortam üretiyor ve bir C derleyicisi gibi de kullanılabiliyor
    • Linux çekirdek bakıcılarının Zig'i C'nin alternatifi olarak düşünmemelerinin nedeni nedir diye merak ediyorum
  • C2Rust'ın biçimsel olarak doğru kod üretebilip üretemeyeceğine dair bir soru

    • Rust kodu üreten kaynak koda ilişkin bir bağlantı görünmüyor
  • Çalışır durumdaki bir C kütüphanesi varsa, Rust'un güvensizliğini kullanarak çevirmek değere sahip olabilir

    • Rust genel olarak hâlâ kütüphane bakımından yetersiz
  • Yüksek optimizasyon seviyesinin Rust hızını önemli ölçüde artıramaması ilginç

    • O3 optimizasyon seviyesinde C'yi tek seferde Rust'a derlemenin ne kadar iyi çalışacağı merak konusu