Introducción a la plataforma .NET y Mono

Proyecto Mono

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.

Contexto del proyecto

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:

  • Un entorno virtual de ejecución (CLR o VES), que provee recolección de basura, threading…
  • Una librería de clases potente y comprensible
  • Un nuevo lenguaje muy similar a C++ o Java, C#.
  • Una especificación de lenguaje que pueden seguir los compiladores, con el fin de generar código que pueda interactuar con otros lenguajes de programación (CLS)

Implementación de Mono

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:

Mono Runtime

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:

  • Mono: compilador JIT y AOT. Únicamente soporta máquinas x86 por el momento.
  • Mint: intérprete de mono. Es un entorno fácil de migrar a nuevas plataformas.

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.

  • PInvoke: es el mecanismo que se utiliza desde el código gestionado para acceder a librerías externas. Se está utilizando en mono para acceder a llamadas de la API de Unix, así como para comunicarse con librerías del sistema.
  • Remoting: Mono tiene soporte para Remoting y objetos Proxy. El entorno de ejecución facilita este tipo de servicios.
  • COM and XPCOM: no se prevé añadir soporte para XPCOM en Unix y COM en Windows.

Class Library

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.

Compilador C#

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.

Otras tecnologías

En los siguientes puntos se comentan algunas tecnologías que están siendo desarrolladas, pero que no forman parte de la especificación ECMA.

  • VisualBasic: Mono incluye un compilador para MonoBasic (mbas). Gracias a la independencia de lenguaje, el código escrito en MonoBasic puede ser utilizado desde C# y viceversa. Está actualmente en fase de desarrollo y queda bastante trabajo pendiente.
  • ADO.NET: se dispone de providers para un buen número de bases de datos, superior de hecho al ofrecido por Microsoft. Todavía queda bastante trabajo por realizar, sobretodo en lo referente a completar los providers, realizar herramientas necesarias como xsd.exe, y terminar la librería de clases.
  • ASP.NET: es una tecnología muy potente para la creación de sitios web y servicios web. Al igual que el resto, es independiente del lenguaje, por lo que podemos tener páginas escritas en Pascal, Logo, Basic, C#, C++,… dentro de la misma aplicación. Las páginas son compiladas, por lo que su ejecución es muy rápida. Ofrece también un modelo de acceso a los elementos de la página mediante objetos, un manejo de los mismos a través de eventos, o un control del estado de la página, entre otras características interesantes. La implementación se divide en dos partes, Web Forms y Web Services. Ambas son funcionales en este momento. Pese a ser funcinal, queda bastante trabajo para hacer la implementación compatible con la solución de Microsoft. ASP.NET puede funcionar tanto con el servidor xsp.exe o con el módulo mod_mono de apache.
    • XSP: es un pequeño servidor web que se utiliza para ejecutar aplicaciones ASP.NET.
    • mod_mono: es el módulo de conexión de apache con ASP.NET, de forma que se pueda utilizar apache para servir páginas ASP.NET. El proyecto está en curso y aunque funciona queda bastante trabajo pendiente.
  • GTK#: es un conjunto de clases realizadas en C# que permiten el acceso a GTK+ y otras librerías que forman parte de GNOME. Funciona tanto sobre Linux como sobre Windows. Hay ya aplicaciones desarrolladas sobre esta tecnología, aunque aún queda trabajo. La versión actual es la 0.10.

Licencias

Mono usa tres tipos de licencia:

  • Las librerías de clases están bajo una licencia X11. Este tipo de licencia permite prácticamente cualquier uso del código, incluido copiarlo y usarlo en una aplicación propia. El único requisito es que se mantenga la información de copyright de los archivos. No es necesario siquiera indicar que se está utilizando software bajo licencia X11.
  • Las librerías del runtime, como el JIT, se distribuyen bajo licencia LGPL. De esta forma si se realiza un programa que linke con ellas, se puede mantener bajo código propietario. Sin embargo es necesario permitir que se pueda enlazar con versiones más recientes de las librerías. La forma más fácil de hacer esto sería linkando dinámicamente con ellas. Esto obligaría al usuario a descargar e instalar mono por separado.
  • El resto de aplicaciones, como mono o mcs, usan una licencia GPL. Por lo tanto cualquier aplicación que estén basadas en ella, deberán mantener esta 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:

  1. Evitar la patente utilizando otros mecanismos para implementar la misma funcionalidad
  2. Eliminar las porciones de código bajo patente
  3. Encontrar algo más novedoso que deje en sin uso a la patente.

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.

