Mozilla Thunderbird, Exchange desteğini yerel olarak getiriyor
(blog.thunderbird.net)- Kurumlarda ve eğitim kuruluşlarında yaygın olarak kullanılan Microsoft Exchange, Thunderbird tarafından 2024 Temmuz ESR’den itibaren yerel olarak desteklenecek; ilk kapsam e-postayla sınırlı olacak
- Bu çalışma, Exchange Web Services(EWS) desteğinin ötesinde, 20 yılı aşkın süredir devam eden posta protokolü mimarisi ile eski C++ kodunun sınırlamalarını kademeli olarak düzenlemek için bir fırsat oluşturuyor
- Uygulama dili olarak Rust seçildi; bunun başlıca nedenleri bellek güvenliği, yerel performans, modülerlik ve Firefox ile paylaşılan CI ile XPCOM birlikte çalışabilirliği
- EWS entegrasyonu sürecinde
xpcom_async,moz_http,xml_struct,ewsgibi crate’ler oluşturuldu; bunlar XPCOM tabanlı HTTP çağrılarını ve XML serileştirmeyi Rust dostu şekilde sarıyor - EWS, Exchange Online’da Ekim 2026’dan sonra kullanılamayacak olsa da, çok sayıda şirket içi Exchange Server kullanıcısı bulunduğu için Thunderbird açısından hâlâ gerekli bir destek
2024 Temmuz ESR’de Exchange desteğinin kapsamı
- Thunderbird, bir sonraki ESR(Extended Support) sürümünde 2024 Temmuz’da Exchange desteğini yerel olarak sunmayı planlıyor
- İlk kapsam e-posta ile sınırlı
- Takvim ve adres defteri desteği daha sonra eklenecek
- Yakın zamana kadar Exchange özellikleri yalnızca eklentiler aracılığıyla kullanılabiliyordu
- Hedeflenen uygulama, Microsoft’un Exchange Web Services(EWS) API’si
- EWS, HTTP üzerinde çalışır
- İstek ve yanıt gövdelerinde XML kullanır
20 yılı aşan posta mimarisinin yükü
- Thunderbird’ün mevcut posta protokolü mimarisi, Thunderbird’ten daha eski koda dayanıyor
- 20 yıldan uzun süre önce Netscape Communicator’ın bir parçası olarak geliştirildi
- Mozilla, 2012’de Thunderbird’ün sahipliğini topluluğa devrettikten sonra, 2017’de yeniden Mozilla Foundation’a katılana kadar ücretli bakım yapılmadı
- Büyük bir mimari yön olmadan geçici değişiklikler biriktikçe, modern standartları kullanmayan çok sayıda C++ kodu kaldı
- Thunderbird projesinin 20 yıllık tarihinde yeni posta protokolü desteği hiç eklenmedi
- Posta protokolleri modern kullanım kalıplarına göre değişirken ilgili yapı güncellenemedi
- Kurumsal bilgi birikiminin önemli bir kısmı da kaybolmuş durumda
- Exchange desteği, Thunderbird mimarisinin sınırlarını anlayıp bunları kademeli olarak çözmeye yönelik ilk organizasyon öncülüğündeki çalışma
Neden Rust seçildi
- Thunderbird’ün yeni protokol desteği için uygulama dili olarak Rust seçildi
- Seçim arkasında Rust’ın genel avantajları ile Thunderbird’e özgü koşullar birlikte yer alıyor
- Bellek güvenliği: Thunderbird, e-posta gönderebilen herkesten girdi aldığı için güvenlik açıklarını azaltmak önemli
- Performans: Rust yerel kod olarak çalışır
- Modülerlik ve ekosistem: Rust’ın modül yapısı ve e-posta ile ilgili ekosisteminden yararlanılabiliyor
- Thunderbird, Firefox kodu üzerine kurulu olduğu için Rust benimsemek için gerekli koşullar zaten mevcut
- Firefox ile paylaşılan CI altyapısı Rust’ı destekliyor
- Firefox’un XPCOM(Cross-Platform Component Object Model) birlikte çalışabilirlik katmanı sayesinde Rust, C++ ve JavaScript arasında çağrılar yapılabiliyor
- Rust’ın tip sistemi ve araçları, yanlış kullanılmasının zor olduğu API’ler oluşturmaya yardımcı oluyor
- Döngüsel referanslardan kaçınmak veya anlamsız değerlerle çağrılamayan fonksiyonlar yazmak mümkün
- Belgeleme araçlarının dile yerleşik gelmesi küçük ekipler için faydalı
- Modüler crate’ler olarak geliştirildiğinde Thunderbird for Android/K-9 Mail gibi başka projelerde de yeniden kullanılabiliyor
Derleme sistemi ve XPCOM kısıtları
- Thunderbird içinde ilk Rust bileşenini çalıştırırken derleme sistemi ilk engel oldu
- Thunderbird, Firefox koduna sıradan bir bağımlılık gibi eklenen bir yapıda değil
- Derleme sırasında Firefox kodu alınıyor
- Thunderbird kodu, Firefox’un bir alt ağacı olarak içe alınıyor
- Derleme yapılandırma dosyasıyla bu alt ağaç işaret ediliyor
- Firefox, tüm ağaç için Cargo bağımlılık grafiği oluşturmak amacıyla tek tek crate’leri tek bir Cargo workspace içinde topluyor
- Thunderbird’ün de kendi Cargo workspace’ine ihtiyacı vardı ancak Cargo iç içe workspace’lere izin vermiyor
- Çözüm olarak Thunderbird’e ait ayrı bir workspace tanımlandı ve üst derleme aracı
mach, Firefox workspace’i yerine bunu derleyecek şekilde ayarlandı - Yeni
machalt komutlarıyla bağımlılıklar ve lockfile üst yapıyla senkronize ediliyor, ardından ortaya çıkan superset vendoring işlemine alınıyor
- XPCOM, C++ merkezli tasarlandığı için Rust geliştirme deneyimi akıcı değil
- XPCOM arayüzlerini uygulamak ve kullanmak için çok sayıda boilerplate gerekiyor
rust-analyzergibi araçlardan tam verim almak zor- Firefox, XPCOM bağımlılığını büyük ölçüde azalttı ancak Thunderbird bakım boşluğu sırasında benzer bir temizlik yapamadı
- Yeni posta protokolü desteği için XPCOM’da tanımlı yüzlerce fonksiyonun uygulanması gerekiyor
- Mevcut protokol uygulamaları, ortak davranış sağlayan C++ sınıflarını miras alarak bu yükü azaltıyor
- Rust’ta bu doğrudan yapılamadığı için protokole özgü mantık Rust’ta uygulanıyor
- C++ köprü sınıfları, dahili
ews_xpcomcrate’ini mevcut ortak davranış koduna bağlıyor
- Thunderbird’de Rust bileşenleri oluşturma yöntemi belgede açıklanıyor
HTTP isteklerini Rust tarzında ele almak
- Firefox’ta
neckoağ bileşeni üzerinden hazır bir HTTP yığını zaten bulunuyor necko, C++ ile yazılmış ve XPCOM üzerinden açığa çıkarılmış durumda; bu yüzden Rust’ta doğrudan kullanımı çok fazla boilerplate gerektiriyor- Basit bir GET isteği için bile çok sayıda XPCOM nesnesi oluşturmak gerekiyor
- XPCOM işaretçi ömrünü yönetiyor ama Rust derleyicisi bunun farkında olmadığı için
unsafeblokları gerekiyor - Gerekli arayüzler callback tabanlı
- Thunderbird’ün dahili
xpcom_asynccrate’i, XPCOM asenkron işlerini Rust’ın async/await söz dizimine dönüştürüyor- Callback ile gelen veriyi tamponluyor
- Rust’ın
Futuretrait’ini uygulayarak çağıranınawaitkullanabilmesini sağlıyor - Rust’taki
Future, JavaScript’tekiPromiseveya Python coroutine’lerine benziyor
- Dahili
moz_httpcrate’i,reqwest’ten ilham alan bir HTTP istemcisi sunuyor- Gerekli XPCOM nesnelerinin oluşturulmasını üstleniyor
- Standart XPCOM hata işlemeden daha Rust tarzı bir hata yönetimi sağlıyor
EWS XML serileştirmesi ve yeni crate’ler
- EWS’de en zor iş, Thunderbird’ün dahili veri yapıları ile EWS’nin istediği ya da sunduğu XML arasında dönüşüm yapmak
- Mevcut XML serileştirme/ters serileştirme crate’leri gereksinimleri karşılamadı
serdeveri modeli XML ile iyi uyuşmuyor; öznitelikler ile öğeleri ayırmak zor- EWS, XML namespace’lerine duyarlı ancak bu
serdeiçin alışıldık bir kavram değil - XML için
serdetabanlı crate’ler, tüm alanların serileştirme biçiminin açıkça anotasyonla belirtilmesini gerektiriyor - EWS yüzlerce tip ve her tip için onlarca alan tanımladığından boilerplate yükü taşınamaz hale geliyor
- Mevcut
serdetabanlı uygulama, XML’i Rust’a ters serileştirmek için yeterliydi ancak tatmin edici bir serileştirme aracı bulunamadı - Yeni crate
xml_struct, XML serileştirme davranışını tanımlayan trait’ler ve prosedürel derive macro sağlıyor- Rust veri yapıları için trait uygulamalarını otomatik üretiyor
- Mevcut
quick_xmlcrate’i üzerine inşa edildi - XML ile Rust arasında daha az boilerplate içeren bir eşleme hedefliyor
- Thunderbird/Firefox iç bağımlılıkları yok ve erken geliştirme aşamasında
- Yeni crate
ews, EWS işlemleri için tipleri ve XML serileştirme/ters serileştirme API’lerini tanımlıyorxml_structveserdetemelli- Erken geliştirme aşamasında ve GitHub’da açık olarak yayımlanmış durumda
Testler, hata yönetimi ve UI bağlantı planı
- Bir sonraki önemli özellikler eklenmeden önce otomatik testler güçlendiriliyor
- Yalnızca birim testleri değil, entegrasyon testleri için sahte bir EWS sunucusu da eklendi
- Testlerin güçlendirilmesi sürecinde bazı çökme ve double-sync sorunları ortaya çıktı ve düzeltildi
- Böylece yeni özellikleri daha kolay test etmek ve doğrulamak mümkün hale geldi
- EWS hata yönetimi iyileştiriliyor
- EWS’nin hata davranışı çoğu zaman yetersiz belgelenmiş durumda
- Tüm istek throttling veya hatalı yapı nedeniyle başarısız olabilir
- İsteğin bazı bölümleri başarılı olurken bazıları hatalı kimlikler nedeniyle başarısız olabilir
- Bazı hatalar protokol seviyesinde ele alınabilirken bazıları kullanıcı müdahalesi gerektirebilir veya çözülmesi zor olabilir
- EWS protokol desteği,
ewsve dahiliews_xpcomcrate’leri üzerinden genişletiliyor ve Thunderbird arayüzüne bağlanıyor- Son yamalarla Thunderbird’e EWS hesabı eklemek mümkün hale geldi
- Uzak sunucudaki hesap klasör hiyerarşisi senkronize edilebiliyor
- Senkronize edilen klasörler arayüzde gösterilebiliyor
- Şu anda alfa durumundaki bu özellik derleme bayrakları ve ayar değerlerinin arkasında gizli
- Sıradaki çalışma, uzak sunucudan ileti listesini getirme ve Thunderbird’ün giden posta desteğini genelleştirme
- Bakımı kolaylaştırmak için her bileşenin nasıl bir araya geldiği, mevcut Thunderbird posta protokolü mimarisi ve gelecekteki iyileştirme yönleri belgeleniyor
EWS ile Microsoft Graph arasındaki ilişki
- EWS, Exchange Online üzerinde Ekim 2026’dan sonra kullanılamayacak
- Proje ön araştırması, şirket içi Exchange Server kullanmaya devam eden önemli sayıda kullanıcı olduğunu gösterdi
- Birçok şirket ve eğitim kurumu Exchange Server’ı kendi donanımı üzerinde çalıştırıyor
- Bu tür şirket içi kurulumlar genellikle EWS’yi destekliyor
- Azure tabanlı Graph API’yi destekleyemiyorlar
- EWS desteği, yakın gelecekte bu kullanıcıları desteklemenin bir yolu olacak
- Graph API tarafında hâlâ çözülmemiş bazı sorunlar var
- Graph API, masaüstü uygulamalarından çok web tabanlı servisler düşünülerek tasarlandı
- Önce EWS desteğini eklemek, Graph API desteği geliştirilmeden önce bu sorunlara çözüm bulmak için zaman kazandırabilir
- Rust ve EWS çalışmaları, Thunderbird’ün geri dönüş süresini azaltma ve yazılımın çekirdek kısmının dayanıklılığını artırmaya yönelik daha geniş bir çabanın parçası
1 yorum
Hacker News yorumları
EWS zaten emekliye ayrılacak ve 2 yıl sonra kaldırılacak denirken bunu neden uyguladıklarını anlamıyorum: https://techcommunity.microsoft.com/t5/exchange-team-blog/re...
EWS ortadan kalkarsa epey müşteri de ayrılacaktır; başta Microsoft'un sonuçlarını etkileyecek kadar olmayabilir
Sonunda tüm e-postaların eşit olduğu ortaya çıkar ve Exchange Online tarihte bir dipnot hâline gelebilir. Microsoft'un e-posta işinde büyük çuvallamış olması dışarıdan biraz utandırıcı görünür ama gerçekte ille de öyle değil
Bir e-posta sistemi işletmek acı verici; Microsoft'un gerçekten istediği şey, kazıp çıkarıp başka veri takıntılılarına satabileceği veri ve metaveriden ibaret. E-posta, depolama alanı açısından çoğunlukla statik ve büyük olsa da kişiler arası alışverişten altın madeni çıkabilir
İdeal olan, bu acıyı AWS, Google gibi yerlere yükleyip müşterilere Outlook kullandırmak. Sonra da yeni Electron sürümü Outlook'ta olduğu gibi kimlik bilgilerini Microsoft bulutunda saklayacak şekilde değiştirip, bu kimlik bilgileriyle başkalarının bulutlarındaki e-posta verilerini kazımak; depolama maliyetini de onlar üstlenir. Harika
Graph API de değerlendirildi ve ileride yeniden değerlendirilebilir; ancak şu anda EWS'ye göre destek kapsamı daha dar ve masaüstü uygulamalarının ihtiyaç duyduğu bazı özelliklerden yoksun
Exchange Online'da EWS desteğinin kaldırılacağı duyurulmuş olsa da, kısa vadede geniş bir kullanıcı kitlesine erişim sağlaması ve uzun vadede şirket içi kurulum kullanıcılarını desteklemesi açısından hâlâ değerli
Amaç sadece Thunderbird kullanıcı sayısını artırmaksa stratejik olarak mantıklı; fakat ideolojik açıdan JMAP desteği çok daha iyi görünüyor
Yakın zamanda Outlook yerine Thunderbird'ü denedim; Quantum güncellemesi öncesi Firefox'la aynı sorun vardı. Çok yavaş
Yüzlerce ila binlerce e-posta içeren klasörler arasında geçiş yaparken gözle görülür bir gecikme oluyor; Outlook'ta ise geçiş fiilen anında
Takvim tarafında ise tam tersi, bu yüzden şu anda ikisini yan yana çalıştırıyorum. Sorunlardan biri, işte kullanmak zorunda olduğum Outlook sunucusuna giden iCal köprüsü gibi görünüyor
Bu duyuruyla o kısım ne yazık ki değişmiyor. Bir süre Ericsson'ın sürdürdüğü EWS eklentisini kullanmıştım: https://github.com/Ericsson/exchangecalendar
Ancak Mozilla arayüzleri hızla kırarak birçok eklenti geliştiricisini uzaklaştırmış gibi görünüyor. Şimdi bazı işlevleri yeniden çekirdeğe koyuyorlar; bunun iyi bir strateji olduğundan emin değilim. Bence bunun yerine kararlı arayüzlere odaklanmalılar
Exchange'den nefret ediyorum ama bu çalışma sevindirici. Artık Windows'a mahkûm olduğum durumlarda bile Exchange üzerinden düz metin e-posta göndermeyi başarabilirim belki
Düz metin e-postaların daha makul bir şekilde değil de sabit genişlikli yazı tipiyle render edilmesinin ne kadar yaygın olduğunu gördükten sonra, sırf “HTML e-posta iğrençtir” diye düz metni gerekçelendirmeyi zor buluyorum
“Thunderbird projesinin 20 yıllık tüm tarihinde kimse yeni bir posta protokolü desteği eklemedi” sözü teknik olarak doğru; ancak her büyük şirketin OAuth2 out-of-band kimlik doğrulama uygulaması, e-posta istemcisine özel ayarlar, yani geçici çözümler gerektirdi ve Thunderbird de bunlardan epeyce biriktirdi
Bunlar genel posta protokolleri değil. IMAP, POP3, SMTP değil; HTTPS üzerinde çalışıyorlar
“Hiç yeni posta protokolü eklenmemiş olması” iyi bir şey ve bu değişiklik iyi değil. Tescilli ayar desteği pratik ve anlaşılabilir, ama iyi bir şey değil
E-postanın şirketlere göre onlarca farklı varyanta bölünmesi sorununu sadece geçici olarak hafifletiyor; uzun vadede ise insanların bu varyantları kabullenmesini teşvik ediyor
Öte yandan Thunderbird'ü istemci olarak kullanabilmek net kazanç ve pratik bir tercih
Başlığın neden değiştirildiğini anlamıyorum. Bu yazı Rust programlama hakkında
“Bringing Exchange Support to Thunderbird” Thunderbird ve Exchange desteğiyle ilgili bir yazı gibi görünüyor, ama içeriği bu yazıdan anlaşılmıyor
Tescilli bir spesifikasyonu desteklemek faydalı olabilir, ama Mozilla’nın e-posta gönderim sunucusunu (SMTP) otomatik keşfetme gibi standart uygulamaları önceliklendirmesini isterdim. Örneğin rfc6186 2011’de çıktı
Şu anda kullanıcıların SMTP sunucusunun ana makine adını ve portunu elle girmesi gerekiyor; bu sitedekiler için sorun olmayabilir ama insanlığın geri kalan %99,9’u için hiç kullanıcı dostu değil
Exchange’in tamamını uygulamak için gereken çaba, DNS/SRV üzerinden gönderim sunucusu keşfinden muhtemelen birkaç mertebe daha büyüktür. Mozilla’nın önceliklerini gerçekten anlamıyorum
Bunlar özel durum olarak mı ele alınıyor?
Vay, yaklaşık 20 yıl önce BT’de çalıştığım zamanları hatırlattı. Neredeyse tamamen Microsoft ortamıydı, sadece birkaç kişi Linux kullanıyordu
Exchange her zaman düzgün bir istemci bulmanın zor olduğu şeylerden biriydi; o zamanlar bu olsaydı gerçekten havalara uçardım
Linux’ta Microsoft ürünleri kullanmak gerçekten acı verici; özellikle Edge kullanmıyorsanız Teams web sürümünü kullanımdan kaldırma sürecine girmiş gibi görünüyor :(
“2012 civarında Mozilla’nın Thunderbird’den elini çekip sahipliği topluluğa devretmesinden, 2017’de Thunderbird’ün Mozilla Foundation’a yeniden katılmasına kadar ücretli bakım olmaması” gerçekten skandaldı
Mozilla’nın tersine dönmüş önceliklerini gösteren başlıca örneklerden biri
Bundan hoşlanmayabilirsiniz; ben de çok mutlu değilim. Yine de gerçek bu ve Mozilla’nın fonlamasına değecek bir şey değildi
Outlook kurulumundan uzaklaşmak isteyenlerin Outlook’un kendisiyle uğraşmadan sorunsuz geçiş yapabilmesi için PST dosyası içe aktarmanın varsayılan olarak dahil edilmesini isterdim
PST dosyalarını okuyan ücretsiz bir proje zaten var; sadece ürün ailesine entegre edilmesi gerekiyor
Düzenleme: Ah, hayır. Yalnızca şirket içi kurulumlar içinmiş. Bu gerçekten aptalca