Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Aloha Maui, et merci pour tout Xamarin.Forms !

Le temps va venir pour Xamarin.Forms de tirer sa révérence et de laisser la place à quelque chose de bien plus ambitieux, MAUI. Pas de panique je vais tout vous expliquer…

Une brève histoire du temps qui passe et qui se répète (mais en mieux)…

Et si on réinventait Silverlight ?

Rien que citer Silverlight me fera passer pour un vieux combattant, je le sais, j’assume. Pour les plus jeunes qui n’ont pas développé avec cette plateforme extraordinaire disons qu’il était possible d’écrire un seul code C# et XAML (vectoriel, le vrai !) qui était ensuite exécuté aussi bien sur PC que sur Mac dans un Browser et même sur PC Desktop sans besoin d’être connecté (mode dit “out of browser”). Les versions Android et iOS étaient prêtes ou presque. Puis Apple en refusant le plugin Flash d’Adobe a entraîné l’abandon de Silverlight à une époque où Microsoft était dirigé par des gens qui n’étaient plus en accord avec leur époque ni le futur et qui détestaient de surcroît C# autant que XAML. Ils n’ont pas eu la peau de WPF et de .NET mais il s’en fallu de peu.

Le grand principe de Silverlight plutôt dédié au Web comme Flash était que le développeur n’écrive qu’un seul code compilé dans un langage intermédiaire et que Microsoft fournisse le JIT Compiler pour les principales plateformes. On avait un seul code (Code + Code d’UI), on n’avait qu’une seule source à maintenir et ça tournait à l’identique partout. Un bonheur parfait ou presque. L’universalité nous l’avons touché du bout des doigts, nous l’avons effleuré ! J’y étais, je l’ai vécu !

Fin d’un rêve

Mais ce rêve d’universalité est tombé à l’eau. Et nous en avons pris pour cher… Des années d’errances. Heureusement une petite société née du projet Mono venait de prendre vie, Xamarin, son but ? Ecrire un .NET pour Android et pour iOS afin de rendre plus facile le développement cross-plateforme sur les smartphones, les vedettes montantes de cette époque.

C’était déjà merveilleux, mais très loin de ce que Silverlight offrait, car rappelez-vous, même abandonné pour le Web Silverlight restait la plateforme de Windows Phone ! Et ce satané produit savait faire du XAML vectoriel avec fluidité même sur ces petites machines ARM. Avec Xamarin on avait juste la partie de code C#, les UI devaient être refaites pour chaque plateforme en utilisant leur système natif. Encore trop laborieux.

Mais cette expérience connu une accélération lorsque Xamarin inventa Xamarin.Forms, c’est à dire ajouta XAML à C#. Certes pas le XAML de WPF ou de Silverlight, avec primitives graphiques vectorielles. Non, un XAML “réinventé” utilisant la même syntaxe mais d’autres contrôles, d’autres conteneurs et surtout ne faisant qu’habiller les contrôles natifs de chaque plateforme. Et puis sa cible devenait les smartphones et non plus le Web ni les PC.

Le progrès était malgré tout décisif. On pouvait attaquer toutes les plateformes avec un seul et même code C#/XAML !

Fin d’un rêve

C’est là que Microsoft voyant sa stratégie du cross-plateforme vertical (plein de machines différentes mais un seul OS, Windows) prendre l’eau de toute part s’intéressa à cette petite entreprise qui ne connaissait pas la crise…

Quand Microsoft mangea son chapeau en passant à Windows 10 reprenant le bureau classique et oubliant les grosses tuiles, quand la mort dans l’âme mais l’air de rien ils perdaient le milliard d’investissement dans Nokia et qu’il fallu mettre au chômage des milliers de salariés suite à l’arrêt de Windows Phone, quant l’universalité de WinRT et UWP tombèrent à l’eau car ne se résumant plus qu’à être portable sur… PC uniquement, il était temps de réagir !

C’est là certainement que le cross-plateforme vertical vécu ses derniers jours. Mais Microsoft ne pouvait rester sur un tel échec. Dans l’impossibilité de s’affirmer comme le maître du cross-plateforme 100% maison (smartphones maison, PC maison, tablettes maison…) et à raison, ils passèrent au vrai cross-plateforme, l’horizontal, c’est à dire un même code tournant sur des OS différents et des plateformes différentes. Mais ils n’avaient rien pour le faire…

A new hope …

C’est à point nommé que l’acquisition de Xamarin par Microsoft offrit à ses derniers l’outil cross-plateforme déjà adapté aux langages maison que sont C# et XAML : Xamarin.Forms.

Au départ bâti sur l’idée d’un Mono Android et d’un Mono iOS, Xamarin.Forms ne marchait que pour ces deux plateformes tout en supportant très rapidement Windows Phone donc UWP.

Ainsi Microsoft à défaut d’inonder le monde de ses machines avec son OS pouvait au moins espérer arroser le marché de produits logiciels qui pouvaient tourner aussi bien sur Mac que sur PC, autant sur Android que iOS.

