Volver a Mentores.NET |
Volver
a Categoría .NET | Volver
a la Biblioteca de Temas
Mono es la
implementación libre del CLI (Common Language Infraestructure) y C#, de acuerdo
a las especificaciones enviadas a la ECMA para su estandarización Esta implementación es de
codigo fuente abierto (Open source).
El 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.
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 este 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.
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.
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 casi 100% - la mayoría son 100% compatibles -
compatibles con su contra parte del .Net Framework, aunque se planea el liberar
una versión de Mono -v1.2- en los próximos meses que elimine el "casi", la
versión incluiría:
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.
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.
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:
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.
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.
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.
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.
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.
Bueno es posible desde Windows desarrollar una aplicación utilizando el
Visual Studio. En el lado de Linux existe el MonoDevelop, el cual es un
IDE basado en el SharpDevelop.
MonoDevelop aun se encuentra bajo intenso
desarrollo, pero aun así permite el manejo de proyectos, el colorear la
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.
Hay una buena cantidad de aplicaciones desarrolladas para Linux en Mono, para darse una idea, aquí hay 2 listados con estas aplicaciones:
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.
Como se menciono al principio 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.
La manera mas fácil es descargar el paquete adecuado desde la pagina del proyecto; en el caso de Linux también es posible hacer uso de los diferentes mecanismos de instalación de programas que provee cada distribución de Linux (yum, apt, red carpet). En el caso de Windows definitivamente la opción, es descargar el instalador desde la pagina del proyecto.
Para obtener mayor información del proyecto Mono, esta disponible el sitio web en ingles, además de los monologue que es un agregador de los blogs de los desarrolladores de Mono; o bien es español el sitio Mono Hispano, además de los blogs de la gente que mantiene este sitio.
Autor:
Mario Alberto Chávez
Cárdenas
Actualmente trabaja para Decisiones
Inteligentes, y colabora en la comunidad TJNET en la ciudad de Tijuana,
México.
mario.chavez@decisionesinteligentes.com