- Thunderbird sedang dikembangkan untuk menambahkan dukungan Exchange menggunakan bahasa Rust
- Pada versi ESR (Extended Support) berikutnya yang dijadwalkan rilis pada Juli, prioritas awal adalah dukungan email terlebih dahulu, sedangkan fitur kalender dan buku alamat akan didukung kemudian
- Brendan Abolivier, Ikey Doherty, dan Sean Burke sedang mengerjakan hal ini
Alasan memilih bahasa Rust
- Thunderbird adalah proyek lama yang memiliki banyak kode C++ lawas
- Untuk mengembangkan fitur baru, dibutuhkan bahasa yang kuat sekaligus mudah dipelihara dalam jangka panjang
- Rust memiliki keunggulan seperti keamanan memori, performa, modularitas, dan ekosistem
- Infrastruktur CI yang dibagikan dengan Firefox sudah mendukung Rust
- Melalui XPCOM, pemanggilan antar Rust, C++, dan JavaScript dimungkinkan
- Perangkat Rust yang kuat dapat dimanfaatkan untuk memperbaiki arsitektur lama
- Rust mendukung berbagai platform sehingga bisa digunakan ulang di proyek lain seperti Thunderbird untuk Android/K-9 Mail
Tantangan yang dihadapi
- Banyak pola asinkron di kode lama yang tidak cocok dengan Rust
- Di codebase Firefox dan Thunderbird, ada banyak fitur yang belum memiliki binding Rust
- Sistem build Thunderbird mengambil kode Firefox sebagai subtree sehingga integrasi kode Rust menjadi sulit
- Karena Cargo workspace tidak bisa dinest, masalah ini diselesaikan dengan memodifikasi alat build
mach
- XPCOM pada dasarnya dirancang untuk C++, sehingga penggunaan dari Rust membutuhkan banyak boilerplate
- Masalah ini diatasi dengan mengimplementasikan logika per protokol di Rust lalu membuat kelas bridge di C++ untuk menghubungkannya dengan kode yang sudah ada
Implementasi dukungan Exchange dengan Rust
- API EWS (Exchange Web Services) berkomunikasi lewat HTTP dan menggunakan permintaan serta respons dalam format XML
- Untuk mengirim permintaan HTTP, digunakan komponen jaringan
necko milik Firefox, tetapi pemakaiannya kurang nyaman karena diekspos melalui XPCOM
- Dibuat crate
xpcom_async untuk mengubah operasi asinkron XPCOM ke sintaks async/await milik Rust
- Dibuat crate
moz_http untuk menyediakan API klien HTTP bergaya reqwest
- Untuk memproses permintaan/respons XML, awalnya ingin memakai crate yang sudah ada, tetapi tidak memenuhi kebutuhan EWS
- Dibuat crate
xml_struct untuk menyediakan pemetaan yang intuitif antara struktur data Rust dan XML
- Dibuat crate
ews untuk menyediakan definisi tipe EWS serta API serialisasi/deserialisasi XML berbasis xml_struct dan serde
Rencana ke depan
- Sebelum pengembangan fitur utama berikutnya, cakupan pengujian otomatis sedang diperluas
- Selain unit test, integrasi test juga sedang dilakukan dengan membuat server EWS tiruan
- Pekerjaan perbaikan penanganan error sedang berlangsung
- Karena perilaku error EWS tidak terdokumentasi dengan baik, penanganan perlu dilakukan di berbagai lapisan, dari level protokol hingga level yang memerlukan intervensi pengguna
- Dukungan protokol EWS terus diperluas dan integrasi dengan UI Thunderbird sedang dikerjakan
- Baru-baru ini telah selesai diimplementasikan fitur penambahan akun EWS, sinkronisasi hierarki folder dari server jarak jauh, dan penampilan folder di UI
- Berikutnya adalah mengambil daftar pesan dari server jarak jauh dan menggeneralisasi dukungan surat keluar di Thunderbird
- Dokumentasi untuk seluruh pekerjaan juga sedang disusun demi memastikan kemudahan pemeliharaan di masa depan
- Dokumentasi mengenai arsitektur protokol email Thunderbird yang ada saat ini dan arah perbaikannya juga sedang dikerjakan
Opini GN⁺
- Mengadopsi Rust di Thunderbird untuk memodernisasi arsitektur lama terlihat sebagai perubahan yang sangat positif. Mereka berupaya dengan berbagai cara untuk memanfaatkan keunggulan Rust sambil tetap menjaga kompatibilitas dengan codebase yang ada.
- Crate seperti
xpcom_async, moz_http, xml_struct, dan ews yang dibuat selama proses pengembangan tampaknya juga dapat berguna di proyek lain di luar Thunderbird.
- Namun, arsitektur lama Thunderbird dan sistem build yang bergantung pada codebase Firefox masih bisa menjadi hambatan bagi adopsi Rust ke depan. Dalam jangka panjang, tampaknya diperlukan upaya tambahan untuk menyelesaikan masalah-masalah ini.
- Karena EWS adalah layanan email yang banyak digunakan di perusahaan dan institusi pendidikan, dukungan EWS di Thunderbird kemungkinan besar akan sangat membantu memperluas basis pengguna. Namun, karena EWS merupakan protokol proprietari milik Microsoft, implementasinya dalam proyek open source bisa saja menghadapi kesulitan.
- Secara keseluruhan, proyek Thunderbird tampak aktif berupaya memodernisasi arsitektur dan memperluas fitur dengan momentum adopsi Rust. Sebagai salah satu klien email open source terdepan, perkembangan Thunderbird akan memberi manfaat besar bagi para pengguna.
1 komentar
Opini Hacker News