Underc0de

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: Snifer en Febrero 24, 2011, 02:36:21 AM

Título: Conociendo Mono
Publicado por: Snifer en Febrero 24, 2011, 02:36:21 AM
¿Qué es Mono?
Mono es el nombre de un proyecto de código abierto iniciado por 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.
No, no tiene nada que ver con el Monkey Island. Mono es la implementación libre del CLI (Common Language Infraestructure) y C# (ambos creados por Microsoft), de acuerdo a las especificaciones enviadas a la ECMA para su estandarización. Esta implementación es de codigo fuente abierto (Open source).

Mono incluye el CLI, el cual contiene la máquina virtual que se encarga de cargar las clases, el compilador jit (Just-in-time) y el garbage collector; todo esto escrito desde cero de acuerdo a las especificaciones Ecma-334.

Mono también incluye un compilador de C#, el cual paradojicamente esta escrito en C# y al igual que el CLI, este compilador sigue las especificaciones Ecma-335.

Adicionalmente Mono cuenta con un catalogo de librerías compatibles con las librerías del .Net Framework, pero además cuenta con una serie de librerías no existentes en el .Net Framework de Microsoft; como el GTK# que permite crear interfaces gráficas nativas del toolkit GTK+, Mono.LDAP, Mono.Posix, etc.
Origen de Mono
Mono fue concebido por Miguel De Icaza, siendo el proyecto en aquel entonces patrocinado por su compañía Ximian; actualmente Novell es quien patrocina el proyecto Mono, ya que Novell adquirió a Ximian.

La motivación de crear Mono se debe a la búsqueda de herramientas que ayudaran a la creación rápida de aplicaciones en el entorno Linux.
Plataformas soportadas por Mono
Actualmente Mono se puede ejecutar en plataformas x86, PPC, SPARC y S390 en 32 bits; y x86-64 y SPARC en 64 bits; siendo posible crear y ejecutar aplicaciones en los sistemas operativos: Linux, Windows, OSX, BSD y Solaris.
¿Es mono compatible con el .Net Framework?
Uno de los objetivos de Mono es alcanzar un alto grado de compatibilidad con el API 1.1, aunque ya hay bastante trabajo de compatibilidad con el API 2.0 del .Net Framework.
Con esto se busca que un binario compilado en Windows con el .Net Framework pueda ejecutarse en alguna de las plataformas de Mono sin tener que recompilar el binario, y que a su vez pueda hacer uso de las librerías compatibles de Mono -Ej: System.Data, System.Xml, etc -.

Las librerías proporcionadas por Mono son 100% compatibles con su contraparte del .Net Framework. La última versión 2.6.1. incluye entre otras importantes funcionalidades:

    *
      El CLI
    *
      El compilador de C#
    *
      ADO.NET
    *
      ASP.NET
    *
      WebServices
    *
      System
    * WindowsForms

Siendo esta ultima - WindowsForms - la que requiere de mayor trabajo para ser completada en su totalidad. Aunque cabe destacar que el proyecto no contempla la creación de librerías compatibles para Enterprise Services.
¿Que tipo de aplicaciones puedo crear actualmente con Mono?
Bueno es posible crear aplicaciones de tipo Web y Webservices con el uso de modulo mod_mono que permite al servidor de Web Apache servir paginas de ASP.NET (aspx) y Servicios Web (asmx).

Es también posible crear aplicaciones que acceden a base de datos como Microsoft SQL, Oracle, Postgresql, etc.

Por el lado de aplicaciones de interfase gráfica, la sugerencia es utilizar GTK#, ya que el toolkit en el que este esta basado (GTK+), permite ejecutar aplicaciones gráficas en ambientes Linux, Windows y OSX sin cambios; esta sugerencia toma importancia, debido a que la implementación compatible con Windows Forms en Mono aun no esta completa.
¿Hay algún requerimiento para que mi aplicación sea compatible con Mono y el .Net Framework, es decir portable?
Realmente no hay ninguno en especifico, siempre y cuando sea una aplicación basada en el CLI; aunque si hay algunos puntos que se deben de tener en consideración:

   1.
      Linux distingue entre mayúsculas y minúsculas en los nombres de archivos y directorios; así es que necesario tener una consistencia con los nombres que utilicemos.
   2.
      El separador de rutas es diferente en Windows (\) que en Linux (/), por lo tanto se recomienda usar el API Path.DirectoryPathSeparator, para obtener en separador correcto al ejecutar la aplicación.
   3.
      Si se utilizan librerías no CLI (Ej: librería en C, C++ etc.), mediante p/Invoke, asegurarse que la librería existe en los diferentes ambientes donde se va a ejecutar la aplicación.
   4.
      No hacer uso de tecnologías que solo existan en un ambiente en particular (Ej: Registry en Windows o GConf en Linux -Gnome-); o bien proveer alguna solución que permita a la aplicación operar de forma correcta en el ambiente donde se ejecuta.
   5. Aplicaciones basadas en Windows Forms y que sean muy complejas pueden no funcionar de momento, debido a que Windows Forms en Mono no esta completo.

