1 puan yazan GN⁺ 2024-04-21 | 1 yorum | WhatsApp'ta paylaş
  • Thunderbird'a Exchange desteği eklemek için Rust dili kullanılarak geliştirme sürdürülüyor
    • Temmuzda çıkması planlanan bir sonraki ESR (Extended Support) sürümünde önce yalnızca e-posta desteği sunulacak; takvim ve adres defteri özellikleri ise daha sonra desteklenecek
    • Bu çalışma Brendan Abolivier, Ikey Doherty ve Sean Burke tarafından yürütülüyor

Rust dilinin seçilme nedenleri

  • Thunderbird eski bir proje ve çok sayıda eski C++ kodu barındırıyor
  • Yeni özellik geliştirmek için güçlü ve uzun vadede sürdürülebilir bir dile ihtiyaç var
  • Rust; bellek güvenliği, performans, modülerlik ve ekosistem gibi avantajlar sunuyor
  • Firefox ile paylaşılan CI altyapısı zaten Rust'ı destekliyor
  • XPCOM üzerinden Rust, C++ ve JavaScript arasında çağrı yapılabiliyor
  • Rust'ın güçlü araçlarıyla eski mimari iyileştirilebiliyor
  • Rust farklı platformları desteklediği için Thunderbird for Android/K-9 Mail gibi diğer projelerde de yeniden kullanılabiliyor

Karşılaşılan zorluklar

  • Mevcut kodda Rust ile iyi uyuşmayan çok sayıda asenkron desen bulunuyor
  • Firefox ve Thunderbird kod tabanında Rust binding'leri olmayan birçok özellik var
  • Thunderbird build sistemi Firefox kodunu subtree olarak aldığı için Rust kodunu entegre etmek zordu
    • Cargo workspace'leri iç içe kullanılamadığı için build aracı mach değiştirilerek bu sorun aşıldı
  • XPCOM aslında C++ için tasarlandığından Rust'ta kullanmak çok fazla boilerplate kod gerektiriyordu
    • Protokole özel mantık Rust ile uygulanıp, mevcut kodla birleştirmek için C++ tarafında bridge sınıfları oluşturularak çözüm bulundu

Rust ile Exchange desteğinin uygulanması

  • EWS (Exchange Web Services) API'si HTTP üzerinden iletişim kuruyor ve XML biçiminde istekler ile yanıtlar kullanıyor
  • HTTP isteklerini göndermek için Firefox'un necko ağ bileşeni kullanılıyor ancak XPCOM üzerinden açığa çıkarıldığı için kullanımı zahmetli
    • XPCOM'un asenkron işlemlerini Rust'ın async/await sözdizimine dönüştüren xpcom_async crate'i oluşturuldu
    • reqwest tarzı bir HTTP istemci API'si sağlayan moz_http crate'i oluşturuldu
  • XML istek/yanıt işleme için mevcut crate'ler kullanılmak istendi ancak EWS'nin gereksinimlerini karşılamadılar
    • Rust veri yapıları ile XML arasında sezgisel eşleme sunan xml_struct crate'i oluşturuldu
    • EWS için tür tanımları ile xml_struct ve serde tabanlı XML serileştirme/serileştirmeden çıkarma API'si sağlayan ews crate'i oluşturuldu

Gelecek planları

  • Bir sonraki büyük özellik geliştirmelerinden önce otomatik testler genişletiliyor
    • Birim testlerinin yanında, sahte bir EWS sunucusu kurularak entegrasyon testleri de yürütülüyor
  • Hata işleme tarafında iyileştirme çalışmaları sürüyor
    • EWS'nin hata davranışı iyi belgelenmediği için protokol seviyesi ve kullanıcı müdahalesi gereken seviye gibi farklı katmanlarda ele alınması gerekiyor
  • EWS protokol desteğini genişletme ve Thunderbird arayüzüyle entegrasyon çalışmaları devam ediyor
    • Kısa süre önce EWS hesabı ekleme, uzak sunucudan klasör hiyerarşisini senkronize etme ve klasörleri arayüzde gösterme gibi özellikler tamamlandı
    • Sıradaki adımlar uzak sunucudan ileti listesi getirme ve Thunderbird'ün giden posta desteğini genelleştirme olacak
  • Gelecekte bakım kolaylığını sağlamak için tüm çalışmalar belgeleniyor
    • Mevcut Thunderbird posta protokolü mimarisi ve iyileştirme yönlerine dair dokümantasyon da hazırlanıyor

