Contexte et motivations

Discord a annoncé la fin progressive d’Electron, le framework qui combine Chromium et Node.js pour créer des applications de bureau à partir de technologies web. Le CTO Stanislav Vishnevskiy rappelle que l’entreprise utilise Rust depuis 2018 dans son infrastructure, son moteur vocal et certaines parties du client. L’objectif affiché est de remplacer l’ensemble du client par du code natif Rust, afin de réduire la consommation de mémoire qui, avec la version Windows actuelle, dépasse souvent 1 Go lorsqu’on participe à plusieurs serveurs.

Architecture Electron vs Rust

Electron repose sur un processus Chromium complet, incluant le moteur de rendu Blink et le moteur JavaScript V8, plus un processus Node.js. Chaque instance du client lance ainsi plusieurs threads et un espace mémoire dédié au navigateur, ce qui explique le pic de RAM observé. En revanche, Rust compile directement en binaire natif. Le code s’exécute sans couche d’interprétation, ce qui élimine le besoin d’un moteur de rendu dédié pour l’interface utilisateur. Le passage à Rust implique également la suppression de React Native, qui était utilisé pour partager le code entre le client de bureau et les applications mobiles. Les applications mobiles conservent une interface native, mais le cœur logique sera partagé via Rust.

Impacts sur les performances et la sécurité

Vishnevskiy a partagé une capture d’écran montrant le client Windows consommant 290 Mo de RAM, soit moins d’un tiers de la consommation habituelle. Cette réduction provient du fait que le binaire Rust ne charge pas les bibliothèques lourdes de Chromium. En outre, Rust garantit la sécurité de la mémoire grâce à son système de possession et à son vérificateur d’emprunts, limitant les débordements de tampon et les use‑after‑free qui sont fréquents dans les applications C/C++ et, dans une moindre mesure, dans les environnements JavaScript. Le passage à Rust devrait donc diminuer la surface d’attaque liée aux vulnérabilités de gestion de mémoire, même si le code existant en JavaScript doit être réécrit ou encapsulé.

Perspectives et limites

Discord ne précise pas la date du basculement complet, mais indique que des tests utilisateurs sont prévus prochainement. La migration implique de réimplémenter l’interface graphique, actuellement construite avec React. Le défi technique réside dans la création d’une UI native performante tout en conservant la cohérence fonctionnelle entre les plateformes. De plus, la transition nécessite une phase de validation extensive pour s’assurer que les fonctionnalités existantes (notifications, appels vocaux, intégrations tierces) fonctionnent sans régression. En l’absence de données chiffrées sur les performances CPU ou la latence réseau, l’évaluation reste centrée sur la consommation de RAM et les garanties de sécurité offertes par Rust.