¿Qué herramientas de desarrollo existen en Mono?
Bueno es posible desde Windows desarrollar una aplicación utilizando el Visual Studio. En el lado de Linux existe MonoDevelop, un IDE basado en SharpDevelop.

MonoDevelop permite el manejo de proyectos, y colorear sintaxis, auto completar código, compilar y ejecutar la aplicación desde la misma IDE.
Mediante agregados (add-ins) se le ha ido extendiendo la funcionalidad para por ejemplo:

    *
      Conectarse a bases de datos desde el IDE
    * La inclusión de un debugger que permita al igual que el Visual Studio, ejecutar código linea por linea, y revisar valores de variables.

Hay trabajo actualmente para integrar un diseñador de formas, aunque este diseñador esta enfocado a crear formas para GTK# y no Windows Forms.
Aplicaciones hechas para Mono.
Hay una buena cantidad de aplicaciones desarrolladas para Linux en Mono, para darse una idea, aquí hay 2 listados con estas aplicaciones:

    *
      osnews
    * gnomefiles

De estas aplicaciones de las destacadas son:

    *
      MonoDevelop: Es una IDE para programar en Linux programas para Mono. La IDE esta hecha en C#.
    *
      F-Spot: Programa para catalogar fotografías, además de poder hacer algunas modificaciones digitales a las fotos.
    *
      Beagle: Herramienta que indexa y busca información entre una serie diferentes tipos de documentos en Linux.
    *
      Tomboy: Programa para almacenar notas que se ligan mediante palabras claves.
    *
      Muine: Es un reproductor de audio basado en GStreamer.
    *
      PyMusique: Programa que provee de una interfase gráfica para acceder a comprar música con el servicio iTunes de Apple.
    * MonoUML: Es un editor para realizar diagramas con el estandar UML.
    * Gnome Do: Rápido y eficaz lanzador de aplicaciones.
    * Docky: Dock para tu escritorio.
    * Banshee: Reproductor multimedia basado en Gstreamer.

Mono y las licencias
Mono es la implementación de código fuente abierto del .Net Framework de Microsoft, basado en los estándares liberados a la ECMA; por ser una implementación basada en un producto de Microsoft, ha causado controversia el uso de Mono en Linux -entre los usuarios y desarrolladores de Linux -, el argumento es que Mono pueda infringir patentes de Microsoft, lo cual puede convertirse una demanda en contra de Mono.

De acuerdo con la pagina del proyecto Mono, mientras el CLI y el compilador de C# se apegue a los estándares aceptados por la ECMA, estas 2 piezas están seguras, con relación a las librerías especificas de Mono, estas no corren ningún riesgo; pero la implementación de las librerías relacionadas con ASP.NET, ADO.NET y Windows Forms son sensibles a infringir a alguna patente de Microsoft - aunque de momento no se tiene conocimiento de que así sea -; por tal motivo el proyecto Mono sugiere 3 opciones para este ultimo caso:

    *
      Reimplementar la funcionalidad - para evitar la patente -, tratando de mantener el API compatible.
    *
      Eliminar cosas que no puedan ser reimplementadas.
    * Buscar elementos que puedan nulificar la patente.

Según la Wikipedia, la implementación de Mono de esos componentes de .NET no sometidos a ECMA para su estandarización ha levantado algunas preocupaciones por la posible violación de patentes de software durante la vida del proyecto. En particular, la discusión se desarrolló por si Microsoft podría o no destruir al proyecto mono mediante demandas sobre las patentes violadas. En la actualidad existe un vivo debate sobre la (in)conveniencia de aceptar y usar Mono en la comunidad de desarrolladores de GNU/Linux. El principal argumento en contra de Mono es que no está libre de patentes de software, y existe el riesgo de que Microsoft exija licencias para usar C# / CLI.

Por otra parte, el proyecto Gnome está desarrollando un lenguaje alternativo, Vala, creado específicamente para desarrollar aplicaciones para Gnome, pero libre de las potenciales amenazas de Microsoft.

Fuente (http://snifer-l4bs.blogspot.com/2011/02/conociendo-mono.html)