.NET comme alternative à Java

Le framework .NET (prononcer Dotnet) est un environnement d'exécution de logiciel créé par Microsoft. Il fonctionne sur Windows à l'origine mais est devenu open source et compatible avec Linux. .NET offre une bibliothèque de fonctions pour les interfaces graphiques, l'accès aux données, les réseaux et les applications Web, des compilateurs et une machine virtuelle. Elle permet de faire fonctionner les applications pour le bureau classique, à coté des applications du Modern UI qui ont WinRT en backend.

Le 12 novembre 2014, la compagnie a annoncé qu'elle rendait .NET open source (sous licence MIT) et qu'il fonctionnerait dorénavant aussi sur Linux et MacOS. .NET désigne alors trois produits différents qui tous trois fonctionnent avec le langage C#:

  1. .NET Framework, l'origine, qui fonctionne sur Windows seulement.
  2. .NET Core, la version multi-plateformes, en cours de développement mais qui peut convenir déjà pour les application coté serveur.
  3. Mono, une version pour le bureau ou mobiles Android ou iOS qui progressivement partage le code de .NET core.

Avec l'introduction de .NET 5 en 2019, il n'y a plus qu'une plateforme qui fonctionne sur Windows, Linux, Mac, Android et iOS. Elle remplace .NET Framework sur Windows, .NET Core, et Mono et les autres systèmes.

.NET ou Java, lequel choisir?

Le programmeur est surtout concerné par le choix d'un langage de programmation et des outils pour le compiler ainsi que des API disponibles pour réaliser l'application. Les langages suivants fonctionnent sur .NET: Ada, Basic, C#, C++, Cobol, Eiffel, Fortran, Haskell, Oberon, Pascal, Perl, Python, Ruby, Scheme, SmallTalk. Voir la liste complète.

Passage à l'open source et .NET Core

En avril 2014, Microsoft a décidé de rendre .NET réellement open source et pour se faire de le placer sous l'égide d'une fondation indépendante, la .NET Foundation. Elle fournit le code source des compilateurs C# et Visual Basic pour différents systèmes, en reprenant le code de Microsoft et celui de Mono. ASP.NET devient aussi open source. Pour la robotique le Micro Framework, sera aussi géré par la fondation et sous licence Apache.

En novembre 2014 Microsoft porte elle même .NET sous Linux et Mac OS. Cela comprend le coeur et le framework de .NET, outre ASP.NET et le compilateur C#. Le runtime, autrement dit le JIT sont prévus sur GitHub pour 2015.
Même Visual Studio devient gratuit avec la version Community.

Pourquoi ce revirement vers l'open source? Rendre .NET plus ouvert aura de nombreux bénéfices:

En 2015, Microsoft introduit .NET core, une architecture modulaire pour remplacer le framework .NET (qui était en fait plusieurs frameworks selon les types de systèmes). Cela fournit une bibliothèque de classe unique pour tous les types d'appareils et est open source. Cela permet par exemple d'implémenter ASP.NET sur Linux.

En 2018, Microsoft annonce le support de Windows Form, WPF et UWP XAML dans .Net Core 3. Cela fait de .Net Core le successeur de .Net Framework avec l'avantage que l'on n'a pas à installer différentes version du Framework selon l'application comme c'était le cas.
Mais cela concerne uniquement Windows: Windows Form dépend de Windows et ne peut être entièrement porté sur Linux ou Mac. Windows Forms dépend de GDI Plus et WPF de DirectX, deux bibiliothèques graphiques propres à Windows. Il est envisagé de les rendre open source toutefois.

En mai 2019 Microsoft annonce la fin de .NET Framework qui en restera à la version 4, et qui est remplacé par .NET 5, une version unique et universelle qui remplace aussi .NET Core, Mono, Xamarin. Elle sera capable de produire du code WebAssembly également.

Qu'est-ce qui est open source dans .NET?

Dans le diagramme ci-dessous (de Microsoft, traduit en français et grisé par Scriptol.fr), les composants open source sont sur un fond de couleur, et sur fond gris les composants fermés, et qui ne fonctionnent que sous Windows.

.NET 2015

Open source:

Fermés:

Code source de .NET sur GitHub.

L'API standard

En septembre 2016, Microsoft a annoncé la création d'une API standard pour toutes les plateformes .NET: .NET Framework conçue dès l'origine pour Windows, .NET Core, la version open source et portable, et Mono, la version de Xamarin (maintenant propriété de Microsoft) pour les OS mobiles autres que Windows.

Cela correspond au diagramme suivant:

.NET Standard

Les développeurs sur .NET Framework n'auront pas besoin de modifier leur code: les interfaces WPF ou autre restent les mêmes. La nouvelle API permet surtout d'étendre les possibilités de .NET Core.

Faut-il utiliser Java ou .NET?

Pour réaliser une application actuellement, faut-il choisir l'environnement Java ou .NET? Compatibilité et richesse des fonctionnalités sont les clés pour un meilleur choix, mais d'autres facteurs sont à prendre à compte.

