- ThunderbirdにExchangeサポート機能を追加するため、Rust言語を使って開発中
- 7月にリリース予定の次期ESR(Extended Support)版では、まずメールのみをサポートし、カレンダーとアドレス帳機能は後日対応予定
- Brendan Abolivier、Ikey Doherty、Sean Burkeがこの作業を進めている
Rust言語を選んだ理由
- Thunderbirdは長い歴史を持つプロジェクトで、多くの古いC++コードを抱えている
- 新機能の開発には、強力で長期的な保守性を備えた言語が必要
- Rustには、メモリ安全性、性能、モジュール性、エコシステムなどの利点がある
- Firefoxと共有しているCIインフラがすでにRustをサポートしている
- XPCOMを通じて、Rust、C++、JavaScript間で呼び出しが可能
- Rustの強力なツールを活用して、古いアーキテクチャを改善できる
- Rustは多様なプラットフォームをサポートしており、Thunderbird for Android/K-9 Mailなど他のプロジェクトでも再利用できる
直面した課題
- 既存コードには、Rustと相性のよくない非同期パターンが多い
- FirefoxとThunderbirdのコードベースには、Rustバインディングのない機能が多い
- ThunderbirdのビルドシステムはFirefoxコードをサブツリーとして取り込む方式のため、Rustコードの統合が難しかった
- Cargoワークスペースをネストできないため、ビルドツール
machを修正して対応
- XPCOMはもともとC++向けに設計されており、Rustで使うには多くのboilerplateコードが必要
- Rustでプロトコルごとのロジックを実装し、C++でブリッジクラスを作って既存コードと結合する方式で解決
RustによるExchangeサポートの実装
- EWS(Exchange Web Services)APIはHTTPで通信し、XML形式のリクエストとレスポンスを使う
- HTTPリクエスト送信にはFirefoxのneckoネットワーキングコンポーネントを使うが、XPCOM経由で公開されているため使いにくい
xpcom_asyncクレートを作成し、XPCOMの非同期処理をRustのasync/await構文に変換
moz_httpクレートを作成し、reqwestスタイルのHTTPクライアントAPIを提供
- XMLリクエスト/レスポンス処理のため既存クレートを使おうとしたが、EWSの要件を満たせなかった
xml_structクレートを作成し、Rustのデータ構造体とXMLの直感的なマッピングを提供
ewsクレートを作成し、EWS向けの型定義とxml_structおよびserdeベースのXMLシリアライズ/デシリアライズAPIを提供
今後の計画
- 次の主要機能開発に先立ち、自動テストを拡充中
- 単体テストに加えて、模擬EWSサーバーを作成して統合テストを進めている
- エラー処理の改善作業を進行中
- EWSのエラー動作は十分に文書化されておらず、プロトコルレベルからユーザー介入が必要なレベルまで、さまざまな層での処理が必要
- EWSプロトコル対応の拡大とThunderbird UIとの連携作業を進行中
- 最近、EWSアカウント追加、リモートサーバーからのフォルダー階層同期、UIへのフォルダー表示などの機能実装を完了
- 次はリモートサーバーからのメッセージ一覧取得と、Thunderbirdの送信メールサポート機能の一般化を予定
- すべての作業について文書化を進め、今後の保守性を確保する予定
- 既存Thunderbirdのメールプロトコルアーキテクチャと改善方向についての文書化も進行中
GN⁺の見解
- ThunderbirdにRustを導入して古いアーキテクチャをモダン化するのは、非常に前向きな変化に見える。Rustの利点を生かしつつ、既存コードベースとの互換性を維持するためにさまざまな努力が払われている。
- 開発過程で作られた
xpcom_async、moz_http、xml_struct、ewsといったクレートは、Thunderbird以外の他プロジェクトでも有用に活用できそうだ。
- ただし、Thunderbirdの古いアーキテクチャや、Firefoxコードベースに依存したビルドシステムなどは、今後もRust導入の障害になり得る。長期的には、こうした問題を解決するための取り組みも必要に見える。
- EWSは企業や教育機関で広く使われているメールサービスであるだけに、ThunderbirdがEWSをサポートすれば、ユーザー基盤の拡大に大きく役立つと見られる。ただし、EWSはMicrosoftの独自プロトコルであるため、オープンソースプロジェクトで実装するには難しさがあるかもしれない。
- 全体として、ThunderbirdプロジェクトはRust導入をきっかけに、アーキテクチャのモダン化と機能拡張に向けて活発に取り組んでいるように見える。オープンソースメールクライアントの代表格として、Thunderbirdの進化はユーザーに大きな恩恵をもたらすだろう。
1件のコメント
Hacker Newsの意見