Mono (progetto)
# Mono (progetto)

Mono è un progetto open source coordinato da .NET Foundation (precedentemente da Xamarin, Novell e in origine da Ximian) per creare un insieme di strumenti compatibili con il Framework .NET, secondo gli standard ECMA (Ecma-334 e Ecma-335).

I più importanti di questi strumenti sono il compilatore C# e il Common Language Runtime. Mono è compatibile con i seguenti sistemi operativi:

* Linux
* Chrome OS
* Mac OS X, iOS, tvOS, watchOS
* Sun Solaris
* BSD - OpenBSD, FreeBSD, NetBSD
* Microsoft Windows
* Nintendo Wii
* Sony PlayStation 3
* Sony PlayStation 4

Mentre Microsoft ha reso disponibile una versione di .NET per FreeBSD chiamata la Shared source CLI, la licenza di Microsoft non è di software libero e può essere insufficiente per i bisogni degli utenti (in particolare, proibisce esplicitamente l'utilizzo commerciale). Per questo ed anche per limitare la diffusione di C# e le relative librerie Mono nell'ambiente Linux è stato creato il linguaggio Vala.

La macchina virtuale di Mono contiene un motore JIT per vari processori: x86, SPARC, PowerPC, ARM, s390 (in modalità a 32 bit) e x86-64 e SPARC a 64 bit. La VM può eseguire una compilazione just-in-time o può pre-compilare il codice in codice nativo. Per altre architetture hardware esiste solo un interprete.

Un progetto simile è DotGNU Portable.NET.

## Storia

Nel 2000 la società Ximian, fondata e diretta da Miguel de Icaza, specializzata in software open source, aveva intenzione di costruire strumenti di sviluppo software che accrescessero la produttività di sviluppo del software multipiattaforma. Appena la Microsoft presentò il Framework .NET, la Ximian se ne interessò, e il 19 luglio 2001 annunciò il progetto open source Mono alla conferenza O'Reilly.

Quasi tre anni dopo, il 30 giugno 2004 fu rilasciata la versione 1.0.

Al LinuxWorld 2006, a Boston, Mono ha vinto il premio come miglior piattaforma di sviluppo.

## Mono e i brevetti della Microsoft

Conseguentemente alla nascita del progetto Mono ebbero luogo molte discussioni riguardo al fatto che Microsoft potesse comprometterne il proseguimento tramite brevetti. Il team Mono riconobbe questo rischio e mise in atto strategie al fine di evitarlo, come si legge dalle loro FAQ:

    "Il Framework .NET si divide in due parti: le tecnologie coperte dall'ECMA/ISO e le altre tecnologie sviluppate sopra di esse come ADO.NET, ASP.NET e Windows.Forms. Mono implementa le parti ECMA/ISO, essendo questo un progetto che permette l'implementazione di blocchi a livelli più alti come ASP.NET, ADO.NET e Windows.Forms"
    Gli elementi controversi sono i sottoinsiemi ADO.NET, ASP.NET e Windows.Forms. Questi sono convenienti per quanti necessitano piena compatibilità con la piattaforma Windows, ma non sono richiesti per la piattaforma open source Mono, così come l'integrazione con l'attuale ottimo supporto per Linux. La strategia di Mono riguardo a queste tecnologie è la seguente: (1) aggirare i brevetti usando tecniche di implementazione differente che mantengono la API, ma cambiano i meccanismi. Se ciò non è possibile, vorremmo (2) rimuovere le parti di codice coperte da brevetti, oltre che (3) trovare dei precedenti che possano rendere inutilizzabili i brevetti stessi"

Microsoft comunque annunciò che non avrebbe perseguito legalmente le implementazioni open source del .NET Framework, tra le quali appunto Mono. Le intenzioni di Microsoft hanno successivamente trovato riscontro nel fatto che la stessa è diventata sponsor del progetto Mono.

## Progetti correlati

Numerosi progetti sono stati creati per permettere agli sviluppatori di utilizzare Mono nel proprio ambiente di sviluppo:

* Gtk# sono binding per utilizzare il framework Mono all'interno delle librerie GTK+.
* gecko# sono binding per inserire nelle applicazioni il layout engine usato in Mozilla (Gecko).
* Tao, una collezione di binding per la grafica ed i giochi.

## Software sviluppato con Mono

I seguenti programmi utilizzano le API Mono e C#:

* Banshee è un programma di gestione e riproduzione musicale per GNOME
* Beagle è uno strumento per la ricerca desktop.
* Bless Archiviato il 1º novembre 2005 in Internet Archive. è un editor esadecimale.
* CDCollect è una applicazione per la catalogazione di CD.
* F-Spot è un programma di gestione fotografie sviluppato da Novell.
* Galaxium è un programma di instant messaging per MSN.
* GLyrics è un programma per la ricerca di testi musicali.
* Gbrainy è un gioco.
* Gnome Do è un lanciatore per Linux (simile a Quicksilver).
* iFolder 3 (della Novell) permette la condivisione di file attraverso molteplici computer e con altri utenti tramite peer-to-peer o attraverso server groupware di Novell.
* planet è un aggregatore di news e feed RSS buono tra l'altro per la lettura di feed come Planet Gnome.
* MonoDevelop è un IDE per la creazione di applicazioni Mono. Originariamente è stato un port di SharpDevelop per Gtk#, ma oggi viene sviluppato indipendentemente.
* Muine è un riproduttore musicale con una interfaccia utente progettata per essere intuitiva, sviluppato da Jorn Baayen il quale ha già collaborato allo sviluppo di Rhythmbox.
* Second Life, il mondo virtuale creato da Linden Lab, si dice stia per passare dall'utilizzo del Linden Scripting Language (LSL) a Mono, in un futuro prossimo.
* SkyNET è una mappa stellare.
* Smuxi è un client IRC per utenti esperti scritto usando Gtk#/Gnome#, SmartIrc4net e Nini.
* Tomboy è una applicazione desktop per annotazioni che utilizza un sistema di link simile al Wiki.
* Virtuoso Universal Server, della OpenLink Software, è un ambiente multipiattaforma per Mono/.NET/C#, JSP, Perl, Python, PHP, e altri ambienti runtime.

## Versioni

Di seguito sono indicate la prima e l'ultima versione stabile per ogni release che si sono succedute nel corso del tempo:

| Versione | Data rilascio |
| - | - |
| Mono 5.X ||
| 5.0.1 | 23 maggio 2017 |
| 5.0.0 | 10 maggio 2017 |
| Mono 4.X ||
| 4.8.1 | 11 aprile 2017 |
| 4.0.0 | 29 aprile 2015 |
| Mono 3.X ||
| 3.12.1 | 7 marzo 2015 |
| 3.0.0 | 19 ottobre 2012 |
| Mono 2.X ||
| 2.10.9 | 7 febbraio 2012 |
| 2.0.0 | 1º ottobre 2008 |
| Mono 1.X ||
| 1.9.1 | 15 aprile 2008 |
| 1.0.0 | 30 giugno 2004 |
