.NET 5 : la convergence finale des frameworks de Microsoft

Microsoft a décidé de mettre fin à la cacophonie de ses plates-formes de développement en annonçant la sortie de .NET 5, convergence de tout ce qui existait jusqu’à présent. Le changement est important et va profondément modifier les habitudes des développeurs.

Dans la vie d’un développeur, il y a des dates qui comptent. Le 6 mai 2019 en fait partie qui a vu Microsoft revoir entièrement son offre en matière de frameworks, avec la convergence des versions 4.X et Core, mais aussi un habillage beaucoup plus cohérent de ses principaux composants, la prise en compte de l’interface cliente, qui manquait cruellement aux versions Core 2.X, par exemple.

Jusqu’à présent, ils avaient le choix entre deux solutions, soit continuer sur la voie tracée avec .NET Framework, qui en est maintenant à la 4.8, soit opter pour la version « montante » Open Source .NET Core, elle-même en version 2.1. Avec la 5.0, ce ne sera plus le cas, même si les utilisateurs ne sont pas contraints de choisir au plus vite.

Depuis deux ans, c’était un secret de « polichinelle » que la politique de Microsoft est en train de basculer vers le monde Open Source et que le développement serait le premier « touché » par cette évolution. Visual Studio est déjà sous licence MIT, tout comme les versions 2.0 et 2.1 du Core .NET, ce qui n’a pas manqué de surprendre de la part d’un éditeur qui a toujours protégé ses ressources et n’a fait confiance que du « bout de la souris » aux méthodes et habitudes du monde libre.

Mais tout le monde peut se tromper et il vaut mieux avoir raison tard que jamais.

 

L’unicité tant attendue

Les développeurs ont toujours souffert de l’incompatibilité des plates-formes. Ceux qui travaillaient avec .NET Framework ne pouvaient pas sortir du cadre de Windows dans lequel ils étaient confinés, alors qu’à côté, des développements spécifiques se faisaient sur d’autres plates-formes « maison » : Xamarin, pour le « cross-platform » mobile et bien sûr, .NET Core.

.NET 5 va changer cela et il n’y aura plus qu’une seule plate-forme pour des développements, portables sur de nombreux environnements, non seulement les précédents, mais aussi iOS, Android, WatchOS, Mac OS, WebAssembly, Mono, etc. Ce sera la grande lessive, un nettoyage de toute la maison Microsoft. Qui c’est vrai, en avait grand besoin.

Mais il faut être plus précis.

Il n’y aura effectivement qu’une seule plate-forme, mais il y aura par contre plusieurs « run-time » pour faire tourner le code IL (« Intermediate Language ») issu de la compilation et destiné aux plates-formes Windows, Linux, MacOS, iOS et les autres.

Disons qu’on aura réglé un problème, celui du développement, mais que la diversité des plates-formes d’exécution restera entière, ce qui est logique dans la mesure où Microsoft n’a pas de prise dessus, hormis celles dont il a la paternité. Et que l’idée d’un runtime unique n’a pas de sens.

 

L’objectif de .NET 5 est de n’avoir plus qu’un seul framework pour les développeurs, quelle que soit la plate-forme d’exécution. Et le choix est large, qui pourrait évoluer avec l’arrivée de nouveaux contextes spécifiques comme la Blockchain, l’IA, le calcul scientifique, etc.

 

La feuille de route

A partir de .NET 5.0, Microsoft a prévu de livrer une version majeure de son framework chaque année. Ce qui est bien dans l’air du temps, ce que fait d’ailleurs Java depuis la version 9 de son JDK.

En attendant, Microsoft a prévu de nous livrer un .NET Core 3.0 dès juillet 2019, qui sera suivi d’un .NET Core 3.1, avant le lancement de .NET 5.0, qui lui, est prévu pour novembre 2020.

Vous l’aurez remarqué, il n’y aura pas de version 4, pour ne pas créer d’ambiguïté avec les versions 4.X du framework.

Ce qui arrive assez souvent dans notre monde du développement, avec quelques exemples célèbres, comme PHP passé de 5 à 7 sans s’arrêter à la case 6, voire du JDK (Java) passé de 2 à 5, pour s’harmoniser avec les frameworks Java EE et Java SE et a donc fait l’impasse sur les niveaux 3 et 4.

Il faut noter que Microsoft précise qu’en même temps que la version 5 arrivera dans les « bacs », les autres versions vont disparaître, 4.8 et 3.0 par exemple. On peut le croire…

 

Une évolution importante

Manifestement .NET 5 sera une date très importante, qui marquera le paysage applicatif Microsoft, dont on sait qu’il est maintenant largement tourné vers les systèmes centraux, plus que vers les desktops, qui seront beaucoup plus simples qu’aujourd’hui, à base d’HTML, agrémenté de quelques API JavaScript (pour simplifier).

Ce qui est sûr, c’est que .NET 5 sera Open Source, comme Core 3.0 et toujours fortement intégré à Visual Studio 2019 ou son successeur et l’éditeur Visual Studio Code.

Toutefois, la vraie nouveauté de .NET 5, au moins par rapport à 4.8, ce sera l’ouverture à d’autres plates-formes et l’interopérabilité avec d’autres systèmes, à commencer par le « diable » Java.

