Entradas etiquetadas como ‘open source’

Escrito por Iván Alonso el Martes 9 de Septiembre de 2008

Antes que continuar con más aspectos técnicos sobre Mono, quizá sea más interesante conocer un poco del trasfondo y la situación histórica que nos lleva hasta aquí.

En 1996 comenzó el proyecto KDE, para dotar a GNU/Linux con un sistema de ventanas mucho más avanzado de lo que existía hasta el momento. Aunque KDE era software libre, se basaba en el toolkit Qt de Trolltech, que por aquel entonces tenía una serie de licencias restrictivas que lo hacían en cierto modo incompatible con la filosofía de libertad de GNU.

En Agosto de 1997 diero comienzo varios proyectos para solventar esta situación, entre ellos Gnome (dirigido por Miguel de Icaza y Federico Mena), aunque cuando más adelante Qt pasó a tener una licencia mucho más libre (2000) sólo Gnome continuó su camino. Así, lo que Gnome pretendía era ofrecer otra opción a KDE que fuera verdaramente libre. Para esto eligieron GTK+ (el toolkit de GIMP) como sistema sobre el que construir su nuevo entorno, en el que poder utilizar licencias como LGPL (Aún liberado, Qt sigue utilizando la licencia GPL, que es más restrictiva con respecto a lo que se puede hacer con el software que la incluye, especialmente cuando tratamos con librerías).

En el 2000, cuando los documentos sobre estándares de .Net vieron la luz, Miguel de Icaza comenzó a interesarse por ellos, desarrollando un compilador de C#. En Ximian, la empresa dedicada al desarrollo de aplicaciones para Gnome fundada por (entre otros) de Icaza, se realizó un estudio de viabilidad para asegurarse de que la tecnología del proyecto Mono podía desarrollarse, tratando así de encontrar nuevas formas de desarrollo que facilitaran la creación de aplicaciones (probablemente el punto más fuerte de .Net).

El 20 de Junio del 2004 se liberó Mono 1.0.

Escrito por Iván Alonso el Lunes 8 de Septiembre de 2008

Ya sabemos más o menos que es eso de Mono. Intuimos que, como todos los grandes proyectos Open Source, tiene un roadmap de funcionalidades a incluir, por lo que nos preguntamos ¿En qué estado se encuentra ahora mismo el proyecto?

A lo largo de este Septiembre de 2008, aparecerán varias versiones release candidate, como preludio a la aparición de la versión 2.0 de Mono a final de mes. Este es un resumen de cómo quedará el proyecto tras esta nueva versión:

API: Terminadas las Base Class Libraries con lo que le faltaba (Windows.Forms) hasta .Net 2.0. Añadido ADO.NET 2.0 y ASP.Net 2.0 (WebForms y Web Services, faltan WebParts y ciertas partes de Mobile).

Compiladores: C# 3.0 (incluyendo LINQ to Objects y LINQ to XML, aunque aún sin LINQ to SQL u otras bases de datos) y Visual Basic .Net con generics.

Máquina Virtual: Ahora incluye también DLR (Dynamic Language Runtime), que en .Net se utiliza para IronRuby o IronPython, y en un futuro en otros lenguajes más asociados al scripting como el futuro Visual Basic .Net 10.0.

Otros:

  • MoMA (Mono Migration Analyzer), una herramienta para evaluar la complejidad previa de portar un proyecto de .Net a Mono.
  • Gendarme: una herramienta para analizar programas y librerías en código intermedio buscando problemas que los compiladores no suelen buscar.
  • Debugger: Que se está rehaciendo, dado que en la última versión de MonoDevelop no es posible realizar debug de la aplicación.

Otros proyectos con su propio roadmap:

  • Moonlight: implementación libre de Silverlight, con apoyo por parte de Microsoft. Actualmente soporta la versión 1.0 y se ha comenzado con la 2.0. El desarrollo puede hacerse con su propio IDE (Lunar Eclipse), y ya existe como plugin para Mozilla.
  • Proyecto Olive: trasladar nuevas librerías de .Net a Mono, entre las que se encuentran algunas de las más interesantes de .Net 3.0, como WF, WCF o WPF, aunque aún se encuentran en un estado muy alpha.
  • Proyectos Google Summer of Code: LINQ to DB (MySql, Oracle y PostgreSQL), MSBuild, etc.
  • Otras librerías: Al igual que se han reimplementado las Base Classes, también hay muchos proyectos relacionados con Mono o que incluyen wrappers/bindings a otros sistemas, como: GTK#/Glade# para utilizar las interfaces de usuario de GTK+ y/o desarrollar aplicaciones nativas para Gnome, Mozilla libraries (Gecko#), integración con Mac OS X (Cocoa#), bases de datos, seguridad, integración con Unix, y un largo etcétera [documentación].
