Microsoft brings WinUI to desktop apps: It's a landmark for Windows development, but it has taken far too long

The look and feel of UWP without all the baggage


Hands On Microsoft has pushed out a preview of WinUI for desktop applications, making it possible for developers to adopt the look and feel of UWP (Universal Windows Platform) without having to adopt the UWP application model.

WinUI is Microsoft’s GUI framework for Universal Windows Platform (UWP), and the big news at the recent virtual Build event was the release of WinUI Preview 1 which also supports Win32, also known as desktop applications. This means developers can create a desktop application using visual components that previously only worked in UWP (leaving aside an existing hybrid option called XAML islands). What is the difference then between a UWP application and a Win32 application, if they now look the same?

The answer is that UWP and Win32 applications are different under the covers. UWP applications are sandboxed, for example with restricted access to the file system according to a complex set of rules.

A desktop application, by contrast, has the file access permissions of the user. A UWP application has an app lifecycle including a suspended state which kicks in if the user minimises it or switches away, whereas a Win32 application runs until the user closes it. Another issue is code that relies on Windows API code using window handles (HWND), which is how the operating system has worked since its first release. This code generally does not work with UWP applications, whereas it does work with WinUI for Win32.

In other words, UWP comes with a fair amount of baggage which is there for a good reason – such as security or power management or system protection – but which can also get in the way and break legacy code. The new WinUI is in effect Microsoft surrendering to compatibility above modernisation.

Under the hood

What was actually released in the preview though? WinUI 3 Preview 1 has lots of limitations, especially on the Win32 side. One of the biggest is a note that says: "WinUI 3.0 content can only be in one window per process or one ApplicationView per app" – not so much Windows as Window.

The tools are also limited. We set up WinUI 3 on a virtual machine, and it needs the latest .NET 5.0 preview bits in both 32-b-bit and 64-bit guise and the latest preview of Visual Studio 2019 (Visual Studio 2019 has been released for ages, but this is a kind of insider build of a forthcoming update). Then one adds a WinUI extension to Visual Studio, start a new WinUI 32-bit application, and get a “Hello world” XAML page with no toolbox or visual designer. Documentation is limited, and the way to proceed is to download and inspect a project called the XAML Controls Gallery which has example code for the controls that work. The master branch does not work, but there is another called winui3preview which does.

It is pretty rough. When can developers use this stuff for real? There are a couple of projected dates worth noting. The first is November 2020, when Preview 4 is scheduled. Despite the name, this will be supported for production "if it meets your needs", according to Microsoft's Community Call presentation at Build. Spring 2021 will see Preview 5 and then general availability – with the further proviso that .NET 5.0 is not a long-term support release. For that, wait until November 2021 and .NET 6.0. Better news is that compatibility with older versions of Windows is not too bad; Microsoft is talking about reaching as far back as Windows 8.1 via compatibility code called polyfills.

The WinUI 3 roadmap. Patience is called for.

The WinUI 3 roadmap. Patience is called for.

Nevertheless, WinUI 3 is a landmark release for Windows developers. It is not just the decoupling of the GUI API from UWP, but also the addition of needed features like input validation, which means it is maturing and better suited to business applications than before. In theory, it could bring more consistency to the Windows 10 ecosystem, currently a mish-mash of design styles including WPF (Windows Presentation Foundation, based on DirectX), old-style GDI+ Windows 7, UWP in various guises, and applications that do their own thing using cross-platform libraries – though in practice many will stay the same for as long as they continue to work.

There is also the question of the merits of Microsoft's Fluent Design System, which is the look and feel that WinUI enables. In a recent post, Microsoft's director of product design Benedikt Lehnert described the company's goals for Fluent Design, which includes cross-platform as well as Windows. "It can be frustrating when things work differently for no (or some unexplained) reason," he observed; but how do you get a user interface that works "the same" when there is an inherent contradiction between cross-platform consistency and offering a native experience for different operating systems?

