Вы находитесь на странице: 1из 4

Mono y DotGNU DESARROLLO

Comparamos las implementaciones libres de .NET: Mono y DotGNU

MULTITUD DE PUNTOS

Los proyectos de software libre Mono y DotGNU abren la plataforma .NET de Microsoft a los desarrolladores de Linux. Este artculo investiga lo bien adaptadas que se encuentran estas implementaciones alternativas para la programacin de sencillas aplicaciones GUI. POR MICHAEL TSCHATER

n 2002, Microsoft lanz un nuevo sistema para el desarrollo independiente de la plataforma, denominado .NET (pronunciado punto net). El proyecto .NET est orientado a simplificar el desarrollo de aplicaciones en red y para Internet. Soporta programacin orientada a objetos y proporciona una nica librera de clases capaz de ser usada por mltiples lenguajes, tales como por ejemplo: C# y VB.NET. Con el lanzamiento de .NET, Microsoft ha suspendido el respaldo a su primer favorito: la librera MFC para Visual C++. Todos los productos futuros de Microsoft se basarn en esta nueva tecnologa.

.NET libre?
A pesar de la orientacin independiente de la plataforma del framework .NET, Microsoft difcilmente va a distribuir una implementacin para Linux, y esta falta de soporte para Linux ha hecho que dos proyectos den el salto para cubrir este hueco: el proyecto Mono [1] esponsorizado por Novell y el proyecto de cdigo libre DotGNU [2]. Tanto Mono como DotGNU pretenden proporcionar una implementacin .NET tan completa como sea posible. El objetivo de ambos proyectos es el de permitir a los desarrolladores el intercambio de software saltando las barreras de los diferentes sistemas operativos.

Adems de una funcionalidad bsica, como la capacidad para manipular cadenas, la mayora de los proyectos necesitan de componentes para los interfaces grficos de usuario, para ayudar a estos a hacer frente a sus tareas diarias. Microsoft proporciona la librera System.Windows.Forms para ste propsito. Esta librera contiene objetos GUI, tales como MainMenu, TollBar, Combobox, o Button. El Listado 1 contiene un pequeo programa de ejemplo. Para comparar las implementaciones Mono y DotGNU, usaremos un programa escrito inicialmente en Windows. Este pequeo ejemplo hace uso de los principales componentes GUI, ver la Figura 1.

WWW.LINUX- MAGAZINE.ES

Nmero 14

43

DESARROLLO Mono y DotGNU

Figura 1: Esta aplicacin demostrativa incluye los principales componentes GUI de la librera System.Windows.Forms de .NET. Esta figura muestra la versin de Windows.

Figura 2: Visual Studio .NET mostrando el cdigo del proyecto de ejemplo descrito en este artculo. El cdigo de la figura dibuja los elementos grficos.

El cdigo fuente est disponible en la web de Linux Magazine[3]. La nica funcionalidad que realmente proporciona el cdigo es la de registrar la entrada del usuario en una ventana diseada especialmente para esto.

El Original de Microsoft
Una forma de conseguir la implementacin .NET original de Microsoft es con la descarga del entorno de ejecucin de .NET gratuito y el SDK (Software Development Kit). La versin de descarga nos proporciona todas las herramientas en lnea de comandos necesarias para el desarrollo de software en Windows, tal y como sucede con el SDK de Java. El comando csc nos permite compilar la aplicacin. El resultado slo puede ser ejecutado directamente en el sistema operativo Windows. El entorno integrado de desarrollo (IDE) Visual Studio .NET es una alternativa comercial para el desarrollo en .NET que incluye un depurador y un editor de

ventanas de dilogo (Figura 2). Este paquete instala automticamente el SDK .NET. El entorno de desarrollo libre Sharpdevelop[4], es una buena alternativa al paquete Visual Studio .NET. Sharpdevelop proporciona un potente IDE al que slo le falta un depurador integrado. Pero entre las caractersticas incluidas se encuentran la capacidad de cambiar entre los entornos de ejecucin de Microsoft y Mono, y la de importar los proyectos de Visual Studio .NET.

izacin de interfaces grficas de usuario. GTK# se basa en GTK+, que constituye la base del Desktop Gnome en Linux.

GUI con Windows.Forms


La librera System.Windows.Forms est principalmente implementada en C# y dibuja sus propios controles[6]. La librera requiere de un driver para cada sistema operativo: los controladores para X11 y Windows ya estaban disponibles a la hora de escribir este artculo. El proyecto DotGNU ha adoptado este diseo tras deshacerse de una implementacin basada en Wine, por ser impracticable. Aparte del compilador mcs y del entorno en tiempo de ejecucin mono, la versin en Linux contiene el entorno de desarrollo monodevelop, basado en un port a Linux de Sharpdevelop. El navegador de ayuda, monodoc, contiene la til caracterstica de permitir a los programadores actualizar su documentacin desde un repositorio de Mono en Internet. Adems de los binarios especficos de la distribucin, disponemos de un instalador ejecutable que se encargar de configurar todos los paquetes que se necesitan. Tras descargar un paquete de 50MB, un asistente nos guiar a travs del procedimiento de la instalacin, que slo involucra unos pocos pasos. Gracias al asistente, los problemas de instalacin que una vez afectaron a distribuciones que antes estaban explcitamente soportadas, pero no en la actualidad (como Fedora), son ahora cosa del pasado.

