- Für Thunderbird wird derzeit eine Exchange-Unterstützung in Rust entwickelt
- In der nächsten ESR-Version (Extended Support Release), die im Juli erscheinen soll, wird zunächst nur E-Mail unterstützt; Kalender- und Adressbuchfunktionen sollen später folgen
- Brendan Abolivier, Ikey Doherty und Sean Burke arbeiten an diesem Vorhaben
Warum Rust gewählt wurde
- Thunderbird ist ein altes Projekt und enthält viel alten C++-Code
- Für die Entwicklung neuer Funktionen wird eine leistungsfähige Sprache mit guter langfristiger Wartbarkeit benötigt
- Rust bietet Vorteile bei Speichersicherheit, Performance, Modularität und Ökosystem
- Die mit Firefox geteilte CI-Infrastruktur unterstützt Rust bereits
- Über XPCOM sind Aufrufe zwischen Rust, C++ und JavaScript möglich
- Mit den leistungsfähigen Werkzeugen von Rust lässt sich die alte Architektur verbessern
- Rust unterstützt verschiedene Plattformen und kann daher auch in anderen Projekten wie Thunderbird für Android/K-9 Mail wiederverwendet werden
Schwierigkeiten, auf die man gestoßen ist
- Im bestehenden Code gibt es viele asynchrone Muster, die nicht gut zu Rust passen
- In den Codebasen von Firefox und Thunderbird gibt es viele Funktionen ohne Rust-Bindings
- Das Build-System von Thunderbird übernimmt Firefox-Code als Subtree, wodurch die Integration von Rust-Code schwierig war
- Da sich Cargo-Workspaces nicht verschachteln lassen, wurde das Build-Tool
mach angepasst, um das Problem zu lösen
- XPCOM wurde ursprünglich für C++ entworfen und erfordert bei der Nutzung in Rust viel Boilerplate-Code
- Gelöst wurde dies, indem die protokollspezifische Logik in Rust implementiert und Bridge-Klassen in C++ erstellt wurden, um sie mit dem bestehenden Code zu verbinden
Implementierung der Exchange-Unterstützung mit Rust
- Die EWS-API (Exchange Web Services) kommuniziert über HTTP und verwendet XML-formatierte Anfragen und Antworten
- Für das Senden von HTTP-Anfragen wird die Networking-Komponente necko von Firefox verwendet, die jedoch über XPCOM exponiert wird und dadurch unkomfortabel zu nutzen ist
- Es wurde das Crate
xpcom_async erstellt, das asynchrone XPCOM-Vorgänge in die Rust-Syntax async/await umwandelt
- Es wurde das Crate
moz_http erstellt, das eine HTTP-Client-API im Stil von reqwest bereitstellt
- Für die Verarbeitung von XML-Anfragen und -Antworten wollte man bestehende Crates verwenden, diese erfüllten jedoch die Anforderungen von EWS nicht
- Es wurde das Crate
xml_struct erstellt, das ein intuitives Mapping zwischen Rust-Datenstrukturen und XML bietet
- Es wurde das Crate
ews erstellt, das Typdefinitionen für EWS sowie XML-Serialisierungs-/Deserialisierungs-APIs auf Basis von xml_struct und serde bereitstellt
Nächste Pläne
- Vor der Entwicklung der nächsten wichtigen Funktionen wird die automatisierte Testabdeckung ausgebaut
- Neben Unit-Tests wird auch mit einem simulierten EWS-Server an Integrationstests gearbeitet
- Die Fehlerbehandlung wird verbessert
- Da das Fehlerverhalten von EWS nicht gut dokumentiert ist, muss auf mehreren Ebenen damit umgegangen werden, etwa auf Protokollebene und auf Ebenen, die Eingriffe durch Nutzer erfordern
- Die Unterstützung des EWS-Protokolls wird erweitert und die Anbindung an die Thunderbird-UI vorangetrieben
- Kürzlich wurden bereits Funktionen wie das Hinzufügen von EWS-Konten, die Synchronisierung der Ordnerhierarchie vom Remote-Server und die Anzeige von Ordnern in der UI implementiert
- Als Nächstes sollen das Abrufen von Nachrichtenlisten vom Remote-Server und eine Verallgemeinerung der Unterstützung für ausgehende E-Mails in Thunderbird folgen
- Alle Arbeiten sollen dokumentiert werden, um die künftige Wartbarkeit sicherzustellen
- Zudem wird die bestehende Mail-Protokoll-Architektur von Thunderbird sowie die Richtung ihrer Verbesserung dokumentiert
Meinung von GN⁺
- Die Einführung von Rust in Thunderbird, um die alte Architektur zu modernisieren, wirkt wie eine sehr positive Entwicklung. Es wird viel unternommen, um die Vorteile von Rust zu nutzen und zugleich die Kompatibilität mit der bestehenden Codebasis zu bewahren.
- Die im Entwicklungsprozess entstandenen Crates wie
xpcom_async, moz_http, xml_struct und ews könnten auch in anderen Projekten außerhalb von Thunderbird nützlich sein.
- Allerdings könnten die alte Architektur von Thunderbird und das vom Firefox-Codebase abhängige Build-System auch künftig Hindernisse für die Einführung von Rust bleiben. Langfristig scheinen daher weitere Anstrengungen nötig, um diese Probleme zu lösen.
- Da EWS ein in Unternehmen und Bildungseinrichtungen weit verbreiteter E-Mail-Dienst ist, dürfte eine EWS-Unterstützung in Thunderbird erheblich zur Vergrößerung der Nutzerbasis beitragen. Da EWS jedoch ein proprietäres Protokoll von Microsoft ist, kann seine Implementierung in einem Open-Source-Projekt mit Schwierigkeiten verbunden sein.
- Insgesamt scheint das Thunderbird-Projekt den Einsatz von Rust zum Anlass zu nehmen, die Modernisierung der Architektur und den Funktionsausbau aktiv voranzutreiben. Als führender Open-Source-E-Mail-Client würde die Weiterentwicklung von Thunderbird den Nutzern großen Nutzen bringen.
1 Kommentare
Hacker-News-Kommentare