Partes de Mono

Páginas: 1 2 3 4 5 6

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

60 Respuestas para “Introducción a la plataforma .NET y Mono”

  1. hola Patxi sabes me piden que haga un trabajo todos sobre mono ventajas, y modos de intalarse en diversas plataformas kisiera saber si tienes algunos documentos ke me puedan ayudar a realizarlo poara poder hacer un tutorial te lo agradeceria muchisimo saludos desde tabasco.

  2. Hola:
    me parece muy interesante el articulo. Yo tambien estoy iniciandome en este mundo y como deben saber tengo muchas dudas, por el momento quisiera que trataran de ayudarme con esta:

    si voy a migrar un sitio donde los .aspx estan en una carpeta y los .ascx estan en otra y asi, como resolver los problemas que da mod_mono con los caminos ?

    les agradeceria mucho que alguien me ayudara o me diera alguna idea.Cualquier comentario es valido.
    Si no es mucha molestia quisiera que me escribieran a bricelno@gmail.com

    Muchas gracias a todos

  3. Hola.. to2
    Muy interesante articulo ademas de completo.. me acabo de solucionar dudas de concepto que tenia..

    Una pregunta: La plataforma .net es solo para redes ?.. es decir soy programador y estoy buscando alternativas a VisualBasic, Vfox, las tipicas de siempre.. me encontre son SharpDevelop. que dice que permite programa en C# pero quiero hacer aplicativos normales ,, esta herramienta de programacion me sirve o la orientacion es diferente…

  4. Hola Jose, en efecto, con .NET puedes desarrollar cualquier tipo de aplicativo, desde aplicaciones de escritorio hasta aplicaciones web empresariales. Para ello puedes utilizar multitud de entornos de desarrollo, como Visual Studio, SharpDevelop, o incluso simplemente el editor de notas y el compilador del SDK. Además también puedes programar en diferentes lenguajes, como C#, Visual Basic, Delphi, etc…

  5. Hola Mi Nombre es Rafael.

    He leido algo sobre el proyecto mono y pienso que el proyecto es muy interesante, y precisamente por esto quiero ver si puedo migrar una aplicacion web desarrollada en VB .net a CENTOS 5, mi aplicacion consta con web services y conexiones a bases de datos SQL Server 2005, ya baje los programas de instalacion de MONO para Windows y tambien para CENTOS 5, pero el problema esque no se como instalar la parte de CENTOS 5, si alguien me puediese decir que tan bueno es el proyecto en este momento para intenetar migrar mi aplicacion para que funcione sobre Linux se los agradeceria.

    Aparte no se si alguien tenga documentacion acerca de como instalar mono sobre CENTOS 5 paso a paso y como probar mi aplicacion, se los agradeceria infinitamente.

    Saludos y felicidades por esta pagina.

  6. Disculpa, pero podrias ayudarme para instalar mono sobre fedra core 8?, recien estoy empezando con el desarrollo sobre linux, porque antes utilice SharpDevelop pero para windows y ahora quiero intentarlo con linux, porfaa

  7. Hola compañeros de eslomas.com:
    Quisiera saber dentro de la plataforma .net, refiriéndome no solo a .net Framework sino también a el paquete de Visual Studio.net y todo lo que compone la tecnología .net.,por donde inicio mi capacitación para comprenderla mejor y poder aplicarla adecuadamente.

    Gracias

  8. ay no c que es eso ocupo q me digan es d tarea tengo examen porfas alludenme plis jejje bye

  9. hola quisiera saber si MONO es un framewor o es una plataforma

Trackbacks/Pingbacks

  1. Links Interesantes (IV) : alfredo hernández - 09. Oct, 2008

    […] Mono 2.0: No es un standar nuevo, para aquellos que no tienen idea de que es mono, es una implementacion del Framework .NET desarrollada por Miguel de Icaza y unos cuantos mas, si quieres mas informacion en este enlace lo obtendrás. […]