La Alternativa: Mono
El entorno Mono[5] est disponible bajo Linux, Windows y Mac OS. Adems de la librera de clases estndar de .NET, Mono proporciona una serie de extensiones, tales como una serie de libreras de Gnome. La mquina virtual incorpora las tcnicas de compilacin just-in-time (JIT) y ahead-of-time para mejorar la velocidad de ejecucin de nuestros programas. Mono usa GTK# (tambin disponible bajo Windows) para la real-

Listado 1: GUI con System.Windows.Forms


01 using System; 02 using System.Windows.Forms; 03 04 namespace LinuxMagazin.FirstApp 05 { 06 public class FirstApp : System.Windows.Forms.Form 07 { 08 public static void Main() 09 { 10 11 12 13 14 15 16 17 Application.Run(new FirstApp()); } public FirstApp() : base() { this.Text = "First Application with GUI"; } } }

44

Nmero 14

WWW.LINUX- MAGAZINE.ES

Mono y DotGNU DESARROLLO

el nuevo proyecto. La ayuda contextual que aparece cuando editamos el cdigo fuente es una de esas funcionalidades de la que daremos rpidamente cuenta en el entorno de desarrollo, pero por desgracia el entorno carece, por ahora, de un diseador de GUIs. Figura 3: La aplicacin de ejemplo ejecutndose en Mono con Linux Cuando intentiene dificultades en el dibujado de los botones de arriba y en las cajas tamos compilar de seleccin de la derecha. el cdigo con el comando mcs Algunas distribuciones, cmo Suse 9.3, -r:System.Windows.Forms.dll incluyen Mono en su instalacin por sourcefile , el control estndar Sysdefecto, pero distribuciones como Red tem.Windows .Forms.NumericUpHat y Fedora tienden a desplazar su Down causa un problema, ya que an inters a la plataforma Java. no est completamente implementado Hay un nmero de sitios web, como el en Mono. Tras eliminar el trozo de que se encuentra en [5], que documencdigo que produce el error, podremos tan en detalle el progreso del proyecto compilar la aplicacin y ejecutarla Mono. Por ejemplo, podemos encontrar dentro de entorno en tiempo de ejecuuna descripcin de los controles de la cin mono (Figura 3). librera System.Windows.Forms en [6]. Ocurren varios errores: por ejemplo, el mecanismo de actualizacin, que Una Aplicacin de maneja el redibujado de la aplicacin, Ejemplo en Mono no funciona correctamente cuando Los proyectos existentes en Visual Stusta es ocultada por otra aplicacin. dio .NET, tales como nuestro programa Adicionalmente, el mecanismo de de ejemplo, pueden ser importados eventos presenta algunos problemas directamente a Monodevelop. Pero no con los controles RadioButton y Comolvidemos ajustar las referencias para boBox.