Depuis novembre 2008, Java est sous licence Open Source, GPL au moins partiellement (ce n'est pas le cas de la version mobile).
Plusieurs langages de programmation on été portés sur cette plateforme et sont compilés en bytecode interprété par la JVM. Notamment Python et Ruby.

.NET est maintenant géré par une fondation indépendante, et depuis novembre 2014 est maintenant aussi libre que Java (qui ne l'est pas sur mobiles en fait). On dispose aussi de Visual Studio en version gratuite pour réaliser des applications pour tous systèmes.

C# est plus moderne et plus complet que Java mais pas plus que Scala + la bibliothèque Java. On choisira surtout en fonction de ce que propose la bibliothèque pour une application donnée. L'avantage de Java est que les anciennes applications fonctionnent avec chaque nouveau runtime, alors que les les applications .NET réclament une version précise du runtime: vous pouvez être obligé d'installer plusieurs anciennes versions sur votre ordinateur...

XAML ou JavaFX

Mono et .NET avaient un atout, c'était Silverlight, une technologie du Web utilisant une version allégée de .NET multi-navigateurs, et pour laquelle Mono offrait un port sous Linux, Moonlight, maintenant abandonné.
Mais Silverlight ne fonctionne pas dans l'interface Modern UI de Windows 8 et remplacé par HTML 5 + JavaScript ou XAML + C#. Que se soit XAML ou HTML 5, même si les principes sont différent, il est facile de décrire une interface avec un langage déclaratif.
De son coté, Java dispose de JavaFX, que supportent les principaux outils de développement (voir en bas de page).
On peut dire que les deux plateformes disposent d'un outil de création d'interface utilisateur graphique efficace et qui améliore la productivité.

Les éditeurs sont plus que réticents à utiliser Modern UI, au point qu'un éditeur de jeu ait lancé sa propre version de Linux pour ne pas l'utiliser, SteamOS, et que les fabricants envisagent de remplacer MUI par Android, fonctionnant dans Windows! Cette seconde initiative plaide en faveur de Java.

Mono et .NET Core

Mono est une version multi-plateformes compatible avec .NET réalisée à l'origine par Novell. Après le rachat de Novell par Attachmate, l'équipe de développement de Mono a décidé de former une compagnie indépendante, Xamarin. Elle poursuit le projet Mono et fournit des versions commerciales pour les principaux smartphone, dont Android et iOS.

Mono est portable: il peut fonctionner sur tous les UNIX, sur MacOS et sur Windows. Un avantage de Mono est qu'il est possible de compiler C# en code natif sous ces systèmes à partir du même code source exactement, de réaliser même des jeux comme le montre Unity qui s'est spécialisée dans le jeu sous Mono. Ils fonctionnent aussi sur les mobiles et les consoles de jeux.

.NET Core était la nouvelle version de la platerforme lancée par Microsoft pour rendre .NET portable, afin surtout qu'il soit 'utilisable sur serveur Linux dans son service de cloud Azure. Elle concurrence donc Mono, mais n'offre pas en 2018 les mêmes possibilités. Produire un exécutable requiert toujours Mono.
Les deux frameworks utilisent le même compilateur Roslyn.

Mono et .NET Core sont maintenant tous deux remplacé par un unique framework, .NET 5.

Les mobiles

Même si on programme sur le bureau, les mobiles sont un facteur à prendre en compte, car c'est un plus si on peut réutiliser son expérience éventuellement sur ces appareils. C'est aussi un domaine où les développements à venir seront les plus importants

La machine virtuelle Java, payante sur mobiles, est supplantée par Dalvik, un interpréteur alternatif pour Android et qui se trouve porté aussi sur d'autres OS.
Il est possible de programmer en C# sur Android grâce au port de .NET par Xamarin. C'est le langage de prédilection sur Windows Phone.
Vu l'importance d'Android, Java est le langage qui l'emporte sur les smartphones. La vraie alternative est ici avec Objective C d'iOS.

En 2014, Microsoft a ajouté .NET Native à Visual Studio: la possibilité de compiler le code source en langage binaire, pour la boutique Windows Store, donc sur mobiles ou Windows 8. Ainsi on passe l'étape qui consiste à compiler le bytecode lors de la première utilisation d'une application. Cela économise l'espace occupé par les fichiers en langage intermédiaire.

Conclusion

Java se présente avec les avantages de l'ancienneté: stabilité, communauté, documentation, outils de développement nombreux, tandis que .NET offre plus d'ouverture: presque tous les langages, des idées nouvelles,
Sous Windows, .NET est conservé pour les applications sur le bureau classique, mais est remplacé par un sous-ensemble pour les applications immersives de Modern UI. Et MUI est l'interface privilégiée pour les nouvelles applications Windows. Donc si l'on cherche un portabilité universelle, HTML 5 peut être en fait la solution.

Si vous optez pour .NET, téléchargez l'EDI Visual Studio pour réaliser des applications.
Et si vous êtes indécis, sachez que JSC recompile les assembly .NET en JavaScript, PHP ou Java...

Outils

LLILC. Compilateur MSIL basé sur LLVM. C'est à la fois une alternative à JIT et un compilateur AOT.

Les composantes de .NET

Les programmeurs sous .NET intègrent un univers de systèmes et de composants à utiliser.

Nouveaux composants: