A senior Microsoft executive told us in May that “UWP is dead” behind the scenes at Build, and I’ve taken a lot of heat for accurately reporting the comment. But the company’s public stance is a lot more nuanced. This makes sense: No developer wants to be told that the platform they’ve invested in is no longer the focus. And of course some Windows 10-based product lines, like HoloLens, can only be served by UWP, and I don’t believe that’s going to change.
I was hoping that Microsoft would provide some clarity about the future at Ignite this past week, and it did: In a session called Windows App Development Roadmap: Making Sense of WinUI, UWP, Win32, .NET, Microsoft’s Paul Gusmorino and James Clarke explained what’s happening with UWP and the other developer technologies that the firm supports for creating modern Windows 10 applications. Or, as they put it, “demystify some of the native platforms that Microsoft offers.”
In their words, Microsoft is now “evolving” the Windows 10 platform for developers after spending several years making big investments in natural user interfaces like touch, pen, and even HoloLens. The result was something that’s now called the Universal Windows Platform (UWP), and it is optimized for mobile applications that can run across a variety of Windows 10-based devices. Previous native Windows APIs and frameworks focused exclusively on more complex and powerful desktop applications that ran only on traditional PC form factors.
Gusmorino and Clarke tried to position UWP as being very successful—it’s been used to create “experiences [that] are used by hundreds of millions of customers every month and accruing billions of hours of usage”—but that’s more a factor of the success of Windows 10 than of the platform itself. (And I sort of assume those numbers are dominated by the in-box Windows 10 apps that Microsoft provides, many of which are based on UWP.) But then they also explained that UWP was no longer the focus because so many developers either can’t or just won’t ever move their existing or new codebases to this platform.
“Not all developers have been able to take advantage of this new technology due to how they’re being delivered,” Clarke noted, alluding to the fact that new platform features were never made available to developers who targeted other Microsoft frameworks like Windows Forms and Windows Presentation Foundation (WPF). “And so, we’re transforming how we deliver our Windows 10 technologies to you to be more agile and inoperable and open.”
If Microsoft had done this when Windows 10 launched over four years ago, we’d have nothing to argue about today. But the firm made many mistakes with this product—for example, making Edge only available to Windows 10 users and only as an in-box application—and they are at least addressing the biggest gaffs.
Until fairly recently, developers targeting Windows 10 specifically (as opposed to targeting previous Windows versions too) had two choices: Win32, an old-fashioned collection of non-hierarchical C/C++-based functions, and UWP, which is modern and clean but, again, is focused on mobile apps. Clarke referred to UWP as “the Universal/Windows RT stack,” the latter of which means the Windows Runtime.
“That created this big left, right decision in people’s minds about ‘do I go this way or that way’ and it’s created gaps for people,” Clarke said. “So, if your organization still has Windows 7 computers, that’s held you back from being able to use [UWP]. Or even if they don’t have the latest version of Windows 10, you haven’t been able to use the latest features of the platform that many of you want. There’s tension because of inoperability with existing code and libraries that people are using, that are closed source, and you don’t even have the flexibility to go modernize it. And there’s been specific features missing in both stacks. These have all created a gap and some tension for people in how we’ve delivered the platform to you.”
To fix this problem, Microsoft is “lifting components out of [UWP] and delivering them independently of the operating system. The result is that functionality that was previously confined to UWP will be available to developers who target WinForms, WPF, or other frameworks. And functionality that used to be tied to a specific Windows 10 version will now work across multiple versions.
That first bit is where the “UWP is dead” comment came from, I believe: UWP is no longer Microsoft’s sole focus for modern, native Windows 10 applications. But as I’ve noted in the past, something like UWP doesn’t literally die, because there are existing code bases that need to be supported for years to come. And developers who have invested in UWP will, of course, be able to take advantage of the new features that will now be delivered outside of UWP, just like WinForms and WPF developers will. What’s dead is the original (broken) strategy.
“To be clear, it’s still meaningful and valuable to create an app entirely on the Universal/Windows RT stack,” Clarke said. “That’s the only way to create a fully native app to reach all the devices and Xbox, and HoloLens, and other devices in the future.”
Yes. But most developers do not write apps that run on all of those platforms. Most target a single device type only: A PC, a video game console, or an augmented reality (AR) headset. The central advantage of UWP was undercut by this reality, by its lack of sophistication for creating full-featured desktop PC applications, and by the millions and millions of existing code bases out there, none of which can be migrated to UWP. (Among other things; the rise of web applications and their even more universal nature hasn’t helped either.)
Anyway, Microsoft divides its application developer efforts into three layers—a UI layer, an API layer, and an app model—and each is changing.
The UI layers of the past were Win32, WinForms, MFC, and WPF on Win32 and XAML/Visual Layer on UWP. Now, however, Microsoft is separating out the UI layer into something called WinUI, currently in version 2, and most of that already works across both Win32 and UWP. There’s also a XAML Islands technology that lets Win32 developers access XAML-based UIs.
In the future, WinUI will move to version 3 sometime in 2020 and will include all of the key pieces of the UI layer and make them available to all application developers. WinUI is and will continue to be delivered separately from the operating system, so there are no version issues. And it is considered the native UX platform now.
At the API layer, things were split between two worlds: Win32/.NET Framework and Windows Runtime (WinRT, which was limited to Store apps)/.NET Native. Microsoft has moved past this already to make WinRT available outside of the Store and to Win32 developers, and it has evolved .NET into .NET Core and has brought back WinForms and WPF from the dead.
In the future, platform innovations will remain in WinRT, which is now available to all developers, and .NET Core will provide a single .NET runtime everywhere.
And then there’s the app model layer. When Windows 10 first shipped, developers had to choose between the Win32 app model and the UWP app model, and each had its own deployment and delivering mechanisms: MSI and Click Once on the desktop and AppX and the Store on UWP.
Since then, nothing has really changed on the Win32 side. But AppX has evolved into MSIX, and Microsoft has made it and Store deployment available to Win32 developers through the Desktop Bridge.
And what about the future? “Moving forward, we’re looking forward to being able to continue to evolve the app model space to make it less of a hard left-right decision for you but something that is a choice you can make as a developer later on, and not as an initial change.”
That’s not very clear, but a slide that accompanied this part of the talk noted that the division between Win32 and UWP apps would disappear, to be replaced by what Microsoft now calls just Windows apps. Developers now targeting Win32/desktop apps are “in great shape” going forward, they said, and so are UWP app developers. The theory here being that all platform innovations going forward will be made available everywhere, and not just on UWP as in the past.
One big happy family, I guess.