Reading Lehnert's piece, it is apparent that Microsoft is focused more on getting Microsoft 365 products working consistently on Windows, macOS, iOS, Android and Web, than on fixing design issues in Windows. Third-party developers also have this problem, which is why Microsoft faces constant requests to make WinUI cross-platform, something which at Build the team said it was considering.

In this context it is worth mentioning the Uno platform, a third-party project which has a measure of official Microsoft blessing in that it is mentioned frequently. Uno’s CTO Jerome Laban turned up in the WinUI community call mentioned above, where he described how this open source project enables WinUI 3.0 to run on iOS, Android, Web - via WebAssembly (Wasm) - and macOS, with plans to add Linux support. As an example, Uno offers something very like the Windows 10 calculator for macOS and iOS. Under the covers Uno uses Xamarin technology, but with WinUI XAML rather than the unique and incompatible flavour of XAML used by Xamarin Forms. Uno has limitations, and currently some issues with Wasm including large download size. Still, you cannot help wondering whether Uno’s approach makes better sense than the MAUI (multi-platform app UI) presented at Build - and not forgetting React Native, which will use WinUI on Windows and enables shared JavaScript code across all platforms, now including macOS.

Microsoft says it has shipped or installed Windows 10 on more than 1 billion devices, which suggests that it remains an important target for developers. Its appeal has been damaged though by too many changes of direction, failure to establish the Microsoft Store as the main route for application discovery and install, and the necessity of cross-platform for many types of application. WinUI and the associated Project Reunion looks promising as a means of modernising applications without forcing developers to adopt UWP, but will not be fully baked until, perhaps, 2021, nine years after the release of Windows 8. It has taken far too long. ®

Similar topics

Broader topics


Other stories you might like

  • Start using Modern Auth now for Exchange Online
    Before Microsoft shutters basic logins in a few months

    The US government is pushing federal agencies and private corporations to adopt the Modern Authentication method in Exchange Online before Microsoft starts shutting down Basic Authentication from the first day of October.

    In an advisory [PDF] this week, Uncle Sam's Cybersecurity and Infrastructure Security Agency (CISA) noted that while federal executive civilian branch (FCEB) agencies – which includes such organizations as the Federal Communications Commission, Federal Trade Commission, and such departments as Homeland Security, Justice, Treasury, and State – are required to make the change, all organizations should make the switch from Basic Authentication.

    "Federal agencies should determine their use of Basic Auth and migrate users and applications to Modern Auth," CISA wrote. "After completing the migration to Modern Auth, agencies should block Basic Auth."

    Continue reading
  • Wi-Fi hotspots and Windows on Arm broken by Microsoft's latest patches
    Only way to resolve is a rollback – but update included security fixes

    Updated Microsoft's latest set of Windows patches are causing problems for users.

    Windows 10 and 11 are affected, with both experiencing similar issues (although the latter seems to be suffering a little more).

    KB5014697, released on June 14 for Windows 11, addresses a number of issues, but the known issues list has also been growing. Some .NET Framework 3.5 apps might fail to open (if using Windows Communication Foundation or Windows Workflow component) and the Wi-Fi hotspot features appears broken.

    Continue reading
  • FabricScape: Microsoft warns of vuln in Service Fabric
    Not trying to spin this as a Linux security hole, surely?

    Microsoft is flagging up a security hole in its Service Fabric technology when using containerized Linux workloads, and urged customers to upgrade their clusters to the most recent release.

    The flaw is tracked as CVE-2022-30137, an elevation-of-privilege vulnerability in Microsoft's Service Fabric. An attacker would need read/write access to the cluster as well as the ability to execute code within a Linux container granted access to the Service Fabric runtime in order to wreak havoc.

    Through a compromised container, for instance, a miscreant could gain control of the resource's host Service Fabric node and potentially the entire cluster.

    Continue reading

Biting the hand that feeds IT © 1998–2022