<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" >

<article id="modelo" lang="es">
<!-- $Id: mono-hispa.sgml,v 1.1 2001/11/19 20:49:05 villate Exp $ -->
<artheader>

<title>Proyecto MONO</title>

<author>
	<firstname>Juantomás</firstname>
    <surname>García</surname>
    <affiliation>
	<orgname>GNOME Hispano</orgname>
	<address><email>juantomas@lared.es</email></address>
    </affiliation>
</author>

<date>19 de noviembre de 2001</date>

<abstract>
<para>
¿Qué es el proyecto MONO?. Estado actual del proyecto. ¿Por qué es interesante
para el software libre disponer de la tecnología relacionado con el proyecto
MONO?
</para>
</abstract>

</artheader>

<sect1>
<title>Introducción.</title>

<para>
Si analizamos el mundo del desarrollo de software descubriremos que
el estado actual es bastante mejorable: la tecnología que estamos utilizando
es la misma que hace dos décadas y cada vez se esta complicando más,
realmente no se ha evolucionado demasiado, y, lo que es peor, la curva de 
aprendizaje para los nuevos desarrolladores es más dura.
</para>

<para>
Por otra parte la complejidad de los sistemas operativos y 
el número de versiones que coexisten concurrentemente es mayor. 
Ante esta situación parece sensato realizar una revisión de las herramientas
actuales y la arquitectura de desarrollo. 
</para>

<para>
Y aquí es donde entra el proyecto MONO. El proyecto tiene como objetivo 
crear una implementación libre de algunas herramientas y parte de la
arquitectura de .NET . La arquitectura .NET ha sido propuesta por Microsoft.
Parte de esta tecnología se basa en un estándar propuesto a la ECMA y lo
interesante es que tiene ideas muy buenas. Realmente son tan buenas que el mundo
del software libre debe poder disponer de ellas sin que tengamos que esperar
a que Microsoft lo haga. Este es el objetivo del proyecto MONO.
</para>

<para>
Actualmente la reutilización de software no es óptima. Aunque el modelo 
de software libre nos permite reutilizar el código con mucha facilidad. 
El precio en horas o en dificultad de usar código en nuestros proyectos
es poco óptimo y esto se debe mejorar. Disponer una biblioteca de funciones
en forma de librería dinámica esta bien pero no soluciona el problema.
</para>

<para>
La interoperabilidad entre lenguajes no es buena. Una de las bendiciones del
software libre es la cantidad de posibilidades que tenemos a la hora de poder
seleccionar un lenguaje de desarrollo. La mala noticia es que aunque
prácticamente todos disponen de la posibilidad de interoperar con otros 
lenguajes, ésta no es fácil, ni sencilla.
</para>

<para>
Desarrollar aplicaciones no es fácil. Con el modelo actual de desarrollo,
el diseño y la creación de proyectos a partir de un determinado tamaño de
proyecto se complica demasiado. Lo ideal es contar con un entorno que nos 
permita desarrollar prototipos, reutilizar código y sobre todo hacer 
aplicaciones sencillas sin un esfuerzo significativo. Un entorno 
parecido al "entorno de programación" del Visual Basic, pero eliminando 
las carencias que tiene.
</para>

<para>
Código gestionado (Managed Code). Mayoritariamente los lenguajes utilizados
en la actualidad son procedurales y no gestionados. Las ventajas del código
gestionado: GC (Recolector de Memoria ), Manejo de Excepciones, etc, permiten 
que se mejore la calidad y eficacia de los proyectos.

</para>

<para>
En esta ponencia se va a exponer de una manera global cuales son los 
objetivos del proyecto, los componentes e ideas de .NET que son más
interesantes. 
</para>

</sect1>

<sect1 id="primera-sec">
<title>Que es proyecto MONO?</title>

<para>
El proyecto MONO ha sido propuesto por Miguel de Icaza para 
crear un entorno de desarrollo y producción utilizando alguna
de las tecnologías propuestas en la arquitectura .NET.
</para>

<para>
Básicamente el proyecto MONO ha comenzando con un compilador
de C#. La idea inicial es explorar hasta que punto el lenguaje
C# y la arquitectura propuesta para su máquina virtual (VM) puede ser una opción
que mejore las condiciones de producción de los desarrolladores 
de software libre. 
</para>

<para> 
Como lenguaje de programación C# recuerda mucho al lenguaje JAVA. Hay
varios factores que han hecho que C# genere un interés en la comunidad de
desarrolladores. La primera es que las especificaciones del lenguaje están
siendo estandarizadas por la ECMA desde el principio. Esta ya es un hecho
excepcional viniendo de Microsoft.
</para>

<para>
Otra parte interesante de usar C# es el conjunto de clases
que lleva asociado. La idea es que este conjunto de clases permita realizar
cualquier tipo de programación. La parte innovadora es que estas clases,
y en general el uso de librerías, esta también normalizado de modo que estas
pueden ser utilizadas por otros lenguajes. Para que estas librerías
puedan ser utilizadas estos lenguajes tienen que tener compiladores que 
generen CLI.
</para>
<!-- FIXME: Qué es CLI?? Command Line Interface? jfs -->

<para>
Además C# tiene una gestión de memoria y recolección de memoria no 
usada que le hace muy interesante. Realmente esta opción esta implementada
en la máquina virtual que ejecuta el código CLI generado.
</para>

