- Thunderbird đang được phát triển để bổ sung tính năng hỗ trợ Exchange bằng ngôn ngữ Rust
- Trong bản ESR (Extended Support) tiếp theo dự kiến phát hành vào tháng 7, trước mắt sẽ chỉ hỗ trợ email; các tính năng lịch và sổ địa chỉ sẽ được hỗ trợ sau
- Brendan Abolivier, Ikey Doherty và Sean Burke đang thực hiện công việc này
Lý do chọn ngôn ngữ Rust
- Thunderbird là một dự án lâu đời và có nhiều mã C++ cũ
- Để phát triển tính năng mới, cần một ngôn ngữ vừa mạnh mẽ vừa có khả năng bảo trì lâu dài
- Rust có các ưu điểm như an toàn bộ nhớ, hiệu năng, tính mô-đun và hệ sinh thái
- Hạ tầng CI dùng chung với Firefox đã hỗ trợ Rust sẵn
- Có thể gọi qua lại giữa Rust, C++ và JavaScript thông qua XPCOM
- Có thể tận dụng các công cụ mạnh của Rust để cải thiện kiến trúc cũ
- Rust hỗ trợ nhiều nền tảng, nên cũng có thể tái sử dụng trong các dự án khác như Thunderbird cho Android/K-9 Mail
Những khó khăn đã gặp phải
- Trong mã hiện có có nhiều mẫu bất đồng bộ không phù hợp tốt với Rust
- Trong codebase của Firefox và Thunderbird có nhiều tính năng chưa có Rust binding
- Hệ thống build của Thunderbird dùng cách mang mã Firefox vào dưới dạng subtree nên việc tích hợp mã Rust gặp khó khăn
- Do không thể lồng Cargo workspace, nhóm đã giải quyết bằng cách sửa công cụ build
mach
- XPCOM ban đầu được thiết kế cho C++, nên khi dùng từ Rust cần rất nhiều mã boilerplate
- Nhóm đã giải quyết bằng cách triển khai logic theo từng giao thức bằng Rust và tạo các bridge class bằng C++ để kết nối với mã hiện có
Triển khai hỗ trợ Exchange bằng Rust
- API EWS (Exchange Web Services) giao tiếp qua HTTP và sử dụng các yêu cầu/phản hồi ở định dạng XML
- Để gửi yêu cầu HTTP, nhóm dùng thành phần mạng necko của Firefox, nhưng vì được expose qua XPCOM nên khá bất tiện khi sử dụng
- Tạo crate
xpcom_async để chuyển các tác vụ bất đồng bộ của XPCOM sang cú pháp async/await của Rust
- Tạo crate
moz_http để cung cấp API HTTP client theo phong cách reqwest
- Nhóm từng định dùng các crate có sẵn để xử lý yêu cầu/phản hồi XML, nhưng chúng không đáp ứng được yêu cầu của EWS
- Tạo crate
xml_struct để cung cấp ánh xạ trực quan giữa struct dữ liệu Rust và XML
- Tạo crate
ews để cung cấp định nghĩa kiểu cho EWS cùng API tuần tự hóa/giải tuần tự hóa XML dựa trên xml_struct và serde
Kế hoạch sắp tới
- Đang mở rộng kiểm thử tự động trước khi phát triển các tính năng lớn tiếp theo
- Ngoài unit test, nhóm cũng đang tạo máy chủ EWS mô phỏng để chạy integration test
- Đang cải thiện xử lý lỗi
- Do cách EWS xử lý lỗi chưa được tài liệu hóa đầy đủ, cần xử lý ở nhiều tầng khác nhau như mức giao thức và mức cần người dùng can thiệp
- Đang mở rộng hỗ trợ giao thức EWS và tích hợp với UI của Thunderbird
- Gần đây đã hoàn tất các tính năng như thêm tài khoản EWS, đồng bộ cây thư mục từ máy chủ từ xa và hiển thị thư mục trong UI
- Tiếp theo là lấy danh sách thư từ máy chủ từ xa và khái quát hóa tính năng hỗ trợ thư gửi đi của Thunderbird
- Sẽ tài liệu hóa toàn bộ công việc để bảo đảm khả năng bảo trì về sau
- Cũng đang tài liệu hóa kiến trúc giao thức mail hiện có của Thunderbird và hướng cải tiến
Ý kiến của GN⁺
- Việc đưa Rust vào Thunderbird để hiện đại hóa kiến trúc cũ là một thay đổi rất tích cực. Dự án đang nỗ lực theo nhiều hướng để tận dụng ưu điểm của Rust mà vẫn duy trì khả năng tương thích với codebase hiện có.
- Các crate như
xpcom_async, moz_http, xml_struct, ews được tạo ra trong quá trình phát triển có vẻ cũng có thể hữu ích cho những dự án khác ngoài Thunderbird.
- Tuy vậy, kiến trúc cũ của Thunderbird và hệ thống build phụ thuộc vào codebase Firefox vẫn có thể tiếp tục là rào cản đối với việc đưa Rust vào trong tương lai. Về dài hạn, có lẽ cũng cần thêm nỗ lực để giải quyết các vấn đề này.
- Vì EWS là dịch vụ email được dùng nhiều trong doanh nghiệp và các tổ chức giáo dục, việc Thunderbird hỗ trợ EWS có thể giúp mở rộng đáng kể tệp người dùng. Tuy nhiên, do EWS là giao thức độc quyền của Microsoft, việc triển khai trong một dự án mã nguồn mở có thể gặp khó khăn.
- Nhìn chung, dự án Thunderbird dường như đang tích cực tận dụng việc đưa Rust vào để hiện đại hóa kiến trúc và mở rộng tính năng. Với vai trò là một trong những trình khách email mã nguồn mở tiêu biểu, sự phát triển của Thunderbird sẽ mang lại nhiều lợi ích cho người dùng.
1 bình luận
Ý kiến trên Hacker News