Plus personne n’est étonné de cette évolution, qui est clairement affichée par Satya Nadella, mais il faut quand même se souvenir que cela n’a pas toujours été le cas et qu’il n’y a pas si longtemps, le seul fait d’évoquer le libre et Java, provoquait chez Steve Balmer, le patron de l’époque, des « éruptions rougissantes parfaitement incontrôlables »...

Maintenant, cela paraît normal, Microsoft se pliant au marché, dont il a bien compris qu’il est extraordinairement diversifié, avec des capteurs sous on ne sait quel OS et des containers qui font la part belle à Linux.

Les temps ont changé et Microsoft avec eux.

D’abord, .NET 5 fonctionnera sous Linux, Windows, MacOS, iOS l’OS d’Apple sur les iPhones, Android de Google, tvOS, watchOS pour les montres, WebAssembly, etc.

Et l’expérience montre, n’en déplaise à Steve Balmer, que les développeurs n’ont pas attrapé la scarlatine pour autant et que sa répartie : « Linux est un cancer de la propriété intellectuelle qui s’attache à tout ce qu’il touche », n’est pas forcément ce qu’il a dit de plus intelligent pendant son passage à la direction de Microsoft.

On précisera que l’interopérabilité concerne aussi les applications écrites en Objective-C (le vieux langage d’Apple) et surtout Swift, beaucoup plus récent du même Apple.

Microsoft a déjà publié la feuille de route de .NET Core 3.0, .NET 5 et de la suite unifiée. Avec cette stratégie, nous serons sans doute mis plus souvent à contribution pour harmoniser nos installations, mais au moins le paysage aura été simplifié, qui devrait nous éviter bien des tracas.

 

Le choix des runtime

Avec .NET 5, on ne se posera donc plus de questions sur l’identité du framework. Ce sera CoreFX, anciennement les classes de base BCL, agrémentées des nombreux espaces de noms, comme c’est la tradition.

Pour les anciennes applications .NET on comprend qu’il n’y aura pas débat et le runtime sera la CoreCLR, qui équipe déjà la version libre .NET Core 3.0.

Le cas de Mono est un peu plus compliqué.

Il faut se rappeler que ce projet avait été initié en son temps, non pas par Microsoft, mais par Miguel de Icaza, quand il était encore à la tête de Ximian (Suse Linux), avant d’être racheté par Novell.

Ce projet avait pour ambition de faire tourner des applications .NET sous Linux. Ce qui avait entraîné la réécriture des composants du framework et la mise en œuvre d’un runtime Mono .NET particulier.

Avec 5.0, ce runtime n’a plus lieu d’être et les applications Mono, telles qu’elles ont été reprises par Microsoft, tourneront sur la CoreCLR standard. Selon Microsoft, le projet Blazor qui a pour finalité d’écrire des applications Web compilables en WebAssembly grâce à un compilateur AOT (« Ahead-Of-Time », pourrait être l’un des premiers à basculer.

Le cas de MacOS est un peu dans les mêmes eaux, ce système ayant lui-aussi bénéficié du projet Mono, les applications MacOS Mono et MacOS .NET Core devant fonctionner sur CoreCLR.

Pour ce qui est des plates-formes mobiles, le secret s’appelle Xamarin, cette compagnie rachetée par Microsoft, dont le produit éponyme permet d’écrire les applications en C#, une partie commune aux deux plates-formes Android et iOS (puisque Windows Mobile a disparu) et les adaptations via une partie spécifique, toujours en C#, grâce aux SDK dédiés à Android et iOS, fournis avec Xamarin. Ce qui fait dire à certains que l’on n’est plus véritablement dans du cross-platform comme l’affirme Microsoft, mais dans du cross-platform personnalisé… Question de vocabulaire.

Ce qui est sûr, c’est qu’il faudra considérer Xamarin aussi comme un runtime, pour assurer l’ouverture vers les mondes Apple et Android.

L’avenir

Microsoft a été très clair sur l’évolution de ses plates-formes, qui seront centrées sur le canevas Open Source. Et sa feuille de route l’est tout autant, avec les sorties prévues de .NET 6.0 en novembre 2021, de .NET 7.0 en novembre 2022 et de .NET 8.0 en novembre 2023.

On peut estimer que Microsoft aura alors réussi son pari de devenir aussi oecuménique que Java.

Dans la mesure où l’interopérabilité avec Java et les autres mondes fait partie des priorités de la firme de Redmont, on se dit que les risques seront plus limités de s’aventurer dans une voie, qui n’est plus systématiquement celle de Windows.

Car il ne faut pas oublier non plus que .NET, c’est aussi une architecture CLI et des langages adaptés, C# et surtout ASP.NET qui bénéficient d’un bon ressenti de la part des utilisateurs, la concurrence de ce dernier langage se situant plus au niveau PHP, voire de Node, que véritablement de Java.

Mais ça c’est une autre histoire.

Les critères sont évalués de 1 à 5

Marché
Présence réelle sur le marché.
Usage
Intérêt potentiel, hors considérations commerciales
Standards
Niveau de standardisation du sujet
Coût
Intérêt potentiel, hors considérations commerciales
Futur
Niveau de crédibilité prévisible
Maturité
Niveau de maturité atteint actuellement