# Mono (software)

Mono is een opensourceproject onder leiding van Xamarin (vroeger van Novell, oorspronkelijk van Ximian) om een ontwikkelomgeving te bouwen compatibel met Microsoft .NET, en volgens de betreffende ECMA-standaard. Dit omvat onder andere een C#-compiler en de Common Language Runtime (CLR). Mono werkt onder meer onder GNU/Linux, Unix, Mac OS X en Windows.
De Mono-runtime bestaat uit een just in time compileersysteem voor een aantal processoren: x86, x86-64, SPARC, PowerPC, ARM, S390 (zowel 32 bit als 64 bit), en IA-64. De runtime vertaalt de code via just-in-timecompilatie naar de juiste machinetaal. Dit wordt gecachet terwijl de applicatie draait. Voor andere processoren bestaat een interpreter die de bytecode een voor een vertaalt naar instructies. De JIT-methode resulteert echter in een hogere performance.

## Geschiedenis

Toen Microsoft in december 2000 documenten vrijgaf waarin de .NET-technologie beschreven werd, was Miguel de Icaza meteen geïnteresseerd. Hij kwam erachter dat er nog informatie ontbrak in de specificatie en vroeg in februari 2001 op de .NET-mailinglist om extra informatie. Tegelijkertijd begon hij te werken aan een C#-compiler geschreven in C#, om het programmeren in C# te oefenen. In april 2001 publiceerde de ECMA de ontbrekende informatie, en tijdens de Gnome-conferentie GUADEC (6 april - 8 april) demonstreerde De Icaza zijn compiler. De compiler was tegen die tijd in staat zichzelf te compileren.
Ximian zocht naar mogelijkheden om de productiviteit van het bedrijf te verhogen door middel van het gebruiken van ander ontwikkelgereedschap. Na een haalbaarheidsstudie, waarin geconcludeerd werd dat het mogelijk was om de technologie te bouwen, heeft Ximian intern met mensen geschoven om zo het Mono-team samen te stellen. Omdat Ximian alleen niet genoeg mankracht had om een volledige vervanging voor .NET te schrijven, deelden ze op 19 juli 2001 op de O'Reilly-conferentie mee dat ze het opensource-project Mono gevormd hadden.

### Versie 1.0

Iets minder dan drie jaar na het samenstellen van het Mono-team, op 30 juni 2004, is Mono versie 1.0 uitgegeven. Deze versie zou compleet en stabiel genoeg zijn om in veel situaties .NET te vervangen. Ontwikkeling ging verder in de Mono 1.1-branche terwijl de 1.0-branche behouden werd als stabiele tak, geschikt voor productie.
De 1.0-versie van Mono ondersteunde .NET 1.1, maar kende nog geen implementatie van WinForms, een bibliotheek voor het ontwerpen van een grafische gebruikersinterface. Wel was er een alternatieve bibliotheek beschikbaar om grafische gebruikersinterfaces te ontwerpen, genaamd Gtk#.

### Versie 1.2

Twee en een half jaar na het uitgeven van versie 1.0 werd op november 2006 versie 1.2 van Mono vrijgegeven. Deze versie voegde de WinForms-bibliotheek toe. Tevens werd een begin gemaakt richting de ondersteuning van .NET 2.0, door middel van het toegevoegen van generics. Vanaf versie 1.2 bestonden er twee compilers voor Mono, mcs voor het compileren van .NET 1.1-applicaties en gmcs voor het compileren van .NET 2.0-applicaties. Na november 2006 ging de ontwikkeling enkel verder in de 1.2-branche van Mono.

### Versie 2

Op 6 oktober 2008 werd versie 2.0 vrijgegeven. Deze versie ondersteunt C# 1.0, 2.0 en delen van 3.0. De WinForms-bibliotheek is op enkele componenten na compleet. Mono wordt geleverd met Moonlight, een opensource-implementatie van Silverlight.

### Versie 4

Versie 4 kwam uit op 13 april 2015. Deze versie ondersteunt C# 6.0 en maakt gebruik van .NET Framework-componenten die beschikbaar gemaakt zijn door Microsoft onder een opensourcelicentie.

## Logo

Het logo van Mono bestaat uit het gezicht van een aap: mono is Spaans voor aap. Apen en mensapen hebben een centraal thema binnen Ximian, zoals tevens in de voet van het logo van het GNOME-project, het Bonobo-project (een door Ximian vervaardigde bibliotheek voor GNOME) en tevens in het eigen logo van Ximian. De Mono FAQ stelt dat "we vinden apen leuk" de reden voor deze keuze is.

## Gelijksoortige projecten

* Microsoft heeft een versie van .NET uitgebracht voor FreeBSD (genaamd SSCLI voor Shared Source CLI, codenaam Rotor). Dit is echter geen echte vrije software en daarom niet geschikt voor de behoeften van vrije-softwareprogrammeurs.
* Een gelijksoortig project is Portable.NET, onderdeel van het DotGNU-project.