Le talent incroyable des équipes Xamarin et de son fondateur Miguel de Icaza sauvèrent la situation. Non sans quelques pirouettes et petits arrangements, le XAML de Xamarin.Forms n’aura jamais été celui de Microsoft, mais tout de même quelle réussite ! Quel tour de force !

La valse des .NET

Mais ce montage savant entre du Mono adapté à des OS différents, du XAML “presque” comme le vrai, tout cela accéléra l’explosion des “.NET” chez Microsoft qui ajoutait  “.NET Standard” tout en créant “.NET Core” et en maintenant “.NET classique” pour entretenir encore plus la confusion.

Bien que les solutions apportées furent excellentes, la cohérence interne manquait cruellement, l’interopérabilité de bon niveau se payait par des complications inutiles. Le sac de nœuds allait tôt ou tard devenir impossible à démêler…

Il fallait passer la vitesse supérieure et embrasser de façon nette et claire ce changement de paradigme entre verticalité et horizontalité, c’est à dire en prenant conscience que .NET était bien plus aimé et implanté que ne le serait jamais WinRT, en acceptant une fois pour toute que UWP était aussi un échec, et que toutes ces versions de .NET devenaient impossibles à maintenir dans le temps.

La grande unification

De là est né l’idée de .NET CORE puis de .NET 5 qui va unifier toutes les versions de .NET.

Mais CORE c’est du code, du C#, pas de l’UI, pas du XAML.

Alors poussant le concept jusqu’à son terme cette fois-ci Microsoft mis en œuvre ce que nous connaissons aujourd’hui sous le nom de MAUI et qui justifie tout cet historique pour en comprendre les tenants et aboutissants.

Car oui, Microsoft va réinventer Silverlight, mais en mieux, en cross-plateforme NATIF pour le Web mais aussi pour les PC, les Mac, les iPhone, les machines Android, voire même les IoT ou les machines Linux, OS se trouvant de plus en plus intégré à Windows lui-même… Qui aurait cru à un tel renversement quand Ballmer parlait de Linux comme d’un “cancer” de l’informatique.. Satya Nadella fait certes une fixette sur le Cloud, mais d’une part cela rapporte beaucoup et fait que Microsoft n’a rien perdu de sa superbe mais en plus son pragmatisme fait qu’il a su faire changer radicalement les mentalités maison vis-à-vis de Linux et de l’Open Source aussi. Microsoft lui devra beaucoup quand dans le futur il faudrait faire le bilan de son action.

L’annonce officiel de MAUI

imageRevenons au cœur de notre sujet que vous allez maintenant être capable d’apprécier dans toutes ces dimensions !

La conférence annuelle Microsoft // Build / vient de se terminer et en raison de la pandémie actuelle, elle s’est tenue sous forme de conférences en ligne. C'est la première fois que Microsoft organise virtuellement une conférence de cette taille. L'événement a comme chaque année été l’occasion de faire quelques annonces qu’il faudra regarder de près mais aujourd’hui celle qui va nous intéresser c’est l’évolution des Xamarin.Forms qui cèderont leur place à Maui.

Microsoft a ainsi annoncé son avancée vers le « Journey to one .NET ». Une plate-forme .NET unifiée avec tous les outils dont les développeurs ont besoin pour créer des logiciels pour toutes les plates-formes. Avec une nuance de taille sur “l’avant”, la génération de code NATIF.

Voici donc venu le temps d’un .NET universel et de “l'interface utilisateur pour applications multi-plateforme” dont l'abréviation (en anglais) est MAUI pour Multi-platform App UI nom qui sera utilisée sous la forme “Maui”. Nom d’une île hawaïenne.

Mais les noms chez Microsoft c’est toujours un problème, à croire qu’ils n’ont pas de service juridique… Ils avaient du abandonner Metro (pour Windows 8) car quelqu’un s’en servait déjà, et à peine l’annonce de MAUI faite qu’on sait déjà qu’une société semble en contester la paternité…

Entre nous, nous nous fichons de savoir comment va s’appeler MAUI au final. Même si c’était Tartiflette ça me conviendrait si toutes les promesses sont tenues et tellement cette avancée nous relance dans la grande course au futur mise en suspend depuis la mort de Silverlight.Car même si les manques ont été habilement maquillés, même si Xamarin vint sauver l’histoire de la noyade totale, tout cela n’était que bricolage intelligent comparé à MAUI.

La nature de MAUI

Maui est essentiellement la prochaine évolution de Xamarin.Forms mais ce sera bien plus qu'un simple changement de marque . L'une des choses les plus étonnantes pour el développeur est qu'il n’y a plus un seul projet dans la solution à partir d'une seule base de code. Plus de projets différents pour iOS, Android ou UWP ! Outre MVVM, Maui prendra également en charge le nouveau modèle de conception MVU (Model-View-Update) , également connu sous le nom de The Elm Architecture , et bénéficiera de la prise en charge de Blazor .

Autant dire que cela nous laisse du grain à moudre et que j’ai en tête pas mal de papiers à publier sur ces technos.

