Remote Desktop Manager (RDM) a parcouru un long chemin depuis sa création en 2008. Ce qui a commencé comme un projet secondaire pour tester Internet Explorer 6, 7 et 8 est rapidement devenu un outil, un produit, puis une plateforme complète intégrée à Devolutions Server et Devolutions Hub. En tant que fondateur et développeur principal de RDM, j’ai eu le privilège d’observer et de guider cette transformation. Dans ce blog, je partagerai des perspectives sur la modernisation de la base de code de RDM, depuis nos débuts modestes avec WinForms jusqu'à notre parcours multiplateforme actuel.
De WinForms à .NET 9 : bâtir sur une base solide
Lorsque j’ai commencé à développer RDM, j’ai choisi WinForms avec DevExpress pour sa simplicité et sa fiabilité. Au fil des années, cette infrastructure nous a permis de maintenir une base de code propre et à jour tout en tirant parti des dernières avancées de .NET. Malgré notre satisfaction avec WinForms, sa principale limitation reste l'absence de prise en charge multiplateforme, un enjeu de plus en plus important à mesure que RDM s’est étendu à Windows, macOS, Linux, Android et iOS.
L’année dernière a marqué une étape majeure pour notre équipe avec l’achèvement de la première phase de modernisation : la mise à niveau de tous nos projets vers .NET 8 dans la version 2024.1. Cet accomplissement a nécessité un travail considérable, mobilisant engagement et collaboration à tous les niveaux. Cette transition nous a offert une base solide, garantissant à la fois des performances optimales et une meilleure compatibilité. Pour la suite, nous sommes impatients de poursuivre ce parcours en passant à .NET 9 cette année.
Surmonter les défis de l'interface utilisateur avec WebView2
Pour unifier nos composants d’interface utilisateur sur toutes les plateformes, nous avons adopté WebView2, ce qui nous a permis de partager une grande partie de l’IU (interface utilisateur) entre les plateformes, réduisant ainsi la duplication et simplifiant le développement. Toutefois, l’utilisation de WebView2 a posé certains défis, en particulier sur les plateformes mobiles. Contrairement aux environnements de bureau, où l’on pourrait contourner certaines limitations avec un serveur HTTP local pour servir le contenu, cette approche n’est pas viable sur mobile. Nous avons donc dû générer directement le code et le contenu nécessaires, ajoutant ainsi de la complexité au processus de développement.
Malgré ces défis, WebView2 a joué un rôle clé dans l’implémentation de fonctionnalités comme les tableaux de bord, les rapports et d’autres outils à venir. Cependant, ses limites sur les plateformes mobiles et la demande croissante pour des expériences utilisateur plus natives nous ont poussés à explorer des solutions alternatives.
Adopter Avalonia UI : une nouvelle ère pour le développement multiplateforme
Avalonia UI s'est révélé être un véritable atout pour RDM en offrant une infrastructure unifiée permettant de créer des composants d’interface utilisateur multiplateformes à la fois performants et visuellement cohérents. Avant d’adopter Avalonia, nous devions réimplémenter les composants IU pour chaque plateforme, ce qui entraînait une duplication des efforts et rallongeait les cycles de développement. Grâce à Avalonia, nous pouvons désormais simplifier le développement, réduire la redondance et garantir une expérience fluide et homogène sur toutes les plateformes.
Ce changement améliore non seulement l’expérience utilisateur, mais il nous permet aussi d’introduire de nouveaux outils et fonctionnalités sur plusieurs plateformes plus rapidement que jamais. Avalonia UI nous donne les moyens d’innover plus efficacement, en faisant un élément clé de notre stratégie de développement future.
Migration de C vers Rust et .NET : priorité à la sécurité et aux performances
Une autre initiative majeure a été la migration de notre base de code pour s’éloigner de C et C++, en conformité avec les recommandations gouvernementales privilégiant les langages à sécurité mémoire. Nous avons adopté Rust pour de nombreuses implémentations de protocoles, notamment RDP (en intégrant IronRDP comme alternative plus sûre à FreeRDP), VNC, ARD et d’autres. Les garanties de sécurité et les performances de Rust en font un choix idéal pour ces composants critiques.
Nous avons également tiré parti des récentes avancées de .NET, comme la fonctionnalité Span, qui a permis à notre implémentation SSH d’atteindre des performances équivalentes, voire supérieures, à celles des implémentations natives en C. Cette transition renforce notre engagement à fournir une base de code entièrement managée, axée sur la sécurité et la maintenabilité.
Des capacités multiplateformes uniques
Nos efforts de modernisation ont abouti à des composants que même certains éditeurs de solutions propriétaires n’offrent pas, notamment :
- Une pile PowerShell WinRM basée sur le web.
- Une pile SSPI robuste écrite en Rust.
- À notre connaissance, le seul client Apple Remote Desktop basé sur le web disponible sur le marché.
Ces innovations nous permettent de relever de nouveaux défis et de continuer à proposer des outils abordables et performants aux professionnels de l’informatique. Un autre avantage de Rust est son adoption native de WebAssembly comme plateforme cible, avec certains des meilleurs outils disponibles pour cette technologie. Cela nous permet d’utiliser directement des bibliothèques Rust dans le navigateur, ouvrant ainsi de nouvelles perspectives pour les clients web.
Perspectives d’avenir
Notre parcours de modernisation est loin d’être terminé. Dans notre quête d’une plateforme toujours plus performante, nous restons déterminés à exploiter les technologies de pointe et à collaborer avec les leaders du secteur. En adoptant des bibliothèques entièrement managées, nous visons à établir de nouveaux standards en matière de performance, de sécurité et de compatibilité multiplateforme.
Au cœur de cette évolution se trouve notre engagement envers les professionnels de l’informatique. Nous avons à cœur de simplifier leur travail, d’améliorer leur productivité et de proposer des outils qui s’adaptent à leurs besoins en constante évolution. Avec une base de code robuste et modernisée, nous sommes bien positionnés pour poursuivre cette mission pendant de nombreuses années. Nous sommes impatients de vous avoir à nos côtés dans cette aventure et de continuer à innover ensemble.