Escrito por Iván Alonso el Lunes 8 de Septiembre de 2008

Básicamente es una versión libre de .Net, aunque definirlo así no es del todo acertado, ya que existen similitudes y algunas peculiaridades en partes de sus componentes. En la wikipedia encontramos una definición bastante acertada:

Es un conjunto de herramientas compatibles con .Net que siguen estándares ECMA.

.Net puede reducirse a tres componentes: un compilador, una máquina virtual y un conjunto de librerías. Como Java. En el caso de .Net existen decenas de compiladores que traducen distintos lenguajes al código intermedio de .Net (CLI, Common Language Infraestructure), aunque el proyecto Mono se ha centrado principalmente en C#, y posteriormente algunos otros.

La máquina virtual (el CLR), proporciona un entorno seguro de trabajo, control de memoria, hilos de ejecución, control de excepciones, un garbage collector

Las librerías (Base Class Library) encapsulan muchas de las funcionalidades que podemos necesitar en el día a día del programador, y son lo bastante amplias como para poder desarrollar aplicaciones complejas en su totalidad sin necesitar librerías externas.

¿Qué incluye Mono de todo esto? Pues vayamos por partes: dado que el código intermedio (CLI) es un estándar liberado por Microsoft (bajo el control del ECMA, estándar Ecma-335), cualquiera puede programar compiladores para esta tecnología. El compilador de C# de Mono sólo necesita basarse en las especificaciones del CLS (Common Language Specification) y del lenguaje C# (también estándar, Ecma-334). También existen documentos ISO definiéndolos [lista].

El CLR es una implementación concreta de Microsoft, pero Mono incluye su propia máquina virtual compatible con el CLI. Incluye un compilador Just-in-time, un compilador Ahead-of-time, cargador de clases y librerías, garbage collector, threads e interoperabilidad.

Y las librerías: Mono incluye una reescritura de prácticamente todo el API, aunque alguna cosa podría faltar. El principal caballo de batalla (de hecho en prácticamente cualquier sistema de código abierto) ha sido siempre el interfaz de usuario. El espacio de nombres Windows.Forms alcanzará compatibilidad con la versión 2.0 de .Net en la próxima aparición de Mono 2.0. Por otra parte, aquellas partes de las librerías de .Net que hayan sido incorporadas más tardíamente a Mono, tienen contrapartidas funcionales. Por ejemplo: Si no queremos usar la implementación Mono de Windows.Forms, podemos utilizar GTK#.

En resumen:

Por lo tanto, hemos visto qué es Mono y hemos comparado sus tres bloques principales con .Net, viendo que nos proporciona una implementación libre (y verdaderamente multiplataforma) de .Net, permitiendo incluso utilizar código (y binarios) desarrollados con Visual Studio en otras plataformas.

En el próximo post de esta serie veremos otras peculiaridades de este sistema.

Escrito por Iván Alonso el Jueves 10 de Julio de 2008

Hace unos días instalamos Eclipse en Ubuntu, para ir trasteando con el nuevo entorno. Conste en acta que yo Eclipse lo he usado tres veces contadas, así que iremos descubriendo qué podemos hacer y cómo a la vez.

Los siguientes pasos serán instalar el mismo entorno sobre Windows (de lo que trata este post) y, por último, de configurarlo de modo que podamos compilar el mismo código en dos entornos diferentes generando ejecutables autónomos (que quedará para un próximo post).

Instalando Eclipse sobre Windows

Vamos a la página de descargas de Eclipse (veremos que ya se encuentra en su versión Ganymede), seleccionamos Eclipse IDE for C/C++ Developers [68MB], y escogeremos el mirror desde el que queremos descargar la versión (por defecto se nos mostrará uno cercano).

(más…)

Escrito por Iván Alonso el Miércoles 18 de Junio de 2008

Hoy ya he colaborado con mi descarga de la versión 3.0 (en castellano) de Firefox para Ubuntu. Dado que la actualización ha sido (casualmente) el mismo día que el Download Day, asumo que las descargas para Ubuntu también se contabilizarán para el total…

Firefox Download Day

Click, click, ¡¡descargad!!

Escrito por Iván Alonso el Martes 17 de Junio de 2008

Visualización que muestra la evolución del proyecto Apache a lo largo del tiempo, por Michael Ogawa.