1 points par GN⁺ 2024-04-21 | 1 commentaires | Partager sur WhatsApp
  • Une prise en charge d’Exchange est en cours de développement pour Thunderbird en utilisant le langage Rust
    • La prochaine version ESR (Extended Support), prévue pour juillet, prendra d’abord en charge uniquement les e-mails ; les fonctions calendrier et carnet d’adresses arriveront plus tard
    • Brendan Abolivier, Ikey Doherty et Sean Burke travaillent sur ce chantier

Pourquoi avoir choisi Rust

  • Thunderbird est un ancien projet avec beaucoup de vieux code C++
  • Le développement de nouvelles fonctionnalités nécessite un langage puissant offrant aussi une bonne maintenabilité à long terme
  • Rust présente des avantages en matière de sécurité mémoire, de performance, de modularité et d’écosystème
  • L’infrastructure CI partagée avec Firefox prend déjà en charge Rust
  • XPCOM permet des appels entre Rust, C++ et JavaScript
  • Les outils puissants de Rust peuvent aider à améliorer une architecture vieillissante
  • Rust prend en charge diverses plateformes, ce qui permet aussi une réutilisation dans d’autres projets comme Thunderbird pour Android / K-9 Mail

Difficultés rencontrées

  • Le code existant contient de nombreux patterns asynchrones qui s’accordent mal avec Rust
  • Les codebases de Firefox et Thunderbird comportent beaucoup de fonctionnalités sans bindings Rust
  • Le système de build de Thunderbird importe le code de Firefox sous forme de sous-arbre, ce qui compliquait l’intégration du code Rust
    • Comme il n’est pas possible d’imbriquer des workspaces Cargo, le problème a été résolu en modifiant l’outil de build mach
  • XPCOM a été conçu à l’origine pour le C++, et son usage depuis Rust demande beaucoup de code boilerplate
    • La solution retenue consiste à implémenter en Rust la logique propre à chaque protocole, puis à créer en C++ des classes passerelles pour l’intégrer au code existant

Implémentation de la prise en charge d’Exchange avec Rust

  • L’API EWS (Exchange Web Services) communique en HTTP et utilise des requêtes et réponses au format XML
  • Pour envoyer les requêtes HTTP, le projet utilise le composant réseau necko de Firefox, mais son exposition via XPCOM le rend peu pratique à utiliser
    • Le crate xpcom_async a été créé pour convertir les opérations asynchrones de XPCOM vers la syntaxe async/await de Rust
    • Le crate moz_http a été créé pour fournir une API de client HTTP de style reqwest
  • Les développeurs ont tenté d’utiliser des crates existants pour traiter les requêtes/réponses XML, mais ils ne satisfaisaient pas les exigences d’EWS
    • Le crate xml_struct a été créé afin de fournir un mapping intuitif entre les structures de données Rust et le XML
    • Le crate ews a été créé afin de fournir les définitions de types pour EWS ainsi qu’une API de sérialisation/désérialisation XML basée sur xml_struct et serde

Prochaines étapes

  • L’équipe renforce actuellement les tests automatisés avant le développement des prochaines fonctionnalités majeures
    • En plus des tests unitaires, des tests d’intégration sont en cours avec un serveur EWS simulé
  • Un travail d’amélioration de la gestion des erreurs est en cours
    • Le comportement d’erreur d’EWS étant mal documenté, il faut le traiter à plusieurs niveaux, du protocole jusqu’aux cas nécessitant une intervention utilisateur
  • L’extension de la prise en charge du protocole EWS et son intégration à l’interface de Thunderbird se poursuivent
    • Des fonctions comme l’ajout récent de comptes EWS, la synchronisation de la hiérarchie des dossiers depuis le serveur distant et l’affichage des dossiers dans l’interface ont déjà été implémentées
    • Les prochaines étapes sont la récupération de la liste des messages depuis le serveur distant et la généralisation de la prise en charge de l’envoi d’e-mails dans Thunderbird
  • Toute cette évolution sera documentée afin d’assurer la maintenabilité à venir
    • Une documentation sur l’architecture existante des protocoles mail de Thunderbird et sur les pistes d’amélioration est également en cours

L’avis de GN⁺

  • L’introduction de Rust dans Thunderbird pour moderniser une architecture ancienne semble être une évolution très positive. L’équipe multiplie les efforts pour tirer parti des avantages de Rust tout en préservant la compatibilité avec la codebase existante.
  • Les crates créés pendant le développement, comme xpcom_async, moz_http, xml_struct et ews, pourraient aussi se révéler utiles dans d’autres projets au-delà de Thunderbird.
  • Cela dit, l’architecture vieillissante de Thunderbird et son système de build dépendant de la codebase de Firefox pourraient continuer à freiner l’adoption de Rust. À long terme, il faudra aussi travailler à résoudre ces problèmes.
  • EWS étant un service de messagerie largement utilisé dans les entreprises et les établissements d’enseignement, sa prise en charge dans Thunderbird pourrait considérablement élargir la base d’utilisateurs. Mais comme EWS est un protocole propriétaire de Microsoft, son implémentation dans un projet open source peut s’avérer difficile.
  • Dans l’ensemble, le projet Thunderbird semble profiter de l’adoption de Rust pour accélérer la modernisation de son architecture et l’extension de ses fonctionnalités. En tant que client e-mail open source de référence, les progrès de Thunderbird bénéficieront grandement à ses utilisateurs.

1 commentaires

 
GN⁺ 2024-04-21
Avis Hacker News
  • Certains s’interrogent sur la raison de cette implémentation alors qu’EWS doit être supprimé dans deux ans
  • Thunderbird souffre encore de lenteurs comme avant la mise à jour Firefox Quantum. Lors du passage entre des dossiers contenant des milliers d’e-mails, des délais apparaissent, alors que dans Outlook le changement est instantané
  • Si l’objectif stratégique est d’amener les gens à utiliser Thunderbird, cela se défend, mais d’un point de vue idéologique, il vaudrait mieux prendre en charge JMAP
  • Un commentaire se souvient qu’il y a 20 ans, quand peu de gens utilisaient Linux dans l’IT, il était difficile de trouver un client Exchange
  • Il est signalé que le titre a été modifié pour parler de programmation Rust, alors que le contenu ne concerne pas réellement la prise en charge d’Exchange par Thunderbird
  • Quelqu’un dit détester Exchange, mais se réjouit de pouvoir envoyer des e-mails en texte brut sous Windows
  • Il est proposé d’intégrer par défaut une fonction d’import de fichiers PST afin de faciliter la migration depuis Outlook
  • Certains espèrent que Thunderbird devienne un concurrent crédible de Gnome Evolution sur le terrain de la prise en charge d’EWS
  • Il est souligné qu’il y a un besoin urgent de nouveaux protocoles comme SMTP/2 + IMAP5
  • Pour ceux qui devaient utiliser l’extension OWL, cette amélioration sera bienvenue