GN⁺ görüşü

  • Thunderbird'a Rust getirilerek eski mimarinin modernleştirilmesi oldukça olumlu bir değişim gibi görünüyor. Rust'ın avantajlarından yararlanırken mevcut kod tabanıyla uyumluluğu korumak için çeşitli çabalar gösteriliyor.
  • Geliştirme sürecinde ortaya çıkan xpcom_async, moz_http, xml_struct, ews gibi crate'ler Thunderbird dışındaki projelerde de faydalı olabilir.
  • Ancak Thunderbird'ün eski mimarisi ve Firefox kod tabanına bağımlı build sistemi, Rust benimsenmesi için gelecekte de engel oluşturabilir. Uzun vadede bu sorunları çözmeye yönelik çalışmalar da gerekli görünüyor.
  • EWS, şirketler ve eğitim kurumlarında yaygın kullanılan bir e-posta hizmeti olduğundan, Thunderbird'de EWS desteğinin gelmesi kullanıcı tabanını genişletmeye önemli katkı sağlayabilir. Ancak EWS Microsoft'a ait kapalı bir protokol olduğu için bunu açık kaynak bir projede uygulamak zor olabilir.
  • Genel olarak Thunderbird projesi, Rust'ın benimsenmesini fırsat bilerek mimari modernizasyon ve özellik genişletme için aktif şekilde çalışıyor gibi görünüyor. Açık kaynak e-posta istemcilerinin önde gelen temsilcilerinden biri olarak Thunderbird'ün gelişimi kullanıcılara büyük fayda sağlayacaktır.

1 yorum

 
GN⁺ 2024-04-21
Hacker News görüşleri
  • EWS'nin 2 yıl sonra kaldırılması planlanmasına rağmen bunun neden uygulandığı sorgulanıyor
  • Thunderbird'ün, Firefox Quantum güncellemesinden önceki gibi yavaş olma sorunu yaşadığı belirtiliyor. Binlerce e-postanın bulunduğu klasörler arasında geçişte gecikme oluyor, ancak Outlook'ta geçiş anında gerçekleşiyor
  • Stratejik olarak insanların Thunderbird kullanmasını sağlamak hedefleniyorsa bu mantıklı, ancak ideolojik açıdan JMAP desteğinin daha iyi olacağı görüşü dile getiriliyor
  • 20 yıl önce BT sektöründe Linux kullanan az kişi varken Exchange istemcisi bulmanın zor olduğu dönem hatırlatılıyor
  • Başlığın Rust programlamayla ilgili olacak şekilde değiştirilmiş olmasına rağmen, asıl içeriğin Thunderbird'ün Exchange desteğiyle ilgili olmadığına dikkat çekiliyor
  • Exchange'ten hoşlanılmadığı, ancak Windows'ta düz metin e-posta gönderebilmenin sevindirici olduğu ifade ediliyor
  • Outlook'tan geçişte kullanıcıların kolayca geçebilmesi için PST dosyası içe aktarma özelliğinin varsayılan olarak sunulması gerektiği öneriliyor
  • Thunderbird'ün EWS desteği açısından Gnome'un Evolution uygulamasıyla rekabet edebilecek uygun bir rakip olması umuluyor
  • SMTP/2 + IMAP5 gibi yeni protokollere acilen ihtiyaç olduğu vurgulanıyor
  • OWL eklentisini kullanmak zorunda kalınan durumlarda bu iyileştirmenin memnuniyet verici olacağı belirtiliyor