1 Punkte von GN⁺ 2024-04-21 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2024-04-21
Hacker-News-Kommentare
  • Es wird infrage gestellt, warum dies implementiert wird, obwohl EWS in zwei Jahren entfernt werden soll.
  • Thunderbird hat wie schon vor dem Firefox-Quantum-Update Probleme mit langsamer Geschwindigkeit. Beim Wechsel zwischen Ordnern mit Tausenden von E-Mails kommt es zu Verzögerungen, während Outlook sofort umschaltet.
  • Wenn das strategische Ziel darin besteht, die Menschen zur Nutzung von Thunderbird zu bewegen, ist das nachvollziehbar, ideologisch wäre jedoch Unterstützung für JMAP besser.
  • Es wird an die Zeit vor 20 Jahren erinnert, als nur wenige Menschen in der IT Linux nutzten und es schwer war, einen Exchange-Client zu finden.
  • Es wird darauf hingewiesen, dass der Titel in etwas über Rust-Programmierung geändert wurde, der tatsächliche Inhalt aber nichts mit der Exchange-Unterstützung von Thunderbird zu tun hat.
  • Jemand äußert, Exchange nicht zu mögen, freut sich aber darüber, unter Windows Nur-Text-E-Mails senden zu können.
  • Es wird vorgeschlagen, den Import von PST-Dateien beim Wechsel von Outlook standardmäßig anzubieten, damit Nutzer leichter umsteigen können.
  • Es wird gehofft, dass Thunderbird in Bezug auf EWS-Unterstützung ein angemessener Konkurrent zu Gnomes Evolution wird.
  • Es wird betont, dass neue Protokolle wie SMTP/2 + IMAP5 dringend benötigt werden.
  • Es wird angemerkt, dass diese Verbesserung willkommen sein dürfte, nachdem man auf die Erweiterung OWL angewiesen war.