- 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
Hacker News görüşleri