A estas alturas ya todos hemos
oído hablar de .NET, el
gran lanzamiento de Microsoft,
sin embargo, lo que no se conoce
es que desde tiempo
está en marcha un proyecto
con la intención de brindar
algunas de las partes de .NET a
nuestro sistema operativo favorito.
Apesar de las críticas que recibe
Microsoft a causa de la discutible
calidad de algunos de sus productos
y los problemas de seguridad de otros, hay
que reconocer que la gente de Redmond también aciertan. Y en el caso de .NET, la verdad
es que han dado en el clavo por razones que
explicaremos mas adelante y que tiene muy
claro Miguel de Icaza, fundador del proyecto
GNOME, que se ha embarcado en el proyecto
Mono, que intenta llevar a GNU/Linux algunas
de las partes de la arquitectura .NET.
Hay mucha confusión en cuanto a qué es
exactamente .NET, debido a la cantidad
de cosas que este simple término abarca.
A saber:
—La plataforma de desarrollo .NET para
escribir software.
—Servicios Web (SOAP).
—Aplicaciones servidor de Microsoft.
—Nuevas herramientas que usan esta pla
taforma.
—Hailstorm, el servicio de autenticación
que tanta polémica ha suscitado.
El proyecto Mono, como hemos comentado anteriormente, sólo está interesado en una
de estas partes, que es la plataforma de desarrollo .NET, fuertemente basada en la idea
promovida por el lenguaje Java de «compila
una vez, ejecuta en cualquier sitio», pero con
algunos añadidos muy interesantes. El resto
de cosas abarcadas dentro del término .NET,
o bien no levantan ningun interés especial en
los integrantes del proyecto Mono o bien se
dejan para que sean desarrollados por terceras partes.
Esta plataforma de desarrollo incluye conceptos que serán de sobra conocidos por los desarrolladores de Java: máquina virtual,
librería de clases o código intermedio (bytecode). Ademas, en cuanto echen un vistazo a un
programa desarrollado en C#, encontrarán
enormes similitudes con Java. Esto se debe a
que, en parte, Microsoft ha cogido las ideas
que tuvieron los desarrolladores de Java, muy
buenas algunas de ellas, por cierto, y las ha
mejorado bastante, añadiendo nuevas funcionalidades/características que hacen de .NET
una tecnología digna de, por lo menos, ser
conocida. Entre estas mejoras hay algo que se
echa bastante de menos en Java, que es el
soporte para distintos lenguajes de programación, que si bien es posible con Java, no es
sencillo
Esta plataforma de desarrollo se
compone, a su vez, de distintas partes, que son:
—Un entorno de ejecución (máquina virtual) que provee de servicios básicos a las
aplicaciones .NET, como son la recolección de
memoria y el soporte para distintos hilos de
ejecución, a la vez que define lo que se conoce como VES (Virtual Execution System ), que
es una especificación de la máquina virtual
usada en la plataforma .NET.
—Una librería de clases repleta de funcionalidad (para tratamiento de ficheros, protocolos de red, acceso a BBDD, etc.), con el
interesante añadido de que cualquier clase de
.NET puede ser implementada en cualquier
lenguaje soportado por .NET y utilizada desde
cualquier lenguaje soportado por .NET. De
forma que, por ejemplo, podríamos implementar un analizador sintáctico de XML en C#
y lo podríamos usar, sin ninguna complicación
adicional como en el caso de Java (JNI),
desde nuestras aplicaciones escritas en Perl o
en cualquier otro lenguaje soportado.
—Un nuevo lenguaje, C# que ha sido
desarrollado, como decíamos antes, para acceder a toda la potencia de la plataforma
.NET. Este lenguaje está fuertemente basado
en la sintaxis del lenguaje Java.
—Una especificación de un lenguaje
intermedio, conocido como CLS (Common
Language Specification), que permite que
distintos compiladores puedan generar un
código intermedio (o bytecode en la terminología Java), que es el que luego procesará la
máquina virtual de .NET a la hora de ejecuta
programas. Esto permite que, por ejemplo, se
añada soporte para generar este código intermedio a cualquier lenguaje existente, de
forma que los programas desarrollados en ese
lenguaje puedan ser ejecutados en el entorno
de ejecución de .NET.
Todas estas partes forman una plataforma
de desarrollo realmente interesante, especial
mente por la independencia de lenguaje que
comentamos.
Si .NET estuviera limitado a C#
por ejemplo, estaríamos hablando de algo
muy parecido al entorno Java, con sus ventajas e inconvenientes, y si bien sería otra tecnología (ya existente en Java) interesante, su
utilidad para el proyecto GNOME realmente
sería mínima.
Sin embargo, esta independencia del lenguaje de programación utilizado es lo que
hace a .NET especial con respecto a Java,
pues entra de lleno a solucionar los problemas
que tenemos los desarrolladores de
software, que es la continua necesidad de reutilizar todo tipo de código,
para no tener que estar reinventando
la rueda (o sea, re-implementando lo
mismo para distintos lenguajes de
programación) una y otra vez. Esta es
la característica, con respecto a Java,
mas interesante en nuestra opinión de
.NET, aunque hay otros añadidos al
lenguaje y, sobre todo, la cantidad de
informacion que se almacena de cada
clase del sistema, que es realmente
impresionante en .NET.
Otra característica que hace
interesante a .NET a los ojos de los
desarrolladores de software libre es
que, para sorpresa de todos, Microsoft ha publicado y entregado al
ECMA, una organización que se
dedica a aprobar estándares, las
especificaciones de la plataforma
.NET, de manera que cualquiera
puede leerse dichas especificaciones y realizar su propia implementación. Si bien este movimiento Microsoft puede ser entendido como una
estrategia para acallar las voces que les
acusan de monopolio, el caso es que el
tener un estándar público nos permite, a
los desarrolladores de software libre, y gracias a Mono, tener acceso a esta novedosa
plataforma de desarrollo. Por ello, vaya
desde aquí nuestra felicitación a Microsoft
por elegir el camino de los estándares
abiertos y olvidarse de los protocolos/espe
cificaciones/API ocultas. Esperemos que
sigan con esta actitud a partir de ahora,
pues es algo que será beneficioso para
todos, tanto usuarios/desarrolladores de software libre como de software propietario.
Ademas, al ser una especificación pública,
digamos que los desarrolladores de software
libre estamos, de una forma u otra, obligados
a soportarla en nuestros sistemas, como pasa
con el resto de estándares (HTTP, FTP, POSIX,etc.), de forma que nuestro sistema operativo
preferido siga siendo el mejor en el campo de
la integración con otros sistemas, pues soporta todos y cada uno de los estándares mas
comunes. Menos mal que los desarrolladores
de Mono van a hacer este trabajo por nosotros,
así que podemos dormir tranquilos.
PROYECTO MONO
Bien, pues ya sabemos mas o
menos qué ofrece .NET. Ahora, la
pregunta es, ¿por qué Miguel de
Icaza, líder espiritual del proyecto GNOME, se embarca en un
proyecto de esta magnitud en vez
de continuar con el desarrollo de
GNOME como hasta ahora?
La
mejor respuesta a esta pregunta
la podemos leer, de manos del
propio Icaza, en el web del proyecto Mono, pero vamos a intentar explicarlo con nuestras propias palabras.
En primer lugar, hay que destacar que, como dice Miguel, Microsoft ha desarrollado toda esta nueva
plataforma de desarrollo para resolver un problema que se les había
presentado, que es la complejidad
de las API (interfaces para programación de aplicaciones, es decir, las
librerías de desarrollo disponibles en
el sistema) a medida que van creciendo.
Ademas, aparte de la complejidad que van adquiriendo las
librerías de desarrollo, principal
mente debida a la imperiosa necesidad de ofrecer compatibilidad
con versiones anteriores, se añade
el hecho de que cada librería,
cada funcionalidad del sistema,
debe ser adaptada, de una forma
u otra, a cada lenguaje de programación que se quiera soportar en
el sistema.
Este es un poblema que se ha
tratado de solucionar (y se ha
solucionado en parte) dentro del
proyecto GNOME, donde la intención principal es la de ofrecer una
plataforma de desarrollo multilenguaje, moderna y completa.
Hasta ahora, como decimos, este
problema se ha solucionado en parte en el
proyecto GNOME, gracias especialmente a
desarrollo de un sistema para la definición de
las distintas API, que puede ser utilizado para
generar, casi automáticamente, soporte para
otros lenguajes de programación de esas API Otra solucion implementada ha sido el uso de
Bonobo, el sistema de componentes del pro
yecto GNOME, que permite la comunicación
entre distintas partes (procesos, componentes) independientemente del lenguaje de programación en el que estén desarrolladas.
El uso del sistema de generacion automática a partir de las API tiene el problema de
que cada característica nueva con lleva el trabajo de actualizar el sistema de generacion
automática, generar los distintos soportes
para cada lenguaje y sacar nuevas versiones
de mas librerías (en vez de una sola, la original), lo cual, como queda patente, acarrea
mucho mas trabajo del que cabría esperar.
En cuanto a Bonobo, en parte soluciona el
problema, permitiendo implementar una
determinada característica en forma de componente, y da el acceso a dicha característica
a cualquier programa que soporte Bonobo.
Pero al estar Bonobo basado en CORBA, no
tiene sentido usarlo para algunas cosas sencillas como puede ser, por ejemplo, una simple
librería de acceso al puerto serie. En ese caso, tiene mas sentido tener una
librería simple y ligera que un
componente ejecutándose en
otro proceso, por razones obvias
de rendimiento.
Así, como vemos, resulta que
el problema que resuelve o
intenta resolver Microsoft con su
.NET es el mismo que, desde el
año 1997, se intenta solucionar
dentro del proyecto GNOME.
Esta es la razón principal por la
que los desarrolladores de Mono,
encabezados por Miguel de Icaza
y Ximian, se han embarcado en
este proyecto tras haber estudiado a fondo qué es .NET y comprobar que realmente es una plataforma digna de ser estudiada.
Pero, como comentábamos en la introducción, Mono no pretende implementar
todas las partes de las que se compone .NET,
simplemente hay interés en la plataforma de
desarrollo. Mono, a día de hoy, se compone de
las siguientes partes:
—Un compilador de C#, que está siendo
desarrollado también en C#, y que ya es capaz
de compilar programas simples como el famoso «Hola Mundo» o algunos algoritmos como
el de Fibonacci, etc.
—El Sistema de Ejecución Virtual (VES),
que contendrá un compilador JIT (Just-In-Time-Compiler), el recolector de memoria y el
soporte para carga de ejecutables y para programas multihilo. Asimismo, se espera incluir
un intérprete de código intermedio (CIL), de
forma que pueda ser usado desde otros programas y permitir así que Mono sea portado a
otros sistemas, o para dejar que programas de
depuración y Analisis puedan acceder a las
entrañas de la plataforma.
—Una implementación de la librería de
clases de .NET, con algunos añadidos propios
como un puente con Bonobo, el sistema de
componentes usado en GNOME, una extensión de Windows.Forms (la jerarquía de clases
de .NET para el desarrollo de aplicaciones con
interfaz gráfica) a través de GTK# (una implementación de GTK+ en C#).
—Herramientas de desarrollo visuales
como SharpDevelop, Visual Studio.NET, etc.
—Soporte en GCC (la familia de compiladores del proyecto GNU) para la generacion
de CIL, de forma que cualquier programa
compilado con cualquiera de los distintos lenguajes soportados por GCC (C, C++, Java,
ObjectiveC) pueda ser ejecutado en el entorno
de ejecución de Mono.
Todas estas partes, especialmente la
librería de clases, se están desarrollando
basándose en todo el trabajo realizado, desde
1997, como parte del proyecto GNOME. La
reutilización de librerías ya hechas y ampliamente probadas va a permitir acelerar el desarrollo considerablemente, pues en caso con trario, empezar desde cero llevaría mucho
tiempo. Aparte, por supuesto, que el objetivo
principal de Mono es solucionar los problemas
ya mencionados del proyecto GNOME, a la
vez que se brinda a los desarrolladores/usuarios de sistemas libres, como el caso de
GNU/Linux, una nueva tecnología bastante
interesante.
Entre las cosas que se van a reutilizar del
proyecto GNOME podemos citar glib, una
librería básica para cualquier programador de
C; libxml, un analizador sintáctico de XML;
GTK+, el toolkit que usan las aplicaciones
GNOME para dibujar los distintos elementos
graficos (botones, ventanas, etc.) de la interfaz gráfica y que se utilizará para la implementación de la jerarquía Windows.Forms de
la librería de clases; GNOME-DB, que se
emplea para la implementación de las partes de acceso a bases de datos, etc.
Toda esta reutilización es básica si no se
quiere demorar el proyecto indefinidamente,
aparte de que la intención es que Mono pueda
ser usado para desarrollar aplicaciones para
GNOME, permitiendo, por supuesto, que se
introduzcan las modificaciones necesarias
para hacerlo funcionar en otros entornos como
KDE, por ejemplo, u otros sistemas operativos
como Macintosh o cualquier otro.
OTROS PROYECTOS.
Una de las cosas a destacar del proyecto
Mono es la velocidad con la que se está
uniendo mas y mas gente para ayudar en el
desarrollo, así como los proyectos que surgen
en torno a la plataforma. Así, si ya son varias
las personas que están colaborando en el
desarrollo de las partes básicas (compilador,
librería de clases, máquina virtual), han surgido algunos proyectos, como por ejemplo
GTK#, una implementación de GTK+ en C#,
que permitirá desarrollar aplicaciones GTK+
en C#.
Es notable destacar que el propio desarrollador de SharpDevelop (un entorno de desarrollo para .NET libre y que inicialmente estaba siendo desarrollado en Windows) ha encontrado en GTK# la solucion a sus
problemas con las clases
Windows.Forms de Microsoft. Esto se
debe, como él mismo explica, a que el
manejo de widgets (botones, ventanas,
cajas de texto, etc.) en Microsoft Windows es bastante enrevesado y limita
las posibilidades del programador.
En cambio, GTK+ es un toolkit sencillo de usar y
que permite el acceso y manejo al mas bajo
nivel de todos los widgets, así como la extensión mediante un sistema de clases bastante
sencillo de los distintos widgets. Los problemas de Windows.Forms y las ventajas de
GTK+ y, por consiguiente, de GTK#, le han
convencido para tomar la decisión de usar
GTK# para el desarrollo de SharpDevelop.
Este caso, como tantos otros de sobra
conocidos (Apache, Samba, KDE/GNOME,
etc.) demuestran que la comunidad de software libre no es sólo capaz de desarrollar los
mismos productos que las empresas de software propietario, sino que en ocasiones incluso es capaz de superarlos, como en este caso
GTK+, que es uno de los mejores toolkits para
desarrollo de aplicaciones con interfaz gráfica
que existen en la actualidad, y que supera de
lejos al toolkit usado para desarrollar aplicaciones en Microsoft Windows.
Otros proyectos relacionados con Mono se
están comentando abiertamente en la lista de
correo de Mono (lista, por cierta, abierta a
todo el mundo), aunque aún ninguno ha entrado en la fase de desarrollo, mas bien
están en la fase de Analisis y estudio de lo que se va a hacer. Entre
ellos destaca la implementación de
las clases CPAN (un archivo de
módulos para Perl realmente
impresionante, con centenares de
módulos para distintas cosas como
acceso a BBDD, redes, etc.) en la librería de clases de Mono.
Todos estos proyectos que están naciendo
alrededor de Mono demuestran el interés que
se ha tomado la comunidad de software libre
en este proyecto, al ver la cantidad de ventajas que puede traer esta plataforma a los sistemas operativos libres. Es de destacar también que incluso programadores que viene
del mundo Windows se están uniendo al proyecto Mono, demostrando una vez mas que el
desarrollo de software abierto y libre puede
obtener resultados realmente impresionantes
mucho mejores, en algunas ocasiones, a su
equivalentes cerrados.
Con todo lo expuesto en este artículo hemos
pretendido dar a conocer las intenciones de
Mono, un proyecto libre y abierto que, si tiene exito, nos traerá a los desarrolladores de soft
ware libre una plataforma de desarrollo realmente potente, a la vez que seguramente ayu
dará a que muchos programadores de
sistemas propietarios como Microsoft Windows se pasen, sin ningún esfuerzo, a sistemas operativos libres, pues podrian, gracias a
la portabilidad de las aplicaciones .NET, ejecutar sus aplicaciones desarrolladas para
.NET tanto en Windows como en cualquier
otro sistema operativo en el que funcione
Mono.
Esperamos que también sirva para que
mas desarrolladores se unan al proyecto...
|