Sicherheit und Performance – Thunderbird stellt Exchange-Mail auf Rust um

Das Thunderbird-Team integriert die Exchange-Anbindung künftig nativ mit Rust, um Sicherheit und Performance zu erhöhen und die Modernisierung voranzutreiben.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Ein roter Briefkasten an einer blauen Holzwand.

(Bild: Fabio Balbi / Shutterstock,com)

Lesezeit: 4 Min.
Inhaltsverzeichnis

Die nächste größere Version von Thunderbird, das Extended Support Release im Juli 2024, wird eine native, in Rust geschriebene Exchange-Anbindung bieten. Diese beherrscht vorläufig nur E-Mail, die anderen Dienste wie Kalender und Adressen sollen später folgen.

Bislang war eine Exchange-Anbindung im Mail-Client nur über ein Plug-in wie Eule möglich, nun implementiert das Mozilla-Team das Exchange-Web-Services-Protokoll (EWS) in den Client selbst. Im Detail arbeitet Mozilla dabei an Elementen für die HTTP-Kommunikation, die das Team aus Sicherheitsgründen nicht von vorhandenem C++-Code übernehmen möchte, sondern in Rust neu erstellt. Das erfordert eine eigene HTTP-API (Crate moz_http) und eine Await-Async-Funktionalität (Crate xpcom_async, ähnlich dem Promise in JavaScript).

Die größte Herausforderung im Umgang mit EWS war für das Mozilla-Team jedoch, die XML-Struktur von Exchange mit der von Thunderbird in Einklang zu bringen. Die im Rust-Universum vorhandenen Crates erfüllten die Bedürfnisse nicht vollständig, und eine Eigenentwicklung war erforderlich: das Crate xml_struct, das auf GitHub zur Verfügung steht. Ein weiteres Crate (ews), das Typen und eine XML-API definiert, gibt es ebenfalls auf GitHub.

Immer mehr IT-Unternehmen migrieren zu Rust. Das Thunderbird-Team begründet diesen Schritt im Blog ausführlich, wobei die ersten drei Argumente Rust im Allgemeinen betreffen:

  1. Speichersicherheit: Thunderbird nimmt Input von jedermann als Mail entgegen.
  2. Performance: Rust arbeitet auf allen Plattformen nativ.
  3. Ökosystem: Die Modularität verschafft Zugang zu einem großen Ökosystem, in dem sich viele Leute auch mit E-Mail beschäftigen.

Vier weitere Gründe gelten für Thunderbird im Speziellen:

  1. Firefox: Thunderbird basiert auf dem Firefox-Code und diese gemeinsame Struktur unterstützt Rust bereits. Außerdem gibt es ein plattformübergreifendes Komponentenmodell (Cross-Platform Component Object Model, XPCOM), das Funktionsaufrufe zwischen Rust, C++ und JavaScript ermöglicht.
  2. Tools: Rust bietet eine große Toolbox zum sicheren und zuverlässigen Gestalten von APIs und der zugehörigen Dokumentation.
  3. Technische Schulden: Die Einführung einer neuen Sprache zwingt dazu, die veraltete Architektur zu überdenken.
  4. Portabilität: Rust Crates lassen sich für andere Plattformen verwenden, wie Android/K-9.

Die Auswahl ist dem Team nicht leicht gefallen: "Thunderbird ist ein großes Projekt, das von einem kleinen Team betreut wird ... Wir brauchen leistungsfähige Werkzeuge, um komplexe Funktionen relativ schnell zu entwickeln, was wir aber unbedingt mit langfristiger Wartbarkeit in Einklang bringen müssen."

Die Autorinnen und Autoren des Blogbeitrags beschreiben auch die Herausforderungen bei der Anbindung von Rust. Insbesondere gibt es viel vorhandenen, schwer verständlichen und asynchronen Code, der nicht zu den Eigenheiten von Rust passt ("there is a lot of existing code with idiosyncratic asynchronous patterns that don’t integrate nicely with idiomatic Rust").

Die Grafik zeigt den logischen Ablauf einer Exchange-Anfrage und der Bearbeitung der Antwort.

(Bild: Mozilla/Thunderbird)

Ein konkretes Problem stellt das Build-Konzept von Mozilla dar: Thunderbird ist ein Unterprojekt (sub tree) von Firefox und der Build erfolgt von Firefox zu Thunderbird. Diese Richtung wirft jedoch Probleme beim Cargo-Konzept von Rust auf. Als Lösung definierte das Team einen eigenen Workspace und konfigurierte das Upstream-Build-Tool mach so, dass der Build von diesem Arbeitsbereich aus statt von Firefox aus erfolgte.

Ein weiterer Punkt: Thunderbird hat die oben angesprochene XPCOM-Interoperabilitäts-Schicht nie vollständig integriert, was mit dem Eingliedern von Rust-Exchange nun erforderlich wird. Das Team hat sich entschlossen, hier einen Adapter zwischen dem existierenden Code und den neuen Rust-Teilen (als Crate ews_xpcom) einzufügen.

Weitere Details zum Rust-Umzug finden sich in einem ausführlichen Online-Dokument.

Die Kommentare im Blog sind von euphorisch: "Ich bin begeistert von dieser erstaunlichen Entwicklung meines Lieblings-E-Mail-Programms. Kann es kaum erwarten, zu sehen, wie die Sache weitergeht!", bis kritisch: "Wenn Sicherheit das Ziel ist, dann mag Speichersicherheit notwendig sein, aber sie ist natürlich nicht ausreichend. Und Rust fehlen viele Sicherheitsfunktionen anderer Sprachen."

Einige Kommentare weisen darauf hin, dass Microsoft 2026 EWS durch die Cloud-API Graph ersetzen wird. Mozilla antwortet, dass EWS bei On-Premises-Installationen noch lange in Benutzung sein wird und dass das die Hauptnutzung für viele Anwender darstellt. Mit Graph API gibt es noch Probleme, an denen das Team jedoch arbeitet.

(who)