Mono est un framework logiciel libre et open source qui vise à exécuter des logiciels conçus pour le .NET Framework sur Linux et d'autres systèmes d'exploitation. Initialement développé par Ximian , qui a été acquis par Novell , il a ensuite été développé par Xamarin , qui a été acquis par Microsoft . En août 2024, Microsoft a transféré la propriété de Mono à WineHQ .
Histoire

Lorsque Microsoft a annoncé pour la première fois son .NET Framework en juin 2000, il a été décrit comme « une nouvelle plate-forme basée sur les normes Internet » et en décembre de la même année, l' infrastructure de langage commun sous-jacente a été publiée en tant que norme ouverte, « ECMA-335 » ouvrant la possibilité d'implémentations indépendantes Miguel de Icaza de Ximian pensait que .NET avait le potentiel d'augmenter la productivité des programmeurs et a commencé à étudier si une version Linux était réalisable . Reconnaissant que leur petite équipe ne pouvait pas espérer créer et prendre en charge un produit complet, ils ont lancé le projet open source Mono, le 19 juillet 2001, lors de la conférence O'Reilly .
Après trois ans de développement, Mono 1.0 a été publié le 30 juin 2004. Mono a évolué de son objectif initial d'une plate-forme de développement pour les applications de bureau Linux vers la prise en charge d'une large gamme d'architectures et de systèmes d'exploitation, y compris les systèmes embarqués.
Novell a acquis Ximian en 2003. Après l'acquisition de Novell par Attachmate en avril 2011, Attachmate a annoncé des centaines de licenciements au sein du personnel de Novell, remettant en question l'avenir de Mono.
Le 16 mai 2011, Miguel de Icaza a annoncé sur son blog que Mono continuerait d'être soutenu par Xamarin , une société qu'il avait fondée après avoir été licencié de Novell. L'équipe Mono d'origine avait également déménagé dans la nouvelle société. Xamarin prévoyait de continuer à travailler sur Mono et avait prévu de réécrire les piles .NET propriétaires pour iOS et Android à partir de zéro, car Novell possédait toujours MonoTouch et Mono pour Android à l'époque. Après cette annonce, l'avenir du projet a été remis en question, MonoTouch et Mono pour Android étant en concurrence directe avec les offres commerciales existantes désormais détenues par Attachmate , et considérant que l'équipe Xamarin aurait des difficultés à prouver qu'elle n'utilisait pas des technologies qu'elle avait développées auparavant lorsqu'elle était employée par Novell pour le même travail. Cependant, en juillet 2011, Novell, désormais filiale d'Attachmate, et Xamarin, ont annoncé qu'ils accordaient une licence perpétuelle à Xamarin pour Mono, MonoTouch et Mono pour Android, qui a officiellement pris la direction du projet.
Le 24 février 2016, Microsoft a annoncé avoir signé un accord définitif pour acquérir Xamarin.
Le 27 août 2024, Microsoft a transféré la propriété de Mono à WineHQ, l'équipe de développement de Wine , une couche de compatibilité Windows.
État actuel et feuille de route
La version actuelle de Mono est la 6.12.0 (en date de juin 2024 ). Cette version fournit l' API principale du .NET Framework et prend en charge Visual Basic.NET et C# 7.0. LINQ to Objects , XML et SQL font partie de la distribution. Windows Forms 2.0 est également pris en charge, mais n'est pas activement développé, et en tant que tel, sa prise en charge sur Mono est incomplète. La version 4.0 a été la première version à intégrer le code source original de Microsoft publié par Microsoft dans le cadre du projet .NET Core .
Depuis le 14 janvier 2021, Mono prend en charge toutes les fonctionnalités de .NET 4.7, à l'exception de Windows Presentation Foundation (WPF) (que l'équipe Mono ne prévoit pas de prendre en charge en raison de la quantité de travail que cela nécessiterait) et de Windows Workflow Foundation (WF), et avec seulement une prise en charge limitée de Windows Communication Foundation (WCF) et de la pile asynchrone ASP.NET. Cependant, System.Web et WCF sont candidats à un portage « presque immédiat » de la source de référence .NET vers Mono. Certaines parties manquantes du .NET Framework sont en cours de développement dans un sous-projet expérimental de Mono appelé Olive.
Le projet Mono a également permis de créer un compilateur Visual Basic .NET et un environnement d'exécution conçu pour exécuter des applications VB.NET. Il est actuellement développé par Rolf Bjarne Kvinge.
Clair de lune
Une implémentation open source de Microsoft Silverlight , appelée Moonlight , a été incluse depuis Mono 1.9. Moonlight 1.0, qui prend en charge les API Silverlight 1.0, a été publié le 20 janvier 2009. Moonlight 2.0 prend en charge Silverlight 2.0 et certaines fonctionnalités de Silverlight 3.0. Une version préliminaire de Moonlight 3.0 a été annoncée en février 2010 et contient des mises à jour de la prise en charge de Silverlight 3.
Le projet Moonlight a été abandonné le 29 mai 2012. Selon Miguel, deux facteurs ont scellé le sort du projet : Microsoft a ajouté des « restrictions artificielles » qui « l'ont rendu inutile pour la programmation de bureau », et la technologie n'avait pas suffisamment gagné en popularité sur le Web. De plus, Silverlight lui-même a été abandonné par Microsoft en 2012.
Composants mono
Mono se compose de trois groupes de composants :
- Composants principaux
- Pile de développement Mono/Linux/GNOME
- Pile de compatibilité Microsoft
Les composants principaux incluent le compilateur C#, la machine virtuelle pour la Common Language Infrastructure et les bibliothèques de classes principales. Ces composants sont basés sur les normes Ecma-334 et Ecma-335 , machine virtuelle CLI conforme aux normes, gratuite et open source . Microsoft a publié une déclaration qui couvre les deux normes sous sa licence Community Promise .
La pile de développement Mono/Linux/GNOME fournit des outils pour le développement d'applications tout en utilisant GNOME existant et des bibliothèques libres et open source . Celles-ci incluent : Gtk# pour le développement d'interfaces utilisateur graphiques (GUI), des bibliothèques Mozilla pour travailler avec le moteur de rendu Gecko , des bibliothèques d'intégration Unix (Mono.Posix), des bibliothèques de connectivité de base de données, une pile de sécurité et le langage de schéma XML RelaxNG . Gtk# permet aux applications Mono de s'intégrer dans le bureau Gnome en tant qu'applications natives. Les bibliothèques de bases de données fournissent une connectivité à la base de données objet-relationnelle db4o , Firebird , Microsoft SQL Server (MSSQL), MySQL , Open Database Connectivity (ODBC), Oracle , PostgreSQL , SQLite et bien d'autres. Le projet Mono suit le développement des composants de base de données sur son site Web.
La pile de compatibilité Microsoft fournit une voie pour le portage des applications Windows .NET vers Linux . Ce groupe de composants comprend ADO.NET , ASP.NET et Windows Forms , entre autres. Comme ces composants ne sont pas couverts par les normes Ecma , certains d'entre eux restent sujets à des craintes et des préoccupations en matière de brevets.
Architecture du cadre
Les principaux composants de Mono comprennent :
- Moteur d'exécution de code
- Bibliothèques de classes
- Bibliothèque de classes de base
- Bibliothèques de classes compatibles .NET
- Bibliothèques de classes spécifiques à Mono :
- Bibliothèques de classes multiplateformes pour Mono et .NET (Gtk#, Mono.Cecil, Mono.CSharp, Text.Templating)
- Bibliothèques de classes spécifiques à Unix (POSIX, Filesystem in Userspace (FUSE), curses)
- Bibliothèques de classes spécifiques à la plateforme (liaisons pour : Mac, iOS, Android, MeeGo)
- Assemblages CLI
- Métadonnées CLI
- Common Language Runtime de Mono
- Compatible avec l' infrastructure de langage commun ECMA / .NET Common Language Runtime
- Améliorations mono-spécifiques :
- Prise en charge Mono.SIMD
- Co-routines et continuations mono.
- Améliorations mono-spécifiques
- Services d'interopérabilité natifs et interopérabilité COM
- Sécurité - Cadre de code transparent
Moteur d'exécution de code
L'environnement d'exécution Mono contient un moteur d'exécution de code qui traduit les codes d'octets ECMA CIL en code natif et prend en charge un certain nombre de processeurs : ARM , MIPS (en mode 32 bits uniquement), SPARC , PowerPC , z/Architecture , IA-32 , x86-64 et IA-64 pour les modes 64 bits.
Le générateur de code est exposé en trois modes :
- Compilation juste-à-temps (JIT) : le runtime transformera les codes d'octets ECMA CIL en code natif au fur et à mesure de l'exécution du code.
- Compilation Ahead-of-Time (AOT) : ce code transforme les codes d'octets ECMA CIL (généralement présents dans un fichier .exe ou .dll) et génère du code natif stocké dans un fichier spécifique au système d'exploitation, à l'architecture et au processeur (pour un fichier foo.exe, il produirait foo.exe.so sous Linux). Ce mode de fonctionnement compile la plupart du code qui est généralement exécuté au moment de l'exécution. Il existe quelques exceptions comme les trampolines et d'autres codes administratifs qui nécessitent toujours le JIT pour fonctionner, de sorte que les images AOT ne sont pas totalement autonomes.
- Compilation statique complète : ce mode n'est pris en charge que sur quelques plates-formes et pousse le processus de compilation anticipée un peu plus loin et génère tous les trampolines, wrappers et proxys nécessaires dans un fichier statique qui peut être lié statiquement à un programme et élimine le besoin d'un JIT au moment de l'exécution. Il est utilisé sur les systèmes d'exploitation iOS d'Apple , PlayStation 3 de Sony et Xbox 360 de Microsoft .
À partir de Mono 2.6, il est possible de configurer Mono pour utiliser LLVM comme moteur de génération de code au lieu du moteur de génération de code de Mono. Cela est utile pour les charges de calcul hautes performances et d'autres situations où les performances d'exécution sont plus importantes que les performances de démarrage.
À partir de la version préliminaire de Mono 2.7, il n'est plus nécessaire de choisir un moteur plutôt qu'un autre au moment de la configuration. Le moteur de génération de code peut être sélectionné au démarrage à l'aide des arguments de ligne de commande --llvmou --nollvm, et il est par défaut le moteur de génération de code Mono à démarrage rapide.
À partir de Mono 5.18, la prise en charge de LLVM est une option de configuration par défaut. Les versions précédentes nécessitaient un fork LLVM spécial, mais désormais, Mono peut recourir à son propre générateur de code lorsqu'il rencontre un élément non géré par LLVM.
Éboueur
Depuis Mono 2.8, l'environnement d'exécution Mono est livré avec deux récupérateurs de mémoire : un récupérateur générationnel et le récupérateur de mémoire conservateur Boehm–Demers–Weiser . Le récupérateur de mémoire Boehm peut présenter des fuites de mémoire sur certaines classes d'applications, ce qui le rend inadapté à certaines applications serveur de longue durée. Mono est passé au GC générationnel simple (SGen-GC) comme récupérateur par défaut dans la version 3.1.1.
Le récupérateur de mémoire SGen présente de nombreux avantages par rapport à un scanner conservateur traditionnel. Il utilise un récupérateur de mémoire générationnel où les nouveaux objets sont alloués à partir d'une pépinière, pendant le cycle de récupération de mémoire, tous les objets qui ont survécu sont migrés vers un pool de mémoire d'ancienne génération. L'idée est que de nombreux objets sont transitoires et peuvent être rapidement collectés et que seule une poignée d'objets sont des objets à long terme qui vivent pendant toute la durée de vie de l'application. Pour améliorer les performances, ce récupérateur attribue des pools de mémoire à chaque thread pour permettre aux threads d'allouer de nouveaux blocs de mémoire sans avoir à se coordonner avec d'autres threads. La migration des objets de la pépinière vers l'ancienne génération s'effectue en copiant les données de la pépinière vers le pool de l'ancienne génération et en mettant à jour tous les pointeurs actifs qui pointent vers les données pour qu'ils pointent vers le nouvel emplacement. Cela peut être coûteux pour les objets volumineux, c'est pourquoi le SGen de Mono utilise un pool de mémoire séparé pour les objets volumineux (section Objets volumineux) et utilise un algorithme de marquage et de balayage pour ces objets.
Bibliothèque de classe
La bibliothèque de classes fournit un ensemble complet de fonctionnalités pour le développement d'applications. Elles sont principalement écrites en C#, mais grâce à la spécification du langage commun, elles peuvent être utilisées par n'importe quel langage .NET. La bibliothèque de classes est structurée en espaces de noms et déployée dans des bibliothèques partagées appelées assemblages. Parler du .NET Framework fait principalement référence à cette bibliothèque de classes.
Espaces de noms et assemblages
Les espaces de noms sont un mécanisme permettant de regrouper logiquement des classes similaires dans une structure hiérarchique. Cela évite les conflits de noms. La structure est implémentée à l'aide de mots séparés par des points, l'espace de noms de niveau supérieur le plus courant étant System, comme System.IO et System.Net. Il existe également d'autres espaces de noms de niveau supérieur, tels que Accessibility et Windows. Un utilisateur peut définir un espace de noms en plaçant des éléments à l'intérieur d'un bloc d'espace de noms.
Les assemblages sont l'emballage physique des bibliothèques de classes. Il s'agit de fichiers .dll, tout comme (mais à ne pas confondre avec) les bibliothèques partagées Win32. Des exemples d'assemblages sont mscorlib.dll, System.dll, System.Data.dll et Accessibility.dll. Les espaces de noms sont souvent répartis entre plusieurs assemblages et un assemblage peut être composé de plusieurs fichiers.
Infrastructure de langage commun et spécification de langage commun
L' infrastructure de langage commun (CLI) telle qu'implémentée par le Common Language Runtime (CLR) est implémentée par l'exécutable Mono. Le runtime compile et exécute les applications .NET. L'infrastructure de langage commun est définie par la norme ECMA. Pour exécuter une application, vous devez appeler le runtime avec les paramètres appropriés.
La spécification du langage commun (CLS) est spécifiée au chapitre 6 de l'ECMA-335 et définit l'interface avec la CLI, comme les conventions telles que les types sous-jacents pour Enum. Le compilateur Mono génère une image conforme au CLS. Il s'agit du langage intermédiaire commun. Le runtime Mono prend cette image et l'exécute. La norme ECMA définit formellement une bibliothèque conforme au CLS en tant que framework.
Code géré et non géré
Dans une application .NET/Mono native, tout le code est géré ; c'est-à-dire qu'il est régi par le style de gestion de la mémoire et de sécurité des threads de la CLI. D'autres applications .NET ou Mono peuvent utiliser du code hérité, appelé non géré, en utilisant les bibliothèques System.Runtime.InteropServices pour créer des liaisons C#. De nombreuses bibliothèques fournies avec Mono utilisent cette fonctionnalité de la CLI, comme Gtk# .
Innovations mono-spécifiques
Mono a innové dans certains domaines avec de nouvelles extensions aux spécifications de base C# et CLI :
- Compilateur C# en tant que service (utilisez le compilateur C# en tant que bibliothèque).
- Shell interactif C#.
- Prise en charge SIMD dans le cadre de l'espace de noms Mono.SIMD, où les appels de méthode aux types de vecteurs spéciaux sont directement mappés aux instructions SIMD du processeur sous-jacent.
- Compilation statique complète du code .NET (utilisé sur Mono/iPhone, Mono/PS3).
- Coroutines mono (utilisées pour implémenter du code de micro-threading et des continuations , principalement pour les développeurs de jeux).
- Injection d'assemblage dans des processus en direct.
- Utilisation de LLVM comme backend JIT.
- Cxxi et CppSharp interagissent directement avec le code et les bibliothèques C++.
De plus, Mono est disponible sur une variété de systèmes d’exploitation et d’architectures.
Configuration requise
Windows 7, Windows 8, Windows 8.1, Windows 10, macOS ou Linux
Projets connexes
Plusieurs projets étendent Mono et permettent aux développeurs de l'utiliser dans leur environnement de développement. Ces projets incluent :
Multiplateforme :
- Banshee Media Player (bloqué), un lecteur multimédia musical multiplateforme construit avec Mono et Gtk# et également un pilote de dizaines de bibliothèques et de projets basés sur C# pour la gestion des médias.
- Beagle (non maintenu), un système de recherche pour les systèmes Unix.
- Gecko#, liaisons pour intégrer le moteur de mise en page utilisé dans Mozilla ( Gecko ).
- Gtk# , wrappers C# autour des bibliothèques GTK et GNOME sous-jacentes , écrits en C et disponibles sur Linux, MacOS et Windows.
- Mono Migration Analyzer (MoMA), un outil qui aide les développeurs Windows .NET à trouver les zones de leur code qui pourraient ne pas être multiplateformes et donc ne pas fonctionner dans Mono sous Linux et d'autres systèmes Unix. Pas de mise à niveau depuis Mono 2.8 (2013) ; utilisez plutôt .NET Portability Analyzer de Microsoft (dotnet-apiport).
- MonoCross est un modèle de conception multiplateforme de type modèle-vue-contrôleur dans lequel le modèle et le contrôleur sont partagés entre les plates-formes et les vues sont uniques pour chaque plate-forme pour une interface utilisateur optimisée. Le framework nécessite Xamarin.iOS et Xamarin.Android.
- MvvmCross, un framework Model View ViewModel multiplateforme utilisant Xamarin.iOS et Xamarin.Android pour le développement d'applications mobiles.
- MonoDéveloppez un environnement de développement intégré open source et multiplateforme qui prend en charge la création d'applications pour ASP.NET, Gtk#, Meego, MonoTouch et Silverlight/Moonlight.
- Moonlight (abandonné), une implémentation de Silverlight qui utilise Mono.
- OpenTK , une liaison gérée pour OpenGL, OpenCL et OpenAL.
- QtSharp, liaisons C# pour le framework Qt .
- Resco MobileBusiness, une solution de développement multiplateforme pour les clients mobiles.
- Resco MobileCRM, une solution de développement multiplateforme pour les clients mobiles synchronisés avec Microsoft Dynamics CRM .
- ServiceStack est un framework de services Web REST .NET open source hautes performances qui simplifie le développement de services Web XML, JSON et SOAP.
- SparkleShare est un logiciel client open source qui fournit des services de stockage cloud et de synchronisation de fichiers.
- Tao (remplacé par OpenTK), une collection de liaisons graphiques et de jeux (OpenGL, SDL, GLUT, Cg).
- Xwt, une boîte à outils d'interface utilisateur graphique qui mappe les appels d'API aux appels de plate-forme natifs de la plate-forme sous-jacente, exposant une API unifiée sur différentes plates-formes et permettant aux interfaces utilisateur graphiques d'avoir une apparence et une convivialité natives sur différentes plates-formes. Il permet de créer des applications de bureau basées sur l'interface utilisateur graphique qui s'exécutent sur plusieurs plates-formes, sans avoir à personnaliser le code pour différentes plates-formes. L'API Xwt est mappée sur un ensemble de contrôles natifs sur chaque plate-forme prise en charge. Les fonctionnalités qui ne sont pas disponibles sur des plates-formes spécifiques sont émulées à l'aide de widgets natifs, ce qui est appelé hébergement dans le contexte Xwt. Xwt a été partiellement utilisé comme boîte à outils d'interface utilisateur graphique (à côté de GTK#) dans le développement de Xamarin Studio . Les moteurs « backend » pris en charge sont : le moteur WPF et le moteur Gtk (utilisant Gtk# ) sur Windows , le moteur Cocoa (utilisant MonoMac) et le moteur Gtk (utilisant Gtk#) sur Mac OS X , et le moteur Gtk (utilisant Gtk#) sur Linux .
macOS :
- Cocoa# – wrappers autour de la boîte à outils native de macOS ( Cocoa ) (obsolète).
- Monobjc – un ensemble de liaisons pour la programmation macOS.
- MonoMac – nouvelles liaisons pour la programmation macOS, basées sur la conception de l'API MonoTouch.
Plateformes mobiles :
- MonoDroid. Mono pour le système d'exploitation Android. Avec des liaisons pour les API Android.
- MonoTouch . Mono pour iPhone, iPad et iPod Touch. Avec des liaisons aux API iOS.
Fenêtres :
- MonoTools pour Visual Studio Un plugin Visual Studio qui permet aux développeurs Windows de cibler Linux et macOS directement depuis Visual Studio et s'intègre à SUSE Studio .
Autres implémentations
Microsoft propose désormais une version de .NET 2.0 disponible uniquement pour Windows XP , appelée Shared Source CLI (Rotor) . La licence Shared Source de Microsoft peut s'avérer insuffisante pour les besoins de la communauté (elle interdit explicitement l'utilisation commerciale).
Projet Portable.NET abandonné de la Free Software Foundation .
MonoDevelop
MonoDevelop est un environnement de développement intégré gratuit conçu principalement pour C# et d'autres langages .NET tels que Nemerle , Boo et Java (via IKVM.NET ), bien qu'il prenne également en charge des langages tels que C , C++ , Python et Vala . MonoDevelop était à l'origine un portage de SharpDevelop vers Gtk#, mais il a depuis évolué pour répondre aux besoins des développeurs Mono. L'IDE comprend la gestion des classes, l'aide intégrée, la saisie semi-automatique du code, Stetic (un concepteur d'interface graphique), la prise en charge des projets et un débogueur intégré.
Le navigateur MonoDoc permet d'accéder à la documentation de l'API et à des exemples de code. Le navigateur de documentation utilise une gestion de contenu de type wiki, permettant aux développeurs de modifier et d'améliorer la documentation.
Xamarin.iOS et Xamarin.Android
Xamarin.iOS et Xamarin.Android, tous deux développés par Xamarin , sont des implémentations de Mono pour iPhone et smartphones Android . Auparavant disponible uniquement pour des licences commerciales, après l'acquisition de Xamarin par Microsoft en 2016, le runtime Mono lui-même a été re-licencié sous licence MIT et Xamarin.iOS et Xamarin.Android sont tous deux rendus gratuits et open source.
Xamarin.iOS
Xamarin.iOS (anciennement MonoTouch) est une bibliothèque qui permet aux développeurs de créer des applications basées sur C# et .NET qui s'exécutent sur les appareils iPhone, iPod et iPad. Elle est basée sur le framework Mono et développée en collaboration avec Novell. Contrairement aux applications Mono, les « applications » Xamarin.iOS sont compilées en code machine ciblant spécifiquement l' iPhone et l'iPad d'Apple . Cela est nécessaire car le noyau iOS empêche les compilateurs juste-à-temps de s'exécuter sur l'appareil.
La pile Xamarin.iOS est composée de :
- Compilateurs
- C# du projet Mono
- Les compilateurs tiers comme Oxygene de RemObject peuvent également cibler Xamarin.iOS
- Bibliothèques .NET de base
- Kit de développement logiciel (SDK) :
- Linker – utilisé pour regrouper uniquement le code utilisé dans l'application finale
- mtouch – le compilateur natif et l'outil utilisé pour déployer sur le périphérique cible
- Outils d'intégration d'Interface Builder
- Bibliothèques qui lient les API natives CocoaTouch
- IDE Xamarin Studio
Xamarin Studio est utilisé comme IDE principal, mais des liens supplémentaires vers Xcode et le simulateur iOS ont été écrits.
D'avril à début septembre 2010, l'avenir de MonoTouch a été mis en doute lorsqu'Apple a introduit de nouvelles conditions pour les développeurs d'iPhone qui leur interdisaient apparemment de développer dans des langages autres que C, C++ et Objective-C , et l'utilisation d'une couche intermédiaire entre la plateforme iOS et les applications iPhone. Cela a rendu l'avenir de MonoTouch et d'autres technologies telles qu'Unity incertain. Puis, en septembre 2010, Apple a annulé cette restriction, déclarant qu'elle assouplissait les restrictions linguistiques qu'elle avait mises en place plus tôt cette année-là.
Historique des versions
Xamarin.Android
Xamarin.Android (anciennement connu sous le nom de Mono pour Android), initialement développé par Novell et continué par Xamarin , est une implémentation propriétaire de Mono pour les smartphones basés sur Android . Il a été publié pour la première fois le 6 avril 2011. Mono pour Android a été développé pour permettre aux développeurs d'écrire plus facilement des applications multiplateformes qui s'exécuteront sur toutes les plateformes mobiles. Dans une interview avec H-Online, Miguel de Icaza a déclaré : « Notre vision est de permettre aux développeurs de réutiliser leur moteur et leur code de logique métier sur toutes les plateformes mobiles et d'échanger le code de l'interface utilisateur contre une API spécifique à la plateforme. »
En août 2010, un porte-parole de Microsoft, Tom Hanrahan du Centre de technologie Open Source de Microsoft, a déclaré, en référence au procès intenté par Oracle contre Google au sujet de l'utilisation de Java par Android, que « le type d'action qu'Oracle prend contre Google au sujet de Java n'aura pas lieu. Si un portage .NET vers Android se faisait via Mono, il tomberait sous le coup de l' accord Microsoft Community Promise . »
La pile Xamarin.Android se compose des composants suivants :
- Durée d'exécution mono
- Un concepteur d'interface utilisateur Android
- Bibliothèques :
- Bibliothèques de classes .NET de base
- Bibliothèques qui lient les API natives Android/Java
- Outils SDK pour empaqueter, déployer et déboguer
- Intégration de Xamarin Studio et Visual Studio 2010 pour concevoir l'interface utilisateur, déboguer à distance et déployer.
Mono sur macOS
Cacao Sharp
Cocoa# (également connu sous le nom de CocoaSharp) était un framework de pont pour Mac OS X , qui permettait aux applications développées avec le runtime Mono d'accéder à l' API Cocoa . Il a été initialement publié le 12 août 2004, et a été inclus dans la distribution Mono à partir de la version 1.0.6, publiée le 18 février 2005. Il n'a connu aucun développement depuis 2008, et est désormais obsolète.
Monobjc
Monobjc a remplacé CocoaSharp. Il permet aux développeurs .NET d'utiliser la plupart des API Mac OS X, y compris Cocoa, sans code natif, tout en obtenant une interface utilisateur native.
Xamarin.Mac
Xamarin.Mac est une bibliothèque qui permet aux développeurs d'exécuter des applications .NET et C# sur Mac .
Licence
Mono est sous double licence Xamarin, comme d'autres produits tels que Qt et Mozilla Application Suite . Le compilateur C# et les outils de Mono sont publiés sous la licence publique générale GNU (GPLv2 uniquement) (à partir de la version 2.0 de Mono, le code source du compilateur C# Mono est également disponible sous la licence MIT X11 ), les bibliothèques d'exécution sous la licence publique générale limitée GNU (LGPLv2 uniquement) et les bibliothèques de classes sous la licence MIT . Ce sont tous des logiciels libres et des licences open source et donc Mono est un logiciel libre et open source .
La licence du compilateur C# a été modifiée de la GPL à la licence MIT X11 pour permettre la réutilisation du code du compilateur dans quelques cas où la GPL aurait empêché cela :
- Compilateur en tant que service de Mono
- Le Shell interactif Mono
- Le compilateur C# intégrable Mono
- Implémentation de Mono du liant dynamique C# 4.0.
- Analyseur et graphique AST intégrés de MonoDevelop
Le 18 mars 2016, l'acquisition de Xamarin par Microsoft a été officiellement clôturée. Le 31 mars 2016, Microsoft a annoncé lors de Microsoft Build qu'ils allaient complètement re-licencier Mono sous la licence MIT , même dans les scénarios où auparavant une licence commerciale était nécessaire, et Microsoft a déclaré qu'ils ne feraient valoir aucun « brevet applicable » contre les parties qui « utilisent, vendent, proposent à la vente, importent ou distribuent Mono ». Il a également été annoncé que Xamarin avait contribué au projet Mono de la Fondation .NET.
Mono et les brevets de Microsoft
Le 6 juillet 2009, Microsoft a annoncé qu'elle plaçait ses spécifications ECMA 334 et ECMA 335 sous sa promesse communautaire, s'engageant à ne pas faire valoir ses brevets contre quiconque implémenterait, distribuerait ou utiliserait des implémentations alternatives de .NET. L'implémentation par Mono des composants de la pile .NET non soumis à l' ECMA pour normalisation a été la source de préoccupations en matière de violation de brevets pendant une grande partie de la vie du projet. En particulier, des discussions ont eu lieu sur la possibilité pour Microsoft de détruire le projet Mono par le biais de poursuites en brevets.
Les technologies de base soumises à l'ECMA, et donc également les parties spécifiques à Unix/GNOME, sont considérées comme sûres en raison du fait que Microsoft a explicitement placé les normes ECMA 334 ( C# ) et ECMA 335 ( CLI ) sous la promesse de la communauté Microsoft . Les inquiétudes concernent principalement les technologies développées par Microsoft sur le .NET Framework, telles que ASP.NET , ADO.NET et Windows Forms (voir les espaces de noms non standardisés ), c'est-à-dire les parties composant la pile de compatibilité Windows de Mono. Ces technologies ne sont aujourd'hui pas entièrement implémentées dans Mono et ne sont pas nécessaires au développement d'applications Mono, elles sont simplement là pour les développeurs et les utilisateurs qui ont besoin d'une compatibilité totale avec le système Windows.
En juin 2009, le conseil technique d'Ubuntu a déclaré qu'il ne voyait « aucune raison d'exclure Mono ou les applications basées sur lui de l'archive ou de l'ensemble d'installation par défaut ».
Richard Stallman, de la Free Software Foundation , a déclaré le 2 juin 2009 que « [...] nous devrions décourager les gens d'écrire des programmes en C#. Par conséquent, nous ne devrions pas inclure les implémentations de C# dans l'installation par défaut des distributions GNU/Linux ou dans leurs principaux moyens d'installation de GNOME ». Le 1er juillet 2009, Brett Smith (également de la FSF) a déclaré que « les brevets de Microsoft sont bien plus dangereux : c'est la seule grande société de logiciels qui s'est déclarée ennemie de GNU/Linux et a déclaré son intention d'attaquer notre communauté avec des brevets », « C# représente une menace unique pour nous » et « La promesse de la communauté ne fait rien pour changer cela ».
Paul Frields, chef de projet de Fedora , a déclaré : « Nous avons de sérieuses inquiétudes concernant Mono et nous continuerons à examiner la question avec notre conseiller juridique pour voir si des mesures sont nécessaires de notre part », mais « nous ne sommes pas parvenus à une conclusion juridique suffisamment claire pour que nous puissions prendre la décision de retirer Mono ».
En novembre 2011, lors d'un Ubuntu Developer Summit , les développeurs ont voté pour que le lecteur multimédia Banshee basé sur Mono soit retiré de l'installation par défaut d'Ubuntu à partir d' Ubuntu 12.04 ; bien que les raisons évoquées incluent des problèmes de performances sur l'architecture ARM , des problèmes de blocage sur sa version GTK+ 3, et le fait qu'il soit, selon eux, « mal entretenu », des spéculations ont également fait surface selon lesquelles la décision a également été influencée par un désir de supprimer Mono de la distribution de base, car les programmes restants dépendants de Mono, gbrainy et Tomboy , devaient également être supprimés. Le développeur de Mono, Joseph Michael Shields, a défendu les performances de Banshee sur ARM, ainsi que les allégations selon lesquelles Banshee n'était pas bien entretenu comme étant une « insulte personnelle dirigée » contre l'un de ses principaux contributeurs.Logiciel développé avec Mono


De nombreux programmes couvrant une large gamme d'applications ont été développés à l'aide de l' interface de programmation d'applications (API) Mono et de C#. Parmi les programmes écrits pour le bureau Linux, on trouve Banshee , Beagle , F-Spot , Gbrainy , Docky / GNOME Do , MonoTorrent , Pinta et Tomboy . Le programme Logos 5 Bible Study Software (OS X Version) a été écrit pour MacOS.
Un certain nombre de jeux vidéo, tels que Les Sims 3 et Second Life (pour leurs langages de script ), le serveur de monde virtuel OpenSimulator ou les jeux créés avec les moteurs de jeu Unity ou MonoGame , utilisent également Mono. OpenRA regroupe son image de disque Apple et ses images d'application Linux avec Mono, supprimant ainsi pratiquement toutes les dépendances du jeu.