Project Reunion

Le retour en force des applications universelles

Microsoft a dévoilé à l’occasion de sa conférence annuelle Build, dédiée aux développeurs, les tout premiers contours de Project Reunion. L’objectif recherché est de faciliter le développement d’applications dites universelles pour Windows 10, et ce, quel que soit le terminal de l’utilisateur – PC, tablette, téléphone, console de jeux…

Bien que Windows ne soit plus vraiment le pilier central de Microsoft –  il a été largement détrôné par Azure du point de vue financier – le système d’exploitation reste très important pour l’entreprise. L’une des annonces de la Microsoft Build 2020 concernait les applications universelles avec Project Reunion. L’objectif de ce projet est de réunir les logiciels 32 bits et les applications UWP (Universal Windows Platform). Parmi les nouveautés qui ont été apportées par Windows 10, certaines ont eu – et continuent d’avoir – du mal à convaincre. Windows 10 avait inauguré le Microsoft Store dans l’espoir de proposer un magasin d’applications commun aux PC, smartphones et autres consoles de jeux. Les développeurs devaient soi-disant adapter leurs logiciels existants dans des versions qui seraient uniquement distribuées sur le magasin de Microsoft, mais l’idée n’a guère séduit. La firme de Redmond revient aujourd’hui à l’attaque avec une nouvelle idée – ou plutôt un nouveau projet – pour unifier le développement des applications Win32 et UWP : Project Reunion.

Après installation, vous retrouverez les composants offerts par WinUI 3
dans les templates de Visual Studio.

Unifier les applications de près d’un milliard d’utilisateurs

Le Microsoft Store reste aujourd’hui encore l’un des plus grands échecs de Microsoft. La boutique devait être à l’intersection de tous les appareils de son écosystème : les PC sous Windows 10, la Xbox, les Windows Phone mais aussi Hololens. Microsoft n’a toutefois jamais vraiment réussi à convaincre les développeurs d’adopter cette plate-forme qui, il faut bien le reconnaitre, rencontre encore cinq ans après le lancement de Windows 10 beaucoup de problèmes de stabilité, notamment pour les jeux vidéo. Aujourd’hui, Windows 10 est un succès et tourne sur plus d’un milliard d’appareils, mais le Microsoft Store n’a toujours pas décollé. Il faut dire que l’essentiel des applications populaires pour le système se trouve toujours sur le Web, les utilisateurs de Windows 10 le savent bien. Ces applications sont développées en win32 pour assurer une compatibilité avec Windows 10, mais aussi avec les versions précédentes, Windows 7 et Windows 8. C’est ce problème que Microsoft souhaite régler avec Project Reunion. L’objectif est d’unifier les applications modernes, développées avec les API de Windows 10 (UWP), et les applications historiques utilisant Windows API (win32). Microsoft veut pour cela découpler les API autrefois proposées uniquement avec les applications UWP et les rendre disponibles pour les applications win32. La firme a promis que ce projet aiderait les développeurs à maintenir leurs applications avec les dernières fonctions graphiques disponibles, pour les applications C++, .Net (WPF, Windows Forms ou UWP) et React Native. La première pierre de l’édifice est, dixit Microsoft, WinUI 3.0. Les applications win32 pourront donc bénéficier d’une interface utilisateur plus moderne sur Windows 10, sans devoir pour autant basculer sur UWP.

