1 ポイント 投稿者 GN⁺ 2024-04-21 | 1件のコメント | WhatsAppで共有
  • 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_asyncmoz_httpxml_structewsといったクレートは、Thunderbird以外の他プロジェクトでも有用に活用できそうだ。
  • ただし、Thunderbirdの古いアーキテクチャや、Firefoxコードベースに依存したビルドシステムなどは、今後もRust導入の障害になり得る。長期的には、こうした問題を解決するための取り組みも必要に見える。
  • EWSは企業や教育機関で広く使われているメールサービスであるだけに、ThunderbirdがEWSをサポートすれば、ユーザー基盤の拡大に大きく役立つと見られる。ただし、EWSはMicrosoftの独自プロトコルであるため、オープンソースプロジェクトで実装するには難しさがあるかもしれない。
  • 全体として、ThunderbirdプロジェクトはRust導入をきっかけに、アーキテクチャのモダン化と機能拡張に向けて活発に取り組んでいるように見える。オープンソースメールクライアントの代表格として、Thunderbirdの進化はユーザーに大きな恩恵をもたらすだろう。

1件のコメント

 
GN⁺ 2024-04-21
Hacker Newsの意見
  • EWSが2年後に削除予定であるにもかかわらず、なぜ実装するのかという疑問が呈されている
  • ThunderbirdにはFirefox Quantumアップデート以前のように動作が遅い問題があり、数千件のメールがあるフォルダー間の切り替えで遅延が発生するが、Outlookでは即座に切り替わる
  • 戦略的に人々にThunderbirdを使ってもらうことが目的なら妥当だが、理念的にはJMAP対応のほうが望ましいという意見が示されている
  • 20年前、IT業界でLinuxを使う人が少なかった頃、Exchangeクライアントを見つけるのが難しかった状況を振り返っている
  • タイトルはRustプログラミングに関する内容へ変更されたが、実際の内容はThunderbirdのExchange対応に関するものではないという指摘がある
  • Exchangeは嫌いだが、Windowsでプレーンテキストメールを送れるようになるのはうれしいという意見が述べられている
  • Outlookから移行する際には、PSTファイルのインポート機能を標準で提供し、ユーザーが簡単に移行できるようにすべきだという提案がある
  • ThunderbirdがEWS対応の面でGnomeのEvolutionと競争できる適切な競合相手になることを期待している
  • SMTP/2 + IMAP5 などの新しいプロトコルがぜひとも必要だと強調している
  • OWL拡張機能を使わざるを得なかった状況において、今回の改善は歓迎されるだろうという意見が示されている