Remote Desktop Manager (RDM) has come a long way since its inception in 2008. What started as a side project to test Internet Explorer 6, 7, and 8 soon evolved into a tool, a product, and eventually, a comprehensive platform integrated with Devolutions Server and Devolutions Hub. As the founder and principal developer of RDM, I’ve been privileged to witness and steer this transformation. In this blog, I’ll share insights into the modernization of RDM’s codebase, from our humble beginnings with WinForms to our current multi-platform journey.
From WinForms to .NET 9: Building on a strong foundation
When I began developing RDM, I chose WinForms with DevExpress for its simplicity and reliability. Over the years, this framework has allowed us to maintain a clean, updated codebase while leveraging the latest advancements in .NET. Despite our satisfaction with WinForms, its inherent limitation is its lack of cross-platform support, which became a growing concern as RDM expanded to support Windows, macOS, Linux, Android, and iOS.
Last year marked a significant milestone for our team as we completed the first phase of modernization by upgrading all our projects to .NET 8 in version 2024.1. This achievement was a huge effort, requiring dedication and collaboration across the board. It has provided us with a solid foundation to build on, ensuring both optimal performance and compatibility. Looking ahead, we are excited to continue this journey by transitioning to .NET 9 this year.
Overcoming UI challenges with WebView2
To unify our UI components across platforms, we adopted WebView2, which allowed us to share significant portions of the UI between platforms, reducing duplication and streamlining development. However, using WebView2 came with challenges, particularly on mobile platforms. Unlike desktop environments, where it might have been possible to leverage a workaround such as a local HTTP server to serve content, this approach is not feasible on mobile. Consequently, we had to generate the necessary code and content directly, adding complexity to the development process.
Despite these challenges, WebView2 has been instrumental in enabling features like dashboards, reports, and other upcoming tools. However, its limitations on mobile platforms and the growing demand for native-like user experiences have driven us to explore alternative solutions.
Embracing Avalonia UI: A new era of cross-platform development
Avalonia UI has proven to be a game-changer for RDM by providing a unified framework for creating cross-platform UI components that are both performant and visually consistent. Before adopting Avalonia, we had to reimplement UI components for each platform, leading to duplication of effort and slower development cycles. With Avalonia, we can now streamline development, reducing redundancy while ensuring a seamless and consistent experience across platforms.
This shift not only enhances the user experience but also positions us to bring new tools and features to multiple platforms faster than ever before. Avalonia UI empowers us to innovate more efficiently, making it a cornerstone of our future development strategy.
Migrating from C to Rust and .NET: Prioritizing security and performance
Another major initiative has been the migration of our codebase away from C and C++ to comply with government recommendations favoring memory-safe languages. We’ve embraced Rust for many of our protocol implementations, including RDP (integrating IronRDP as a safer alternative to FreeRDP), VNC, ARD, and others. Rust’s safety guarantees and performance make it an ideal choice for these critical components.
We’ve also leveraged .NET’s recent advancements, such as the Span feature, which has enabled our SSH implementation to achieve performance on par with, or even exceeding, native C implementations. This shift has reinforced our commitment to delivering a fully managed codebase that prioritizes security and maintainability.
Unique cross-platform capabilities
Our modernization efforts have yielded components that even first-party vendors lack, such as:
- A web-based PowerShell WinRM stack
- A robust SSPI stack written in Rust
- To our knowledge, the only web-based Apple Remote Desktop client available on the market
These innovations empower us to tackle future challenges and continue providing affordable and productive tools for IT professionals. An added benefit of Rust is that it embraced WebAssembly as a target platform and has some of the best tooling for it. This makes it possible to use Rust libraries directly in the browser and opens up new possibilities for web-based clients.
Looking ahead
Our modernization journey is far from over. As we strive to offer an even better platform, we remain committed to leveraging cutting-edge technologies and collaborating with industry leaders. By transitioning to fully managed libraries, we aim to set new standards for performance, security, and cross-platform compatibility.
At the heart of it all is our dedication to IT professionals. We’re passionate about simplifying their work, enhancing productivity, and delivering tools that adapt to their evolving needs. With a robust and modernized codebase, we’re well-positioned to continue achieving this mission for years to come. We look forward to having you alongside us on this journey and continuing to grow together as we push the boundaries of innovation.