



(7 opiniones)
Mono es un proyecto de implementación del Framework .NET de Microsoft utilizando código libre (open source), gestionado por Ximian y basado en las especificaciones definidas en ECMA.
Actualmente el proyecto puede considerarse bastante maduro en muchos aspectos, dispone de una versión compatible con la versión 1.1 del Framework y tiene muy avanzadas características de la versión 2. Aparte se están desarrollando partes que no son específicamente de la plataforma, como ADO.NET, WinForms y ASP.NET.
Uno de los objetivos del proyecto GNOME de Ximian, ha sido el poder disponer en entornos Unix de herramientas comparables y competitivas con las existentes en el mercado de aplicaciones de escritorio. Al desarrollar GNOME se pudo comprobar como era importante disponer de una independencia respecto a los lenguajes de programación, para lo cual se diseñaron las GNOME API de forma que fueran fácilmente utilizables desde diferentes lenguajes, mediante la utilización sencilla de wrappers. Actualmente la API de GNOME está disponible para múltiples lenguajes de programación como Perl, Python, Escheme, C++, Objetive-C, Ada.
Algo más tarde, se comenzó a usar CORBA con el objetivo de definir interfaces para los distintos componentes y encapsular las APIs. Esté trabajo derivó en la creación de Bonobo, del que actualmente existen interfaces desde C, Perl, Python y Java.
La plataforma .NET, busca unos objetivos muy similares a los buscados por GNOME, ofrecer una independencia de lenguaje a los programadores, así mismo es también más madura, documentada, más amplia en su ámbito de actuación y tiene un diseño consistente. Cualquier API que se escriba utilizando un lenguaje que genere código para el CLR puede usarse desde cualquier otro lenguaje que genere código para esta plataforma.
La plataforma creada por Microsoft tiene una serie de puntos muy interesantes para el proyecto, como son:
La iniciativa .NET de Microsoft es un proyecto de toda la compañía bastante difuso, una parte del cual es el framework de .NET. Mono es una implementación de este framework, pero de nada más relacionado con .NET, como Passport o software como servicios.
Los objetivos iniciales del proyecto Mono eran implementar en un entorno de software libre para el mundo Unix la especificaciones ECMA, para lo cual se incluye un compilador para C#, un entorno de ejecución CLR y un conjunto de librerías de clase que incluyen las FCL, así como otras añadidas.
Ximian (actualmente Novell) no tenía el tamaño ni los recursos suficientes como para abordar un proyecto de esta envergadura por si sola, por lo que cuando el proyecto alcanzó cierto nivel de realización se abrió a la comunidad para buscar nuevos colaboradores. El interés que suscitó el proyecto desde un comienzo fue muy grande, lo que hizo que multitud de desarrolladores se involucrarán en el proyecto fue muy grande. Este interés provocó también que partes de la tecnología, como ADO.NET, ASP.NET o WinForms, que inicialmente no estaban contempladas, o no eran prioritarias, se comenzasen a implementar.
En los puntos siguientes se comentan algunas de las partes de las que consta el proyecto:
Sería el equivalente al Common Language Runtime o entorno virtual de ejecución. Implementa un compilador JIT para el CIL de la máquina virtual, un compilador Ahead-of-Time (AOT), un cargador de clases, un recolector de basura, el sistema de thereadings y las librerías de acceso a los metadatos.
En estos momentos existen dos entornos de ejecución:
El entorno de ejecución se puede utilizar también embebido dentro de otra aplicación, de forma que se pueden extender aplicaciones C y C++ mediante C#.
En comparación con la solución ofrecida por Microsoft Mono incluye un intérprete y la opción de utilizar el runtime de forma embebida en una aplicación.
Mono funciona tanto sobre plataformas de 32 bits como de 64 bits: s390, SPARC, SPARCv9 (64 bits), PowerPC, x86, x86-64 (64 bits), así como sobre diversos sistemas operativos: Linux, MacOS X, BSD, SUN SOLARIS y Microsoft Windows. Aparte el intérprete puede ejecutarse sobre otras plataformas como HP-UX. Hay más información al respecto en la página de información del Mono runtime en el web del proyecto.
El runtime es completamente operativo, aunque es posible que siga evolucionando en sentidos como optimizaciones para el compilador Just In Time o el recolector de basura. Dentro del runtime se soportan también mecanismos que permiten a las aplicaciones hechas en mono comunicarse con otras aplicaciones, o utilizar librerías externas.
Se ha buscado una compatibilidad total con la implementación .Net de Microsoft. La librería de clases se está desarrollando en C# y puede ser utilizada por cualquier lenguaje, gracias al Common Language Specification. Hay ya desarrollada una gran parte de las clases pertenecientes al Framework Class Library, lo que sumado a la madurez del runtime, hace que sea posible realizar gran cantidad de aplicaciones, aunque sin olvidar que actualmente se va por la versión 0.26, por lo que es posible que encontremos algún bug. El proyecto dispone de una página en la que se informa del estado exacto de desarrollo de cada parte de la plataforma.
El compilador de C# (MCS) de mono en estos momentos se considera que cumple la especificación, por lo que es un producto relativamente maduro. MCS está escrito en C# y es capaz de compilarse a si mismo desde enero de 2002, así como a otros muchos programas.
En los siguientes puntos se comentan algunas tecnologías que están siendo desarrolladas, pero que no forman parte de la especificación ECMA.
Mono usa tres tipos de licencia:
En lo que respecta al cumplimiento de las patentes de software, las partes contempladas en el estándar ECMA no tienen ningún problema ya que se permite a cualquiera implementar esos componentes gratuitamente y para cualquier propósito. Sin embargo, cuestiones referentes a ADO.NET, ASP.NET y WinForms, son bastante diferentes. La estrategia de Mono ante estas tecnologías es la siguiente:
A continuación se muestra un gráfico que representa algunos de los diferentes tipos de tecnologías que se están implementando en Mono. Los elementos señalados en azul, son los correspondientes a ECMA y que no están bajo ningún tipo de patente.

|