<para>
El compilador de C# del proyecto MONO esta siendo desarrollado en C#. 
De las múltiples alternativas para realizar el compilador se ha elegido
ésta por razones "educativas". Desarrollar un compilador es un ejercicio
de programación complicado y hacerlo en el lenguaje que se esté implementando
hace que se descubra todo el potencial que tiene dicho lenguaje.
</para>

<para>
Existen otros proyectos libres interesados en la creación de un compilador
de C#, pero no ha habido una convergencia por disparidad de criterios o
herramientas utilizadas. 
</para>

<para>
Aunque C# va a ser el primer lenguaje soportado por el compilador del proyecto
MONO, ya se están empezando a implementar otros lenguajes como VB Object. No
esta previsto de momento el soporte de otros lenguajes en el compilador pero
la arquitectura actual de MONO permite con bastante facilidad que se puedan
integrar otros lenguajes gestionados como Python .NET o Perl .NET .
</para>



</sect1>
<sect1 id="segunda-sec">
<title>Estado del proyecto MONO.</title>

<para>
En la primera fase del proyecto MONO se está trabajando en tres 
áreas:
</para>

<variablelist>
      <varlistentry>
              <term>Compilador C#.</term>
<listitem>
<para>Esta ha sido la primera fase del proyecto. Solo existe un 
compilador completo de C# actualmente es el desarrollado por MS para Windows. 
El compilador de C# esta a un 50% y esta desarrollado en C#. La idea 
era hacerlo en C# para aprender a programar y conocer al 100% el 
lenguaje. Actualmente parsea el código y es capaz de verificar la 
sintaxis y generar el 95% de los arboles de código. La idea es 
que genere CLI y código C. Cuando este terminado se compilara con 
el compilador de C# y generara su propio código fuente en CLI y C
haciéndolo transportable a otros sistemas. 
</para>

<para>
Actualmente esta compilando programas sencillos estilo: impresión
de "hello world", cálculo de series de fibonucci o creación de 
una ventana basada en las GTK. No solo compila estos códigos 
sino que además genera ejecutables que son correctamente interpretados
por el JIT de MONO y el de MS.
</para>
</listitem>
</varlistentry>

      <varlistentry>
              <term>Clase de Librerías C#.</term>
<listitem>
<para>
Esta es la base fundamental del lenguaje 
C#. Realmente C# como lenguaje no es más que otro lenguaje. Lo 
que hace realmente potente a C# y todos los lenguajes que utilicen
la arquitectura .NET son las bibliotecas de clases que pueden 
ser utilizadas por cualquier lenguajes. Dentro del proyecto MONO 
y solo en unos meses ya están implementadas el 50% de las clases.
</para>
</listitem>
</varlistentry>

      <varlistentry>
              <term>Máquina Virtual.</term>
<listitem>
<para>
La máquina virtual que ejecute CLI es la parte
clave del proyecto. Si se consigue que funcione óptimamente
y que cualquier lenguaje pueda generar CLI podemos estar ante la 
solución a los problemas de portabilidad e integración entre 
lenguajes.
</para>

<para>
En el diseño del CLR se esta teniendo en cuenta la portabilidad desde
el comienzo del diseño. Esto nos permitirá que funcione bajo otros sistemas
operativos sin demasiados esfuerzos.
</para>
</listitem>
</varlistentry>
</variablelist>

</sect1>

<sect1 id="tercera-sec">
<title>¿Por qué es interesante el proyecto MONO?</title>
<para>
El proyecto MONO pretende convertirse en la opción libre 
a la arquitectura .NET de Microsoft. Pero esto genera muchas
cuestiones en la comunidad. ¿Debe existir una opción libre 
que soporte las virtudes de .NET? ¿Estamos apoyando a Microsoft
y su iniciativa? ¿Se están perdiendo recursos implementando 
MONO? ¿Volverá Microsoft a utilizar la estrategia de primero ayudar
y luego ahogar a sus acompañantes de viaje?
</para>

<para>
Mi punto de vista sobre el proyecto es que debemos promocionarlo.
Hay demasiadas buenas ideas que no se deben desaprovechar aunque 
vengan del departamento de ingeniería de Microsoft. 
</para>

<para>
Microsoft no va a solucionar nuestros problemas, ni mejorar las condiciones
de programación y desarrollo del software libre. Luego haga lo que haga
solo las iniciativas libres nos van a beneficiar con toda seguridad.
</para>


</sect1>

<sect1 id="cuarta-sec">
<title>Referencias e Información relacionada con el Proyecto</title>

<orderedlist>

<listitem>
	<para>
	<emphasis>Proyecto MONO</emphasis> 
	<ulink url="http://www.go-mono.com">http://www.go-mono.com</ulink>
	</para>
</listitem>

<listitem>
	<para>
	<emphasis>Proyecto MONO FAQ</emphasis> 
	<ulink
	url="http://www.go-mono.com/faq.html">http://www.go-mono.com/faq.html</ulink>
	</para>
</listitem>


<listitem>
	<para>
	<emphasis>Documentación de la ECMA en INTEL.</emphasis> 
	<ulink url="http://developer.intel.com/software/idap/ecma">http://developer.intel.com/software/idap/ecma</ulink>
	</para>
</listitem>

<listitem>
	<para>
	<emphasis>Documentación de las clases en MSDN.</emphasis> 
	<ulink url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/cpref_start.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/cpref_start.asp</ulink>
	</para>
</listitem>


</orderedlist>
								        
</sect1>
</article>
