Patrocinado por Microsoft, Mono es una implementación de código abierto del Framework .NET de Microsoft basado en los estándares de ECMA para C # y Common Language Runtime.
Una creciente familia de soluciones y una comunidad de colaboradores activos y entusiastas están ayudando a posicionar a Mono como la elección líder para el desarrollo de aplicaciones multiplataforma.
Origen del nombre
Mono es el nombre de un proyecto de código abierto iniciado por Miguel de Icaza en la compañía Ximian y actualmente impulsado por Novell (tras la adquisición de Ximian) para crear un grupo de herramientas libres, basadas en GNU/Linux y compatibles con .NET según lo especificado por el ECMA
Modelo de arquitectura
Este incluye el CLI con la máquina virtual que se encarga de cargar las clases, el compilador Just-in-time y el garbage collector entre otros.
Tiene muy buena compatibilidad con el .NET Frawework de Microsoft en muchas librerías y a parte también cuenta con librerías extras como el GTK que permite crear interfaces gráficas nativas del toolkit GTK.
El modelo de arquitectura sería el siguiente:
Se pueden crear bastantes tipos de aplicaciones compatibles entre diferentes plataformas y sistemas. Es posible crear proyectos de tipo web con ASP.NET, conectar a bases de datos SQL Server o Oracle y crear aplicaciones de escritorio usando la librería GTK.
Si vas a desarrollar una aplicación multiplataforma usando Mono tendrás que tener en cuenta las diferencias sustanciales entre sistemas operativos como pueden ser el tratamiento de mayúsculas y minúsculas en Linux o la gestión de las rutas.
Plataformas compatibles
Actualmente Mono tiene compatibilidad con bastantes más sistemas operativos:
Linux
macOS, iOS, tvOS, watchOS
Sun Solaris
IBM AIX
BSD - OpenBSD, FreeBSD, NetBSD
Microsoft Windows
Sony PlayStation 4
XboxOne
Lenguajes compatibles
La plataforma Mono tiene compatibilidad con multitud de lenguajes de programación ya que es fácil su integración en base a su arquitectura. El proyecto Mono proporciona compiladores en C#, Basic e llasm, a parte existen compiladores libres y comerciales que se pueden usar.
Ver una lista completa de todos los lenguajes de programación admitidos actualmente en este enlace.
Compatibilidad
Actualmente la compatibilidad entre el .NET Framework y Mono es casi total a excepción de WPF, WWF, las limitaciones con servicios web WCF y el uso de métodos asíncronos en ASP.NET.
Entorno de desarrollo
El entorno de trabajo recomendado si usas Windows es Visual Studio también puedes compilar tus binarios con Mono. Si programas en Linux o Mac OS X seguramente podrás trabajar con el IDE de Visual Studio. En cualquier caso existe la posibilidad de utilizar Mono Develop independientemente del sistemas operativo que tengamos instalado.
Nuevo Mono Interpreter
Una nueva característica de Mono es la integración de un intérprete .NET creando un proceso de compilación mixto, en el cual es posible realizar una pre-compilación y añadir código dinámico en la ejecución de nuestras aplicaciones.
$ mono --interpreter yourassembly.exe
Es una función bastante útil para desarrolladores de iOS, PlayStation o Xbox, ya que no realiza una compilación estática del código fuente y no genera un ejecutable nueva cada vez que se actualiza la aplicación, con lo que el proceso de ejecución es mucho más rápido en este tipo de sistemas.
Ejemplos de aplicaciones
Podeis ver más detalles en este enlace. Y una lista de más aplicaciones desarrolladas utilizando esta tecnología.