La firme de Redmond a aussi fait une annonce concernant WebView 2, un nouveau composant sous Windows basé sur Chromium, marquant le basculement de cet élément vers la même base que le nouveau Edge. En clair, les applications intégrant du contenu web pourront désormais utiliser Chromium pour le rendu graphique à la place de l’ancien moteur Edge/HTML. Microsoft met à disposition des développeurs, via Project Reunion, l’ensemble de ses API les plus récentes dans le but de faciliter la gestion et la mise à jour des applications classiques (32 bits) et UWP («universelles»). Les API existantes seront unifiées afin qu’un développeur n’ait plus à choisir quel type d’application développer. La solution peut être profitable pour les deux parties : Microsoft étoffe son Store et les développeurs, en mettant à jour leurs logiciels, rendent leurs nouveautés disponibles aussi bien de manière classique que via le Microsoft Store. L’accès aux API UWP et Win32 doit pour cela être unifié et rendu disponible sans contrainte liée au système d’exploitation. Cette ouverture devrait permettre de créer une plateforme commune pour les applications et faciliter les mises à jour dans ce sens pour les applications existantes, et ce, quel que soit leur langage : .NET (C#, F#, Visual C++, VB .NET), React Native…

Exemple de la galerie de contrôles Xaml de WinUI 3.0 Preview 1.

Un parcours semé d’embûches

Cette histoire remonte sans doute à l’introduction de Windows 8 en 2012 et de Metro sa nouvelle plate-forme d’applications compatible avec les tablettes. Metro, appelé aussi par Microsoft Modern UI, était non seulement une nouvelle interface utilisateur, mais aussi un bac à sable du point de vue de la sécurité et une API, WinRT (pour Windows Runtime). Celle-ci devait alors remplacer l’ancienne API Win32. Après l’échec cuisant de Windows 8, Microsoft a semblé abandonner WinRT. En fait, elle l’a transformé en UWP, la plate-forme Windows «universelle» pour Windows 10. Le terme universel s’entend par plusieurs plates-formes Windows, y compris Xbox, HoloLens et ce pauvre Windows Phone – l’universalité selon Microsoft…

La division de Windows en deux platesformes a été très mal pensée et s’est montrée plus que gênante pour les développeurs. Ceux-ci ont eu le choix soit de s’en tenir à Win32 pour une plus large compatibilité, soit d’adopter UWP pour bénéficier des dernières fonctionnalités de Microsoft en matière de sécurité, de déploiement et de conception d’interface utilisateur, mais en perdant cette fois en termes de compatibilité avec les applications «historiques». Certaines API Windows 10 sont uniquement UWP. La société essaie depuis des années de rendre la séparation plus tolérable, en ajoutant un large accès à l’API Win32 pour UWP et du côté de Win32, en proposant des choses comme les XAML Island (îles XAML), une fonctionnalité qui vous permet d’intégrer un peu d’UWP dans une application Win32.

Cette fonctionnalité vous permet, plus précisément, d’héberger des contrôles UWP dans des applications de bureau non conçues à la base avec UWP. Vous pouvez ainsi améliorer l’apparence graphique, le comportement et les fonctionnalités de vos applications WPF, Windows Forms et Win32 C++ existantes, mais aussi de bénéficier des dernières nouveautés de l’interface utilisateur Windows 10 qui sont, c’est bien dommage, uniquement disponibles par le biais de contrôles UWP. Cela signifie que vous pouvez utiliser des fonctionnalités UWP telles que Windows Ink et des contrôles prenant en charge le système Fluent Design dans vos applications WPF, Windows Forms et Win32 C++ existantes.

C’est dans ce contexte assez compliqué qu’intervient Project Reunion, en sauveur potentiel de cette inextricable situation. Kevin Gallo, Vice President Corporate de Windows Developer Platform, a déclaré à ce sujet au cours de la conférence Build : « Nous avons ces deux dernières années brisé la barrière entre Win32 et les API de la plate-forme Windows universelle. Project Reunion unifiera l’accès aux API Win32 et UWP existantes et les rendra disponibles découplées du système d’exploitation, via des outils tels que NuGet, en fournissant une plate-forme commune pour les nouvelles applications. Il simplifiera également la mise à jour et la modernisation des applications existantes avec les dernières fonctionnalités, qu’elles soient écrites en C++, en .NET (y compris WPF et Windows Forms) ou en React Native, tout en découplant les API existantes et en ajoutant de nouvelles API. Nouseffectuerons aussi le travail de polyfill, en fonction des besoins, afin que les API fonctionnent à un niveau inférieur sur les versions prises en charge de Windows.» Tout est dit, il n’y a plus qu’à faire…

Le Microsoft Store de Windows 10 s’est nettement amélioré mais peine encore à séduire les utilisateurs.

WebView2

Microsoft a également parlé de WebView2 au cours de la conférence Build : « Nous développons WebView2, un autre composant de Project Reunion avec un nouveau .NET Preview. Toute application Windows peut désormais intégrer du contenu web avec la puissance de Microsoft Edge et Chromium. WebView2 fournit des fonctionnalités web complètes sur toute la gamme des applications Windows, et il est découplé du système d’exploitation, de sorte que vous n’êtes plus verrouillé sur une version particulière de Windows. » En somme, Project Reunion entend fournir aux développeurs un socle commun de développement pour Windows, aussi bien pour le développement de nouvelles applications que pour la modernisation de logiciels existants, « peu importe qu’ils soient C++, .NET (y compris WPF, Windows Forms et UWP) ou React Native ». Outre le souci non contestable de Microsoft de faciliter la vie des développeurs, c’est aussi une tentative de promouvoir l’UWP.

Microsoft semble aussi voir plus loin que son écosystème : « Au fur et à mesure que les organisations évoluent pour permettre le travail à distance, Windows Virtual Desktop, construit sur Azure, a fourni la possibilité de provisionner et de mettre à l’échelle les bureaux virtuels et les applications plus rapidement que ce qui était possible auparavant.» Il permet aux organisations de servir votre application existante sur un ensemble croissant d’appareils auxquels les utilisateurs peuvent accéder avec les clients Windows Virtual Desktop pour Windows, MacOS / iOS et Android. Microsoft a encore déclaré : « Pour améliorer l’évolutivité, nous avons introduit une fonctionnalité appelée MSIX App Attach. MSIX App Attach Preview optimisera l’expérience des utilisateurs en démêlant l’image du système d’exploitation que les organisations déploient dans le Cloud des applications auxquelles les utilisateurs doivent accéder. Cela signifie que l’adoption de MSIX pour le bureau Windows apportera aussi des améliorations lors de l’exécution de votre application dans Windows Virtual Desktop sur Azure. »

Les contrôles .NET des XAML Islands ne sont malheureusement pas supportés dans les applications C++ Win32. Ici, leur architecture.

.Net MAUI

Si vous devez développer aussi bien pour mobile Android ou Apple, Mac OS X et Windows, vous pouvez par exemple employer du JavaScript ou TypeScript pour React Native – qui sont au passage utilisés par l’équipe Office de l’entreprise – ou avec Xamarin. Forms, la boîte à outils d’interface utilisateur multi plate-forme .NET acquise par Microsoft en 2016. Microsoft a aussi présenté lors de sa conférence Build .NET Multi-platform App UI (.NET MAUI), une évolution de cette boîte à outils. .NET MAUI fournit une seule pile prenant en charge aussi bien Android, iOS et Mac OS que Windows. Les fonctionnalités natives de chaque plate-forme et le contrôle de l’interface utilisateur sont disponibles dans une API simple et multi plate-forme « offrant des expériences utilisateur sans compromis », selon Microsoft. .NET MAUI devrait donc, dans la lignée de Project Reunion, permettre aux développeurs de créer des applications pour n’importe quel appareil à partir d’une base de code unique et d’un système de projet. Les applications pourront être plus facilement déployées sur n’importe quelle cible : desktop, émulateurs, simulateurs ou appareils physiques. Les ressources multi plates-formes intégrées vous permettront d’ajouter des images, des polices ou des fichiers de traduction dans un unique projet de développement. Toujours d’après Microsoft, vous continuerez à avoir accès aux API natives du système d’exploitation sous-jacent. Ce sera même plus facile grâce aux nouvelles intégrations spécifiques aux plates-formes. Microsoft annonce que .NET MAUI sera disponible dans Visual Studio 2019, Visual Studio pour Mac et Visual Studio Code et prendra en charge les modèles MVVM et XAML existants ainsi que les futures MVU (Model-View-Update) du C# ou Blazor.

L’architecture actuelle de WinUI.

En résumé, Microsoft veut, avec Project Reunion, briser les barrières entre ses deux plates-formes applicatives. Cette plate-forme commune est en quelque sorte l’aboutissement du travail que la firme cherche à accomplir depuis de nombreuses années. Ainsi, les développeurs pourront désormais créer des applications « modernes» qui tireront parti des fonctionnalités de Windows 10, sans pour autant devoir adopter de manière exclusive l’une ou l’autre plate-forme de développement. Cette plate-forme commune serait donc en plus rétrocompatible pour le code existant et reposerait sur WinUI 3, permettant aux applications d’avoir une interface utilisateur plus riche. Reste à voir si ces améliorations seront efficaces et suffisantes pour décider les développeurs à utiliser cette technologie et à franchir le Rubicon vers le Store.

WinUI 3 est le composant maître de Project Reunion.

WinUI 3

Ce projet repose sur plusieurs composants. L’un d’entre eux est donc WinUI 3, présenté par Microsoft comme étant « le framework d’interface utilisateur natif hautement performant et optimisé pour Fluent pour Windows. Avec WinUI, les développeurs peuvent créer des expériences utilisateur qui s’adaptent et évoluent sur tous les appareils, qu’ils démarrent un nouveau projet ou modernisent une application existante. » WinUI 3 est important, car il s’agit à la fois de la dernière couche d’interface utilisateur pour UWP et également d’une couche d’interface utilisateur pour les applications Win32. Le tout premier composant à bénéficier de ces nouveautés est la toute dernière version du framework WinUI, la WinUI 3 Preview 1. Rappelons que la version Alpha de WinUI 3 était réservée aux développeurs d’applications UWP. La Preview 1 est également compatible avec les applications «historiques » (Win32) conçues pour un usage de type desktop. Un peu dans le même esprit d’ouverture, Microsoft a annoncé le déploiement de WebView2 au sein de la .NET Preview. Les applications Windows pourront ainsi embarquer du contenu web, au moins pour Edge et Chromium.

Compatibilité avec les anciennes versions de Windows

Gallo a aussi dit, mais sans fournir de précisions sur le sujet, que les API fonctionnent à un niveau inférieur sur les versions prises en charge de Windows. Cela est censé signifier que les développeurs pourront créer des applications pour la dernière version de Windows 10 sans trop se soucier de savoir si cela fonctionnera sur les anciennes versions, car Microsoft garantira la compatibilité. Cela reste à voir pour le croire, comme aurait pu dire Saint Thomas. Ce principe a été mis en place par Google pour Android il y a bien longtemps. Il était temps que le géant de Seattle se penche sur le sujet. D’après le sieur Rajesh Jha, vice-président exécutif du groupe Expériences et appareils de Microsoft : « L’idée derrière Project Reunion est de permettre aux développeurs de créer une application Windows et de cibler le milliard d’appareils Windows (…). Nous réunissons la puissance combinée de win32 et UWP afin que les développeurs n’aient plus à choisir car nous unifions ces API existantes et les découplons en quelque sorte du système d’exploitation. »