El Contrincante: DotGNU
De acuerdo con el nmero de versin asignado al proyecto, 0.7, podemos decir que DotGNU es algo menos maduro que Mono. El componente central de DotGNU se denomina Portable .NET. Comprende tres componentes principales: treecc (una herramienta para la programacin orientada a aspectos), pnet (entorno en tiempo de ejecucin, compilador C#, herramientas de programacin) y pnetlib (librera de sistema de C# con libreras de clase crticas de C#). El cdigo fuente y el paquete RPM estn disponible en la pgina web de DotGNU. La versin en RPM no requiere ningn ajuste para que nos proporcione un entorno completamente funcional; todas las herramientas funcionaron a la primera. Las distribuciones actuales, tales cmo Debian 3.1 hacen las cosas an ms fciles, incluyendo el entorno DotGNU por defecto (en el paquete pnet). Los comandos siguientes compilan y ejecutan la aplicacin HelloWorld:
cscc -o HelloWorld.exe U HelloWorld.cs ilrun HelloWorld.exe

La siguiente secuencia de comandos construye un proyecto ms complejo con interfaz grfico. Los ficheros con el cdigo fuente se encuentran en el subdirectorio src:
cscc -winforms -o U Application.exe src/*.cs ilrun Application.exe

Tabla 1: Comparando Implementacion


Proyecto Versin Actual Licencia Sistemas Operativos Ventajas Paquete estndar con Debian Los bytecodes originales de windows ser ejecutados sin modificaciones Desventajas System.Windows.Form no implementado completamente Errores en el manejo de eventos No tiene entorno de desarrollo System.Windows.Form no implementado completamente Errores en el manejo de eventos El asistente de instalacin no est completamente probado; por ejemplo, el entorno de desarrollo falta en Mono 1.1.7 Paquete estndar con Suse 9.3 Soportado por desarrolladores a tiempo puede completo de Novell DotGNU 0.7.0 LGPL Linux, Mac OS X, Windows Mono 1.1.8 GPL o propietaria (seleccionable) Linux, Mac OS X, Windows

WWW.LINUX- MAGAZINE.ES

Nmero 14

45

DESARROLLO Mono y DotGNU

cion de ninguna manera y no se mostr correctamente. El control GroupBox cambia de color para indicar que contiene el foco de la aplicacin. Este comportamiento no es conforme al estndar. El control ImageList impide que sea mostrada la aplicacin. DotGNU Figura 4: La aplicacin .NET con GUI tiene algunos problemas cuando es capaz de prese ejecuta en DotGNU; por ejemplo, los botones circulares lanzan sentarnos los ejeeventos mltiples veces. cutables creados con Mono, pero La implementacin de la librera Syslos iconos del control de la barra de tem.Windows.Forms no se basa en una botones no son los correctos. librera grfica cmo GTK, sino que Una clasula en la licencia de dibuja los controles por s mismo, tal y Microsoft .NET prohbe la publicacin como sucede en la librera Swing de de comparativas de rendimiento para Java. DotGNU no tiene implementado las implementaciones de .NET. Sin por s mismo un IDE. embargo, el proyecto DotGNU proporciona la herramienta PNetmark [7] El Proyecto de Ejemplo en para ayudar a aquellos interesados en DotGNU mediciones de rendimiento, poder DotGNU ejecuta los bytecodes generacrear sus propios test de rendimiento. dos en Windows sin necesidad de Para ms informacin sobre cmo modificarlos. Sin embargo, pulsando crear estas pruebas, podemos consulen los controles RadioButton se inicia tar la Seccin 1.4 en el FAQ de Dotla rutina de eventos mltiples veces. GNU. Esto no cambia cuando recompilamos Resumen los fuentes usando DotGNU: cscc --winforms -o DemoApp.exe *.cs . El framework .NET de Microsoft nos Adems tenemos que eliminar el proporciona una aproximacin interecdigo manejador de ImageList para sante a la programacin independiente lograr que la aplicacin termine de compilar. Nuestras pruebas lograron descubrir otro error en la versin compilada con DotGNU (Figura 4). Tambin indicaron que el mecanismo de eventos no funcionaba correctamente: el componente GUI RadioButton lanzaba eventos duplicados. NumerFigura 5: Aplicacin sencilla corriendo con System.Windows.Form.dll icUpDown no fun-

de la plataforma. El lenguaje de programacin C# es muy similar a los lenguajes de programacin Java y C++, y simplifica el aprendizaje de C# a los programadores que conocen estos lenguajes de programacin. Otra ventaja que nos proporciona C# es su estandarizacin en ECMA. Las dos implementaciones libres de la plataforma .NET, Mono y DotGNU, contienen caractersticas muy interesantes, pero tambin presentan algunas asperezas que hay que limar. Los desarrolladores de ambas herramientas an tienen que recorrer un largo camino antes de lograr una completa compatibilidad. Dicho esto, tanto DotGNU como Mono logran proveer de soporte al desarrollo de software en .NET en Linux. Los principales problemas experimentados se han dado en el uso de la librera System.Windows.Forms, que provee a las aplicaciones grficas en Windows. En otras palabras, an no es posible migrar software .NET con GUIs basadas en Windows a Linux de manera sencilla. Como alternativa a la migracin directa de software .NET con GUIs basadas en Windows a Linux, podemos usar libreras GUI tales como GTK#, Qt# o WX#. Puesto que todas estas libreras estn tambin disponibles en la plataforma Windows, las aplicaciones multiplataformas son posible dentro de unos lmites dados, sin embargo estas aplicaciones no llegarn a ser compatiI bles .NET.

RECURSOS
[1] Mono: http://www.mono-project.com [2] DotGNU: http://www.dotgnu.org [3] Listados online: http://www. linux-magazine.com/Magazine/ Downloads/2005/12/dotNET/ [4] Pgina de Sharpdevelop: http://www. icsharpcode.net [5] Estado del desarrollo de Mono: http:// www.go-mono.com/mono-roadmap. html [6] Estado del desarrollo de System.Windows.Forms en Mono: http://svn. myrealbox.com/mwf/owners.html [7] PNetmark: http://www. southern-storm.com.au/pnet_faq. html#q1_4

46

Nmero 14

WWW.LINUX- MAGAZINE.ES

Вам также может понравиться