Il faut noter que la prise en charge de la CLI .NET sera également ajoutée, ce qui signifie qu’on pourra démarrer un projet avec une simple commande en ligne de type : dotnet new maui. Les espaces de noms seront également mis à niveau, Xamarin.Forms fera place à System.Maui. Xamarin.Essentials sera poursuivi mais s’appellera System.Device, complétant le jeu d'outils le plus important pour les développeurs .NET mobiles.

Car MAUI n’est pas un nouveau Silverlight, outil Web principalement à l’époque, ni même un nouveau Xamarin.Forms, outils smartphone par excellence. Non, j’ai beaucoup simplifié en le laissant croire. En réalité MAUI est une construction généraliste et platform agnostic ! MAUI ne vise “rien en partucilier” mais “tout en général” … Ajoutez les bons espaces de noms et vous développerez pour le Web avec Blazor, utilisez d’autres espaces de noms et vous aurez un ensemble pour développer pour smartphones ou tablettes, etc…

Où cela laisse-t-il le développement Xamarin.Native (Xamarin.iOS et Xamarin.Android)? Les deux seront intégrés à la plate-forme .NET 6 et renommés respectivement en .NET pour iOS et .NET pour Android . Ils bénéficieront également du support CLI: dotnet new ios et  dotnet new android, ce qui accélérera le développement.

Maui est open source, vous pouvez donc facilement suivre les progrès du développement sur leur référentiel Github . Ils ont déjà leur feuille de route partagée. Nous devrons être patients avant de pouvoir jouer avec les nouveaux jouets, mais cela semble très prometteur!

La road map

L’annonce vient concrétiser la naissance de MAUI mais pas forcément sa disponibilité. Donc pas de panique tout ne change pas demain matin !

Selon la dernière road map (suivre le lien plus haut pour la dernière version quand vous lirez) la Preview 1 est prévue pour “late 2020” donc d’ici la fin de cette année, avec les vacances, Covid et le reste ça veut dire dans pas si longtemps. C’est à ce moment que le Namespace des Xamarin.Forms deviendra officiellement System.Maui.

Puis en “début 2021” ce qui veut dire entre janvier et juin en gros, nous disposerons de la Preview 2. C’est là que les choses vont commencer à devenir intéressantes et utilisables mais c’est là aussi que les gros changements auront lieu (héritage des classes, etc).

Prévu aussi “early 2021” donc peu de temps après, la Preview 3 devrait ajouter MacOS.

Milieu 2021 la Preview 4 ajoutera Windows.

Vers la même époque sortira rapidement la Preview 5 dont on ne sait rien du contenu pour le moment.

Puis l’heure de la sortie approchera avec une Release Candidate en septembre 2021 et une General Availability pour novembre 2021.

On peut donc dire que MAUI ça commence d’ici la fin de l’année, que les choses vont chauffer courant 2021 et que fin 2021 ça sera utilisable en production.

Impact sur les projets Xamarin.Forms

Dit autrement cela ne nous laisse pas tant de temps que ça pour analyser MAUI, faire des tests, essuyer les plâtres, et mettre en chantier des applications qui sortiront fin 2021… Tous les projets Xamarin.Forms qui auraient du être commencés en 2021 devront ainsi être soupesés pour savoir s’il ne sera pas plus intéressant de les commencer même avec les Previews de MAUI sachant que lorsqu’ils seront livrables MAUI sera alors releasé.

Fin 2021 on ne fera plus de Xamarin.Forms mais du MAUI. Mais tout le monde sait qu’un projet un peu sérieux prend plusieurs mois voire plus avant de sortir. Il faudra ainsi saisir la bonne fenêtre pour les débuter en MAUI courant 2021.

Mais si cela est trop fluctuant, pas assez clair, il faudra continuer à faire du Xamarin.Forms pour tous les projets de petite et moyenne taille. Xamarin.Forms ne meurt pas, ce n’est pas comme Silverlight, Xamarin.Forms devient MAUI c’est très différent ! Entre des obsèques et fêter une naissance il y a tout un monde, celui de la vie qui continue !

Conclusion

La dernière phrase ci-dessus aurait pu faire une bonne conclusion je me suis grillé une occasion. Il me faut donc conclure sans envolée lyrique en ajoutant à tout ce qui vient d’être dit que MAUI est véritablement une révolution. La véritable universalité que nous avons frôlé voit enfin le jour, .NET que certains voulaient enterrer à une certaine époque chez Microsoft redevient la plateforme centrale de l’édifice logiciel de l’éditeur. Les développeurs .NET, C# et XAML restent toujours et encore la colonne vertébrale pour la production de logiciels professionnels et désormais totalement NATIFS pour toutes les plateformes.

Lorsqu’on entend de si bonnes nouvelles on voudrait que tout soit déjà prêt et utilisable… Hélas la réalité est qu’il faudra attendre quelques mois encore.

Mais l’avenir que nous promet MAUI est un avenir Open Source et natif avec C# et XAML en cross-plateforme. Un rêve devient réalité sous nos yeux…

Avec tout cela vous avez encore plus de bonnes raisons de vous abonnez à la lettre d’information de Dot.Blog ou à son flux RSS pour être sûr de ne pas louper les articles à venir et de ….

Stay Tuned !

blog comments powered by Disqus