<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN">
<book lang="es">
	<bookinfo>
		<date>29 de Marzo de 2005</date>
		<title>Faqs de Mono</title>
		<subtitle>Traducción al Español</subtitle>

		<authorgroup>
		<author>
			<firstname>Ezequiel</firstname>
			<surname>Foncubierta</surname>
         		<affiliation>
		        	<orgname>Asociación de Gaditanos Linuxeros</orgname>
		        	<address>
		        	<email>efoncu@agali.org</email>
		        	</address>
			</affiliation>
		</author>
		</authorgroup>

		<abstract>
		<para>Esta es la traducción de las Faqs oficiales de Mono que se pueden encontrar en <ulink url="http://www.mono-project.com/">http://www.mono-project.com/</ulink>. La mayoría de los puntos correspondientes a "General-Básicas" y "General-Mono y Novell", estaban traducidos anteriormente de la antigua Faq por: Fabian Seoane (fabian@fseoane.net), Eduardo García (kiwnix@yahoo.es) y Alejandro Sánchez (raciel@x0und.net). El resto lo he traducido a través de la Faq de Mono traducida al Portugués por la gente de <ulink url="http://www.simios.org">http://www.simios.org</ulink>, debido a mi facilidad con el Portugués. Si encontrais alguna incoherencia, o error gramatical, ruego me lo comuniqueis a mi E-Mail.</para>
		</abstract>
	</bookinfo>
	<chapter>
	<title>General</title>

		<sect1>
		<title>Básicas</title>

			<sect2>
			<title> ¿Qué es Mono exactamente?</title>
			<para>El proyecto Mono es una iniciativa abierta de desarrollo patrocinada por Novell que está trabajando para desarrollar una versión Open Source en un ambiente UNIX de la plataforma de desarrollo Microsoft .NET. Su objetivo es habilitar a los desarrolladores de UNIX a contruir y distribuir aplicaciones .NET multiplataforma. El proyecto implementará varias tecnologías desenvolvidas por Microsoft, que fueron enviadas al ECM para su estandarización. El proyecto Mono, muestra también interes en el desarrollo de componentes en C#, bibliotecas y frameworks. Hoy en dia, Mono no está limitado a la implementación de un Framework .NET, sino que también tiene otros componente. Alguno de esos componentes son desarrollados por el equipo de Mono, y algunos otros lo hemos incorporado a partir de otros esfuerzos de código abierto. Los más importantes son:</para>

			<itemizedlist>

				<listitem>
				<para><ulink url="http://remoting-corba.sourceforge.net/">Remoting.CORBA</ulink>: Una implementación de CORBA para Mono</para>
				</listitem>

				<listitem>
				<para>Ginzu: Una implementación de <ulink url="http://www.zeroc.com/">ICE</ulink> implementada encima de Remoting</para>
				</listitem>

				<listitem>
				<para><ulink url="http://gtk-sharp.sf.net/">Gtk#</ulink>: Recubrimento en C# para la librería Gtk+</para>
				</listitem>

				<listitem>
				<para><ulink url="http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx">#ZipLib</ulink>: Una librería para manipular varios tipos de archivos comprimidos (Zip y Tar).</para>
				</listitem>

				<listitem>
				<para>GlGen (disponibles desde el CVS de Mono): Recubrimiento para OpenGL.</para>
				</listitem>

				<listitem>
				<para>Mono.LDAP: acceso a LDAP para aplicaciones .NET</para>
				</listitem>

				<listitem>
				<para>Mono.Data: proveemos de acceso para bases de datos Postgress, MySql, DB2, SqlLite, Tds, y Oracle.</para>
				</listitem>

				<listitem>
				<para>Mono.Cairo: Recubriemientos para el motor de renderizado <ulink url="http://www.cairographics.org/">Cairo</ulink> (Nuestro System.Drawing está implementado encima de ésto).</para>
				</listitem>

				<listitem>
				<para>Mono.Posix: Recubriemiento para escribir aplicaciones POSIX usando C#</para>
				</listitem>

				<listitem>
				<para>Mono.Http: Soporte para la creación de servidores http a la medida o empotrados, así como herramientas comunes relacionadas con el protocolo HTTP.</para>
				</listitem>

			</itemizedlist>
			</sect2>

			<sect2>
			<title>¿Qué diferencias existen entre .NET y el proyecto Mono?</title>
			<para>La iniciativa .NET es un esfuerzo de la compañía Microsoft que tiene limites poco claros, una parte de ese proyecto, es una arquitectura de desarrollo multiplataforma, Mono es una implementación de este entorno de desarrollo, pero no es una implementación de nada relacionado con la iniciativa .NET, por ejemplo Mono no es una implementación de passport, software como servicio (software-as-service).</para>
			</sect2>

			<sect2>
			<title>¿Qué tecnologías están incluidas en Mono?</title>
			<para>Mono contiene un numero de componentes útiles para implementar nuevo software:</para>

			<itemizedlist>

				<listitem>
				<para>Una maquina virtual de lenguaje común de infraestructura (CLI) que contiene un cargador de clases, un Compilador en tiempo de ejecución (JIT), y unas rutinas de recolección de memoria.</para>
				</listitem>

				<listitem>
				<para>Una librería de clases que puede funcionar en cualquier lenguaje que funcione en el CLR (Common Language Runtime).</para>
				</listitem>

				<listitem>
				<para>Un compilador para el lenguaje C#. En el futuro, podríamos trabajar en compiladores que generasen CIL (lenguaje intermedio) para el CLR (Entorno de ejecución del lenguaje común). </para>
				</listitem>

			</itemizedlist>

			<para>Windows tiene compiladores que compilan para la maquina virtual un <ulink url="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">número de lenguajes</ulink> tales como: C++ gestionado (managed), Java Script, Eiffel, Component Pascal,APL, Cobol, Oberon, Perl, Python, Scheme, Smalltalk, Standard ML, Haskell, Mercury y Oberon.</para>

			<para>El CLR y el Sistema de tipos común (CTS) permiten que la aplicación y las bibliotecas sean escritas en una amplia variedad de lenguajes diferentes que compilen para "bytecode".</para>

			<para>Esto significa por ejemplo, que si defines una clase que haga una manipulación algebráica en C#, esa clase puede ser reutilizada en cualquier lenguaje que soporte el "CLI". Puede crear una clase en C#, una subclase en C++ y instanciar esa clase en un programa en Eiffel.</para>

			<para>Un sistema de objetos, sistema de hilos, bibliotecas de clases y sistema recolector de memoria únicos pueden ser compartidos por todos estos lenguajes.</para>
			</sect2>

			<sect2>
			<title>¿Dónde puedo encontrar especificaciones para toda esta tecnología?</title>
			<para>C# <ulink url="http://www.ecma-international.org/publications/standards/Ecma-334.htm">http://www.ecma-international.org/publications/standards/ECMA-334.HTM</ulink></para>

			<para>CLI <ulink url="http://www.ecma-international.org/publications/standards/Ecma-335.htm">http://www.ecma-international.org/publications/standards/ECMA-335.HTM</ulink></para>
			</sect2>

			<sect2>
			<title>¿Se van a implementar las bibliotecas de clases del entorno de trabajo .NET?</title>
			<para>Si, se están implementando las APIs de las bibliotecas de clases de la plataforma .NET.</para>
			</sect2>

			<sect2>
			<title>¿Se va a ofrecer un conjunto de clases que sea compatible con las de ECMA?</title>
			<para>Cada cierto tiempo se hará, pero el objetivo actual es la interoperabilidad con el entorno de desarrollo de Microsoft, pero también se ofrecerá un conjunto de bibliotecas compatibles con ECMA.</para>
			</sect2>

			<sect2>
			<title>¿Qué significa el nombre "Mono"?</title>
			<para>Mono es la palabra "monkey" en español. A nosotros nos gustan los monkeys.</para>
			</sect2>

			<sect2>
			<title>¿Se puede utilizar Mono?</title>
			<para>El motor de ejecución funciona en varias plataformas, y se está dando soporte a la compilación JIT ( justo-a-tiempo ) y AOT ( antes de tiempo ) en máquinas Intel x86 ( y pronto en PowerPC ).</para>

			<para>La librería de clases están ya lo suficientemente maduras como para ejecutar aplicaciones reales: nuestro compilador de C#, ASP.NET y aplicaciones basadas en GTK#.</para>
			</sect2>

			<sect2>
			<title>¿Cuando se lanzará Mono</title>
			<para>Vea el <ulink url="http://www.mono-project.com/Mono_Project_Roadmap">Mono Roadmap</ulink> para más detalles sobre los planes de lanzamiento.</para>
			</sect2>

			<sect2>
			<title>¿Como puedo ayudar?</title>
			<para>Consulta la sección de <ulink url="http://www.mono-project.com/Contributing">"Contributing"</ulink> el la pagina web de Mono: Seccion de contribuciones.</para>
			</sect2>

			<sect2>
			<title>¿No estais copiando el trabajo de otros?</title>
			<para>Estamos interesados en probar las mejores herramientas para que los programadores desarrollen aplicaciones para sistemas operativos libre. También queremos ayudar en la interoperabilidad que irá a permitir que esos sistemas se ajusten con otros estandar.</para>

<para>Para más información lea el <ulink url="http://www.go-mono.com/rationale.html">White Paper</ulink> del proyecto Mono.</para>
			</sect2>

			<sect2>
			<title>Miguel dijo una vez que Mono estaba siendo implementado en COBOL. ¿Eso es verdad?</title>
			<para>No. Era una broma.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y Novell</title>

			<sect2>
			<title>¿Por qué Novell esta trabajando en .NET?</title>
			<para>Novell está interesada en dotar a la comunidad de software con las mejores herramientas de trabajo para desarrollar aplicaciones para el Sistema Operativo Libre. Para mas información lee la página de <ulink url="http://www.mono-project.com/Mono_Rationale">definicion</ulink> del proyecto.</para>
			</sect2>

			<sect2>
			<title>¿Es Novell capaz de adoptar un proyecto de esta dimensión?</title>
			<para>Por supuesto que no. Novell patrocina el proyecto mono, pero la única forma de implementar algo de este tamaño es cuando toda la Comunidad de Software Libre se involucre. Visita la pagina de contribuciones <ulink url="http://www.mono-project.com/Contributing">"Contribuciones"</ulink> si quieres ayudar.</para>
			</sect2>

			<sect2>
			<title>¿En qué partes está trabajando Novell?</title>
			<para>Novell invertirá la mayor parte de sus recursos en hacer funcionar partes criticas del entorno de desarrollo y de ejecución. Una vez el proyecto este en un estado que sea útil para el mundo real, habrá alcanzado un numero suficiente de desarrolladores para mejorarlo.</para>
			</sect2>

			<sect2>
			<title>¿Ofrecerá Novell Mono de forma comercial?</title>
			<para>Cuando Mono esté listo para ser distribuido, Ximian ofrecerá soporte y servicios comerciales para mono. Los componentes de mono también se pueden licenciar de forma comercial. Para detalles sobre la licencia, contacte <email>mono-licensing@ximian.com</email>.</para>
			</sect2>

			<sect2>
			<title>¿Ofrece Novell servicios de consultoría sobre los servicios derivados de Mono?</title>
			<para>Sí, Novell ofrece servicios de consultoría sobre servicios derivados de mono para hacerlo acorde a tus necesidades. Se puede portar en entorno de ejecución, personalizarlo, trabajar en clases específicas o modificar el código para adaptarlo a tus necesidades particulares.</para>
			</sect2>

			<sect2>
			<title>¿Cuando estará mono listo?</title>
			<para>Mono será ofrecido en varias etapas a medida que el proyecto madure. Habrá gente que solo requiera un subconjunto de tecnológicas, para estos, el desarrollo estará completo antes. Puede mirar el <ulink url="http://www.mono-project.com/Mono_Project_Roadmap">calendario</ulink> previsto.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y Gnome</title>

			<sect2>
			<title>¿Cómo está relacionado Mono con Gnome?</title>
			<para>De varias formas. Este proyecto nació de la necesidad de probar herramientas mejores para la comunidad Gnome, y usará componentes desarrollados para Gnome cuando estos estén disponibles. Por ejemplo, planeamos utilizar Gtk+ y Libart para implementar Winforms y la API Drawing2D, y estamos considerando el soporte para GObject.</para>

			<para>Los miembros del equipo Mono trabajan intensamente en el proyecto Gtk#: un binding de las bibliotecas de clase de Gnome para .NET y Mono.</para>
			</sect2>

			<sect2>
			<title>¿La fundación Gnome o el equipo de Gnome adoptarán Mono?</title>
			<para>Mono es muy nuevo para ser adoptado por esos grupos. Esperamos que las herramientas que desarrollemos sean adoptadas por los programadores de software libre, incluyendo aquí los miembros de la fundación Gnome y el proyecto Gnome en general.</para>
			</sect2>

			<sect2>
			<title>¿Los programadores de Gnome se deben de cambiar ahora para Mono?</title>
			<para>Si. Nosotros aseguramos que Mono 1.0 estará pronto para ser usado como plataforma de desarrollo de aplicaciones para el escritorio Gnome. Mono incluye <ulink url="http://www.mono-project.com/using/gtk-sharp.html">Gtk#</ulink>, un "binding" de Gtk+ y de las bibliotecas de Gnome para la plataforma .NET. Con eso aseguramos que es posible obtener una gran productividad en la creación de aplicaciones gráficas, comparandose especialmente al uso de Gtk+ o de "Java Swing".</para>
			</sect2>

			<sect2>
			<title>¿Mono será compatible con los componentes de Bonobo?</title>
			<para>Si, proveeremos un conjunto de clases para implementar y usar componentes Bonobo a partir de Mono. Mono te deberá permitir escribir componentes Bonobo más facilmente, así como .NET en Windows te permite exportar componentes .NET para COM.</para>
			</sect2>

			<sect2>
			<title>¿Mono depende de Gnome?</title>
			<para>No, Mono no depende de Gnome. Usamos algunos paquetes producidos por el equipo Gnome como la biblioteca "glib". También usamos otras bibliotecas Open Source de terceros como Cairo e ICU.</para>
			</sect2>

			<sect2>
			<title>Pero, ¿Yo podré desarrollar aplicaciones Gnome?</title>
			<para>Si, las personas podrán escribir aplicaciones Gnome usando Mono.</para>
			</sect2>

			<sect2>
			<title>¿Existen bindings de C# para Gnome?</title>
			<para>Si, el proyecto <ulink url="http://gtk-sharp.sf.net/">Gtk#</ulink> provee "bindings" para Gtk+, Gdk, Atk, libgnome, libgnomecanvas y libgnomeui. Otras bibliotecas del framework de Gnome serán añadidas a medida que sean necesarias.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Aplicaciones GUI</title>

			<sect2>
			<title>¿Mono permitirá la creación de aplicaciones gráficas?</title>
			<para>Si, podrá desarrollar aplicaciones gráficas. En realidad, éste es nuestro objetivo principal. Hoy puedes utilizar Gtk# o #WT para desarrolla aplicaciones gráficas, y el soporte para Windows.Forms está en camino.</para>
			</sect2>

			<sect2>
			<title>¿Gtk# se podrá ejecutar en Windows?</title>
			<para>Si, las aplicaciones compiladas usando Gtk# podrán funcionar en Windows También.

Las bibliotecas de Mozilla y de Gnome no serán soportadas actualmente y eso limita la portabilidad de sus aplicaciones. Ese problema será resuelto en el futuro.</para>
			</sect2>

			<sect2>
			<title>¿Cual es la diferencia entre Gtk# y las System.Windows.Forms?</title>
			<para>Gtk# es un conjunto de bindings para el toolkit Gtk+ para C# (y otros lenguajes CIL), que se integran nativamente con el escritorio Gnome. System.Windows.Forms es una API definida por Microsoft para la construcción de aplicaciones GUI.</para>
			</sect2>

			<sect2>
			<title>¿Qué estais usando para implementar Windows.Forms?</title>
			<para>Windows.Forms está siendo implementado en código C# y usando System.Drawing para hacer la mayor parte de las tareas.</para>

			<para>Para más detalles vea <ulink url="http://www.mono-project.com/WinForms">"Winforms Roadmap"</ulink>.</para>

<para>Un pequeño driver es necesario para el soporte en algunos sistemas operativos. Actualmente tenemos drivers para X Window y  para Windows. El modelo de drivers permite que el porte para otros sistemas sea hecho de forma simple.</para>
			</sect2>

			<sect2>
			<title>¿Por qué no implementar Syste.Windows.Forms con base en Gtk# o Qt#?</title>
			<para>Compatibilidad.</para>

			<para>Aunque sea posible ejecutar aplicaciones Windows.Forms simples con el backend basado en Gtk# de Windows.Forms, dificilmente esa implementación algún dia implementará todo lo que es necesario para una compatibilidad completa con Windows.Forms. La razón es por que Windows.Forms no es un toolkit completo, y para corregir éste problema un poco de la función interna de Win32 es expuesta al programador a través de la exposición del manipulador de mensajes de Windows (WndProc). Cualquier control puede sobreescribir éste métido. Más adelante se desarrollará generalmente P/Invoke en Win32 para conseguir la funcionalidad que no fue incluida.</para>

			<para>Para adquitir la compatibilidad total, tendriamos que emular esto, y eso puede llevar mucho tiempo. Para más información consulte la <ulink url="http://www.mono-project.com/Windows_Forms">página de winforms</ulink></para>
			</sect2>

			<sect2>
			<title>Las aplicaciones Wine no se parecen a otras aplicaciones nativas. ¿Qué hareis al respecto?</title>
			<para>Ya tenemos algunos parches en nuestra versión de Windows.Forms que hacen que Wine utilice las configuraciones del nucleo y fuentes de su escritorio, lo que aumenta mucho la integración. En el futuro, continuaremos mejorando ese escenario de interoperabilidades.</para>
			</sect2>

			<sect2>
			<title>¿Podré ejecutar mis "smart clients" en sistemas "powered by Mono"?</title>
			<para>Si sus aplicaciones fueran 100% .NET y no hicieran uso de "P/Invoke" en llamadas para las funciones de la API Win32, sus aplicaciones "smart client" rodarán en la plataforma Mono.</para>
			</sect2>

			<sect2>
			<title>¿Donde puedo saber más sobre Gtk#?</title>
			<para>Este <ulink url="http://gtk-sharp.sourceforge.net/">enlace</ulink> lo llevará a la página principal del proyecto.</para>
			</sect2>

			<sect2>
			<title>¿Qué puedo hacer con Gtk#?</title>
			<para>Gtk# se está volviendo bastante usable y podrá crear aplicaciones y applets como aquellos que ve en el ambiente Gnome. Es facil de instalar, por lo que vale la pena probarlo.</para>
			</sect2>

			<sect2>
			<title>¿Cómo puedo compilar mi HelloWorld.cs que usa Gtk#?</title>
			<para>Intente: <command>mcs -r:gtk-sharp HelloWorld.cs</command></para>
			</sect2>

			<sect2>
			<title>¿Existe alguna forma de conectar un DataAdapter a algunos controles de Gtk#?</title>
			<para>Existe un archivo ejemplo llamado "DBClient" en gtk-sharp/samples que debes de consultar. Es un programa simple ten Gtk# que añade/actualiza/elimina información en una base de datos PostgreSql. Cuando tengamos los nuevos widgets table/tree, estoy seguro de que alguien escribirá un adaptador para System.Data (en Gtk2 los widgets tree/list son escritos usando view/model, entonces apenas precisará escribir un modle que mapee en la base de datos). Podrá dar una ojeada en gtk-sharp/sample/DbClient, donde hay una aplicación Gtk# que usa System.Data. Aunque no utilice DataAdapter, pero si DataReader.</para>
			</sect2>

			<sect2>
			<title>¿Teneis alguna estimación de cuando será lanzado Windows.Forms?</title>
			<para>Aproximadamente el segundo semestre de 2005.</para>
			</sect2>

			<sect2>
			<title>¿Teneis una tabla comparativa sobre los varios toolkits que ofreceis?</title>
			<para>Existe un documento explicando esa duda en: <ulink url="http://primates.ximian.com/~miguel/toolkits.html">http://primates.ximian.com/~miguel/toolkits.html</ulink></para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y Microsoft</title>

			<sect2>
			<title>¿Microsoft está ayudando a Novell en éste proyecto?</title>
			<para>No hay ninguna cooperación en ese sentido entre Novell y Microsoft, así mismo los ingenieros que trabajan en .NET o ECMA están siendo muy amigables, respondiendo nuestras cuestiones o aclarando dudas sobre las especificaciones. Microsoft está interesado en otroas implementaciones de .NET y están dispuestos a ayudar creando las especificaciones en ECMA lo más exacta posible. Novell ha participado en los encuentros del comité ECMA para C# y CLI.</para>
			</sect2>

			<sect2>
			<title>¿Microsoft o Corel está pagando a Microsoft para ésto?</title>
			<para>No.</para>
			</sect2>

			<sect2>
			<title>¿Temeis que Microsoft cambie las especificaciones y vuelva a Mono inútil?</title>
			<para>No. Microsoft ha probado con el CLI y el lenguage C# que era posible crear una poderosa fundación para que muchos lenguages pudiesen interoperar. Ese conocimiento quedará para siempre.</para>

<para>Igual que acontecen cambios no documentados en la plataforma, hoy la plataforma existente tiene valir por si sola.</para>
			</sect2>

			<sect2>
			<title>¿Estáis escribiendo Mono a partir de las especificaciones del ECMA?</title>
			<para>Si, estamos escribiendo Mono a partir de las especificaciones del ECMA y de los materiales impresos publicados sobre .NET.</para>
			</sect2>

			<sect2>
			<title>Si mis aplicaciones usan Mono. ¿Tendría que pagar por el servicio?</title>
			<para>No. Mono no está relacionado con la iniciativa software-as-a-service de Microsoft.</para>
			</sect2>

			<sect2>
			<title>¿Está relacionado el proyecto Mono con los esfuerzos Hailstorm de Microsoft? ¿Está Novell endorando Hailstorm? </title>
			<para>No. El proyecto Mono tiene como objetivo proveer un conjunto de herramientas compatibles para la plataforma de desarrollo .NET de Microsoft. No está direccionado de cualquier otra formar a endosar el sistema de asignatura única Microsoft Hailstorm basado en Passport, que es parte de Windows XP y otros servicios.</para>
			</sect2>

			<sect2>
			<title>¿Las aplicaciones de Mono dependen de Microsoft Passport?</title>
			<para>No. MS Passport no es necesario para ejecutar aplicaciones compatibles con .NET producidas con herramientas de Mono.  la única cosa necesaria es un compilador Just-in-time.</para>
			</sect2>

			<sect2>
			<title>Microsoft va a lanzar un port de la plataforma .NET con una "Licencia Compartida", ¿Por qué me debería de preocupar con otra cosa?</title>
			<para>La implementación "Código Compartido" será cara y sus usos serán muy restringidos, especialmente para uso comercial. Estamos trabajando en una implementación que garantizará un gran número de derechos importantes para sus usuarios: uso para cualquier propósito, redistribución, modificación y redistribución de las modificaciones. Esto es lo que se llama <ulink url="http://www.gnu.org/philosophy/free-sw.html">software libre</ulink>.</para>
			</sect2>

			<sect2>
			<title>¿Es Mono una implementación libre de Passport?</title>
			<para>No. Mono es apenas un runtime, un compilador y un conjunto de bibliotecas de clase.</para>
			</sect2>

			<sect2>
			<title>¿La clase System.Web.Security.PassportIdentity significa que mi software irá a depender de Passport?</title>
			<para>No. Las aplicaciones pueden usar esa API para contactar con un sitio que use Passport, pero no están obligadas a hacerlo.</para>

<para>Su su aplicación no usa Passport, no necesitará Passport.</para>
			</sect2>

			<sect2>
			<title>¿Cuando Mono funcione sobre linux estará Passport disponible para Linux?</title>
			<para>No. Entretanto, el toolkit de Passport para servidores web basados en Linux está disponible por parte de Microsoft.</para>
			</sect2>

			<sect2>
			<title>¿Mono permitirá ejecutar Microsoft Office en Linux?</title>
			<para>No. Microsoft Office es una aplicación de Windows. Para aprender más sobre la ejecución de aplicaciones Windows en sistemas Intel UNIX, tome como referencia el <ulink url="http://www.winehq.com/">proyecto Wine</ulink>.</para>
			</sect2>

			<sect2>
			<title>¿Mono puede ejecutar WebMatrix?</title>
			<para>No. Eso requiere soporte para System.Windows.Form, que actualmente no está implementado.</para>
			</sect2>

			<sect2>
			<title>¿Mono tendrá en el lado del servidor un framework similar a Passport para XSP bien como clases clientes?</title>
			<para>No, pero la API en el lado del cliente para autentificación no es un problema. Tenemos muchas otras APIs para la autentificación, como las APIs Liberty Alliance. El problema son las personas en el lado del servidor Web que utilizarán Passport para la autentificación.</para>
			</sect2>
		</sect1>
	</chapter>

	<chapter>
	<title>Dudas técnicas</title>

		<sect1>
		<title>Plataformas de Mono</title>

			<sect2>
			<title>¿En qué sistemas operativos puede ser ejecutado Mono?</title>
			<para>Mono se ejecuta en sistemas Linux, UNIX y Windows.</para>
			</sect2>

			<sect2>
			<title>¿Puedo ejecutar aplicaciones mono sin usar "mono program.exe"?</title>
			<para>Si, es posible en sistemas Linux usando algo como:</para>

<programlisting>
if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
     /sbin/modprobe binfmt_misc mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
fi 
if [ -e /proc/sys/fs/binfmt_misc/register ]; then
     echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register
else
     echo "No binfmt_misc support" exit 1
fi
</programlisting>
			</sect2>

			<sect2>
			<title>¿Cuales son las arquitecturas que soporta Mono?</title>
			<para>Mono, hoy en dia, viene con un compilador Just-in-Time para x86, PowerPC, s390 y sistemas basados en SPARC. El compilador es testeado regularmente en Linux, FreeBSD y en Windows (con nucleo XP/NT).</para>
			<para>Existe también un interprete, que es más lento y funciona en las arquitecturas x86, s3902, SPARC, HPPA, StrongARM y PowerPC.</para>
			</sect2>

			<sect2>
			<title>¿Puede funcionar Mono en las ediciones 9x o Me de Windows?</title>
			<para>Mono requiere versiones Unicode de las API Win32 para funcionar, y apenas un subconjunto de las funciones *W son soportadas en Win9x.</para>
			<para>Existe "Microsoft Layer for Unicode" que provee una implementación de esas APIs para sistemas 9x.</para>
			<para>Infelizmente usa un truco en el enlazador para retrasar la carga que no es soportada por el ld, cuando algún tipo de adaptador es necesario. Precisará de MSLU y una de las bibliotecas para enlazar Mono a unicous.dll (<ulink url="http://mono.eurosoft.od.ua/files/unimono.zip">http://mono.eurosoft.od.ua/files/unimono.zip</ulink>) o alternativamente hacer una investigación en la red acerca de "libunicows".</para>
			<para>Ningún cambio en el código fuente de mono es necesario, apenas se debe tener la certeza de que el enlazador resolverá los "imports" para la biblioteca adaptadora en vez de las bibliotecas Win32. Eso se puede hacer insertando <command>-lunimono</command> antes de <command>-lkernel32/user32</command> en el archivo <filename>specs</filename> del enlazador.</para>
			</sect2>

			<sect2>
			<title>¿Por qué soportar Windows?</title>
			<para>Existen varios motivos:</para>

			<itemizedlist>
			<listitem>
			<para>La mayoría de los contribuyentes de Mono son desarrolladores de Windows. Ellos poseen muchas referencias para contribuir en nuestro esfuerzo, y recordamos lo muy importante que es permitir que esos desarrolladores ejecuten el runtime en Windows sin forzarlos a usar otro sistema operativo.</para>
			</listitem>
	
			<listitem>
			<para>El soporte a Windows nos permite identificar las partes portables de Mono de las no portables, ayudando a Mono a volverse más portable en el futuro.</para>
			</listitem>
			</itemizedlist>
			</sect2>
		</sect1>

		<sect1>
		<title>Compatibilidad</title>

			<sect2>
			<title>¿Pueden funcionar en Mono aplicaciones desarrolladas con el framework de Microsoft .NET?</title>
			<para>Si, Mono puede hacer funcionar aplicaciones desarrolladas con el framework de Microsoft .NET en UNIX. Existen algunos puntos que deben de ser tomados en consideración: Mono todavía no está completado, entonces algunas pocas llamadas a la API pueden estar faltando, y en algunos casos el comportamiento de Mono podrá ser incorrecto.</para>
			</sect2>

			<sect2>
			<title>¿Los puntos que faltan de la API serán implementados?</title>
			<para>Si, el objetivo de Mono es implementar precisamente la API del framework de .NET (bien como subconjuntos de esa API seleccionables en tiempo de compilación, para aquellos interesados en una versión más simple de Mono).</para>
			</sect2>

			<sect2>
			<title>Si el comportamiento de una llamada a la API fuera diferente, ¿Lo reparareis?</title>
			<para>Si. Pero precisamos de tu ayuda para esto. Si encuentras algún bug en la implementación de Mono, por favor mande un informe de bug a <ulink url="http://bugzilla.ximian.com">http://bugzilla.ximian.com</ulink>. No crea que sabemos sobre el problema, por que puede ser que no, y usar el sistema de bug trackin nos ayuda a organizar el proceso de desarrollo.</para>
			</sect2>

			<sect2>
			<title>¿Puedo desarrollar aplicaciones en Windows, y tenerlas disponibles en una plataforma por Mono?</title>
			<para>Si, puedes. Entretanto como hoy Mono no está 100% terminado, alguna veces es util compilar código con Mono, para descubrir si tu aplicación depende de funcionalidades no implementadas.</para>
			</sect2>

			<sect2>
			<title>¿Las aplicaciones funcionarán sin modificaciones con Mono?</title>
			<para>Algunas veces si. Pero alguna veces una aplicación .NET podrá invocar la API Win32, o asumir ciertos patrones que no son correctos para aplicaciones multiplataforma.</para>
			</sect2>

			<sect2>
			<title>¿Qué es una aplicación 100% .NET?</title>
			<para>Una aplicación 100% .NET es aquella que solamente utiliza las APIs definidas en el namespace System y no usa P/Invoke (Platform-Inoke, plataforma de invocación). Estas aplicaciones en teoría deben de funcionar sin modificaciones en Windows, Linux, HP-UX, Solaris, Mac OS X y otros. Observese que esto también es requerido para todos los assemblies utilizados por la aplicación. Si uno de ellos es específico de Windows, entonces el programa entero no es una aplicación 100% .NET.</para>

			<para>Además de eso, una aplicación 100% .NET no debe contener un flujo de datos de un assembly padre. Por ejemplo, Visual Studio .NET insertará un flujo #-tt> en los assemblies contruidos con el objetivo Debug. Este flujo contiene información de debug para uso de Visual Studio .NET. todavía, este flujo no podrá ser interpretado por Mono (a menos que esté deseando ofrecer soporte de él). Es recomendado que todo código compilado por Visual Studio .NET sea compilado con el objetivo Release antes de ser ejecutado sobre Mono.</para>
			</sect2>

			<sect2>
			<title>¿Puedo ejecutar mi programa Visual Studio .NET en Mono?</title>
			<para>Si, con algunas restricciones.</para>

			<para>El programa .NET debe de ser una aplicación 100% .NET, o (de alguna forma) tener todos los assemblies de los cuales depende, disponibles en todas las plataformas deseadas.</para>

			<para>Mono también debe tener una implementación de los assemblies .NET utilizados. Por ejemplo, el namespace System.Enterpriseservices es parte de .NET, no fue implementado en Mono. Luego, cualquier aplicación que use este namespace no funcionará sobre Mono.</para>

			<para>La aplicaciones Visual Basic .NET son portables, pero la implementación en Mono de Microsoft.VisualBasic.dll está incompleta. Es recomendable evitar el uso de estos assembly en su códig, solamente utilice las partes implementadas por Mono. o ayude a implementar las características faltantes. Adicionalmente, puede ajustar para "Option Strict On", que elimina las llamadas implícitas a la clase Microsoft.VisualBasic.CompilerServices.ObjectType. (Gracias a Jörg Rosenkranz).</para>

			<para>Gestión de extensiones para C++ opera todavía más precariamente sobre Mono. Mono no soporta assemblies de modo mixed (esto es, assemblies conteniendo código gestionado y no gestionedo, lo que Managed C++ puede producir). Necesitas de un assembly completamente gestionado para funcionar sobre Mono, y conseguir que el compilador Visual C++ .NET genere un ejecutable de esta forma puede ser difícil. Necesita utilizar los assemblies del framework .NET, no las bibliotecas de C (no puedes usar printf(3), por ejemplo.), y necesitará usar opciones de enlazador <command>/nodefaultlib /entry:main mscoree.lib</command> junto con un flag de compilación <command>/clr</command>. POdrá entonces utilizar ciertas funciones intrínsecas del compilador (como memcpy(3)) y la STL. También debe verificar la <ulink url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmex/html/vcgrfconvertingmanagedextensionsforcprojectsfrommixed-modetopureil.asp">"Converting Managed Extensions for C++ Projects from Mixed Mode to Pure Intermediate Language"</ulink> en MSDN. Y finalmente, puede utilizar <command>PEVERIFY.EXE</command> del SD .NET para determinar si el assembly es completamente gestionado.</para>

			<para>Gracias a Serge Chaban sobre las flags del enlazador que deben de ser usadas.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y Portable.NET</title>

			<sect2>
			<title>¿Cuales son las diferencias entre Mono y Portable.NET?</title>
			<para>La mayor parte de Mono está siendo escrita usando C#, con apenas unas partes escritas en C (el JIT, el runtime, y las interfaces para el sistema de recolección de basura).</para>
			<para>Es más facil describir que es lo único en Mono:</para>

			<itemizedlist>

			<listitem>
			<para>Un avanzado sistema de compilación de código nativo: Tanto compilación Just-in-Time (JIT) como precompilado de bytecodes CIL en código nativo son soportados.</para>
			</listitem>

			<listitem>
			<para>Una función para optimización de código: El nuevo generador de códigos de Mono fue contruido a partir de la experiencia de nuestro primer JIT, y nos permite implementar varios trucos avanzados de optimización de compiladores. Como el framework SSA, muchas nuevas optimizaciones son posibles.</para>
			</listitem>
			</itemizedlist>

			<para>La lista actual de optimizaciones consisten en: Postpass de peephole, optimizaciones de Branch, llamadas Inline de métodos, folding constante, propagación de constantes, propagación de copias, eliminación de dead code, busqueda lineal de localización de registros globales, movimientos condicionales, código Emit por dominio, agenciamento de instrucciones, implementación de métodos intrínsecos, recursos y llamadas a cola, optimizaciones referentes a loops, comparaciones FP x86 rápidas, optimizaciones de procedimientos leaf.</para>

			<itemizedlist>

			<listitem>
			<para>Un compilador C# self-hosting escrito en C#, que es limpio y facil de Mantener</para>
			</listitem>

			<listitem>
			<para>Objetivo en el Framework de .NET: estamos siguiendo las definiciones de la API del Framework de .NET, una vez que aseguremos que ésta es la API con la cual las personas están familiarizadas.</para>
			</listitem>

			<listitem>
			<para>Un motor de runtime multiplataforma: existe un motor y un intérprete JIT. El motor JIT funciona actualmente en sistemas x86, PowerPC, S390 y SPARC. En cuanto al interprete, funciona en sistemas x86, SPARC, StrongARM, s390 y PowerPc.</para>
			</listitem>
			</itemizedlist>

			<para>El motor JIT está siendo portado a sistemas amd64 en este momento.</para>

			<itemizedlist>

			<listitem>
			<para>Soporta Linux, BSD, MacOS, Windows y Solaris hasta ahora.</para>
			</listitem>

			<listitem>
			<para>El motor JIT está siendo escrito con un selector de instrucciones portable que no solamente genera buen código, sino que también es la función para redireccionar el motor JIT a otros sistemas.</para>
			</listitem>

			<listitem>
			<para>Soporte para remoting completo en el runtime.</para>
			</listitem>

			<listitem>
			<para>El compilador de C#, el motor JIT y las bibliotecas de clase están lo suficientemente maduras, de forma que el sistema entero se esté alojando a si mismo desde Abril de 2002. Eso significa que desarrollamos Mono completamente con él mismo hoy en dia.</para>
			</listitem>
			</itemizedlist>

			<para>Nos forzamos a utilizar nuestro propio código para desarrollar nuestras herramientas, corregimos bugs rápidamente y el sistema en general es más robusto y testeado que si no lo hicieramos de esta forma.</para>

			<itemizedlist>

			<listitem>
			<para>Nuestras bibliotecas de clases están bajo los terminos de la licencia MIT X11, que es una licencia muy liberal, el opuesto de la GNU GPL con excepciones, lo que significa que Mono puede ser utilizado en situaciones donde la GPL con excepciones no permite.</para>
			</listitem>

			<listitem>
			<para>Mono tiene una camada completa de Web Services: implementamos servidores web ASP.NET y bien el cliente web como la infraestructura SOAP basada en Remoting.</para>
			</listitem>

			<listitem>
			<para>Mono posee una completa implementación de C# 1.0 y tiene testedo mucho más de lo que tiene el compilador Portable.NET</para>
			</listitem>

			<listitem>
			<para>El compilador C# de Mono posee una fuerte manipulación de errores y una alta adherencia  a la especificación como soporte a la atribución definida (requerida para generar código IL verificable) y comprobado conformemente como el CLS.</para>
			</listitem>

			<listitem>
			<para>El compilador C# de Mono es escrito en C#, lo que vuelve más facil que nuevos desarrolladores puedan entrar en el proyecto y mejorarlo, corregir sus fallos y optimizarlo. El compilador C# de Mono en C# es más rápido que el compilador en C.</para>
			</listitem>

			<listitem>
			<para>Preview de C# 2.0: trabajamos en progreso para una implementación 2.0 de nuestro compilador que está disponible (iterators, generics and method anónimos están disponibles en nuestro compilador "preview").</para>
			</listitem>

			<listitem>
			<para>Mono posee una Reflection y una Reflection.Emit completas: Eso es importante para aplicaciones avanzadas, compiladores y generación de código dinámica.</para>
			</listitem>

			<listitem>
			<para>Mono posee una <ulink url="http://www.mono-project.com/XML_Classes">implementación completa de gestión XML</ulink>: XML, XPath, XML Serializer, XML Schema handling. Están completamente funcionales, completas en características y ajustados para ejecutarlos.</para>
			</listitem>

			<listitem>
			<para>Mono posee una <ulink url="http://www.mono-project.com/Cryptography">implementación completa de criptografía</ulink>: implementamos las APIs 1.0 y 1.1 y estamos utilizando nuestra implementación completa para implementar transporter SSL/TLS.</para>
			</listitem>

			<listitem>
			<para><ulink url="http://www.mono-project.com/ADO.NET">Soporte extensivo a bases de datos</ulink>: Mono fue lanzado con proveedores de bases de datos (providers) para <ulink url="http://www.mono-project.com/Firebird_Interbase">Firebird</ulink>, <ulink url="http://www.mono-project.com/IBM_DB2">IBM DB2</ulink>, <ulink url="http://www.mono-project.com/Oracle">Oracle</ulink>, <ulink url="http://www.mono-project.com/Sybase">Sybase</ulink>, Microsoft <ulink url="http://www.mono-project.com/SQLClient">SQL Server</ulink>, <ulink url="http://www.mono-project.com/SQL_Lite">SQL Lite</ulink>, <ulink url="http://www.mono-project.com/MySQL">MySQL</ulink>, <ulink url="http://www.mono-project.com/PostgreSQL">PostgreSQL</ulink>, <ulink url="http://www.mono-project.com/OLE_DB">Ole DB</ulink> y <ulink url="http://www.mono-project.com/ODBC">ODBC</ulink>.</para>
			</listitem>

			<listitem>
			<para>Mono incluye soporte completo para LDAP.</para>
			</listitem>

			<listitem>
			<para>Tenemos una comunidad de desarrolladores grande, sin la cual Mono no sería posible.</para>
			</listitem>
			</itemizedlist>

			<para>En general, Mono está más maduro y completo, una vez que está siendo usado para desarrollarse a si mismo, lo que es una gran motivación para estabilizar la corrección, en cuanto a Portable.NET continua siendo una plataforma no testeada.</para>
			</sect2>

			<sect2>
			<title>Mono continua cambiando la API P/Invoke, ¿Por qué?</title>
			<para>Estamos ajustando nuestra implementación de forma que se vuelva compatible con la implementación de Microsoft. En otras palabras, la API P/Invoke de Mono está más completa comparada con la versión de Portable.NET, una vez que varias porciones de códigos que dependen de esta funcionalidad extendida no funciona de forma apropiada con Portable.NET.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Web Services</title>

			<sect2>
			<title>¿Cómo está relacionado Mono con los Web Services?</title>
			<para>Mono apenas está relacionado con los Web Services por el hecho de que implementará el mismo conjunto de clases que fueron desarrolladas en el framework de .NET, para simplificar y facilitar el proceso de construcción de Web Services.</para>

			<para>Pero lo más importante es que Mono es una implementación Open Source del framework de .NET</para>
			</sect2>

			<sect2>
			<title>¿Puedo desarrollar Web Services con Mono?</title>
			<para>Podrá escribir Web Services en .NET que funcionaran en Mono, y viceversa.</para>
			</sect2>

			<sect2>
			<title>Si Mono implementa las clases SDK, ¿Podré escribir y ejecutar Web Services con él?</title>
			<para>Si. Cuando el proyecto esté terminado, podrá usar las mismas tecnologías que están disponibles a través del SDK del framework de .NET en Windows para escribir Web Services.</para>
			</sect2>

			<sect2>
			<title>¿Y Soup?, ¿Puedo usar soup sin Mono?</title>
			<para>Soup es una biblioteca para crear servidores y clientes SOAP para aplicaciones Gnome, y puede ser usada sin Mono. Podrá examinar el código fuente de soup usando <ulink url="http://cvs.gnome.org/bonsai/">Gnomes's Bonsai.</ulink></para>
			</sect2>

			<sect2>
			<title>¿Puedo usar CORBA?</title>
			<para>Si. El CLI contiene información suficiente sobre una clase, de forma que exponerla a otros sistemas RPC (como CORBA) es bastante simple, y no require el soporte de un objeto.</para>

			<para><ulink url="http://remoting-corba.sourceforge.net/">Remoting.CORBA</ulink> es una implementación de CORBA que está ganando popularidad.</para>

			<para>Construir una implementación de las interfaces Bonobo una vez que esté, será relativamente simple.</para>
			</sect2>

			<sect2>
			<title>¿Puedo serializar mis objetos para usarlos más adelante en XML?</title>
			<para>Si, pero las herramientas de serialización aun no están siendo planeadas, y probablemente tengas que implementarlas.</para>
			</sect2>

			<sect2>
			<title>¿Mono usará ORBit?</title>
			<para>Existen algunas ventajas en utilizar ORBit, como la reutilización de código existente y aprovechar todo el trabajo hecho en él. Michael Meeks posteó algunas <ulink url="http://lists.ximian.com/archives/public/mono-list/2002-September/008592.html">razones</ulink>, como algunas <ulink url="http://lists.ximian.com/archives/public/mono-list/2002-September/008657.html">ideas</ulink> que podrán ser aplicadas para reusar ORBit.</para>

			<para>La mayoría de los usuarios optarán por una solución nativa de .NET, como <ulink url="http://remoting-corba.sourceforge.net/">Remoting.CORBA</ulink></para>
			</sect2>
		</sect1>

		<sect1>
		<title>Monodoc</title>

			<sect2>
			<title>¿Qué es Monodoc?</title>
			<para>Monodoc es una navegador gráfico de documentación para las bibliotecas de Mono. Actualmente, Monodoc consiste en una aplicación Gtk# y está en intenso desarrollo.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Herramientas de desarrollo y otras cuestiones</title>

			<sect2>
			<title>¿Será posible utilizar las características del CIL sin usar Bytecodes o JIT?</title>
			<para>Si. El motor CLI estará disponible como una biblioteca compartida. El motor de recolección de basura (garbage collection), la abstracción de "threads", el sistema de objetos, el sistema de código de tipos dinámicos y el JIT están diponibles para que desarrolladores de C integren sus aplicaciones si así lo deseasen.</para>
			</sect2>

			<sect2>
			<title>¿Tendreis nuevas herramientas de desarrollo?</title>
			<para>Con un poco de suerte, entusiastas del Software Libre contribuirán con herramientas para mejorar el entorno de desarrollo. Estas herramientas podrán ser desarrolladas inicialmente utilizando la implementación CLI de Microsoft y despues ser ejecutadas con Mono.</para>

			<para>Estamos recomendando a las personas que usen y contribuyan en proyectos ya existentes, como SharpDevelop, Anjuta y Eclipse.</para>
			</sect2>

			<sect2>
			<title>¿Qué tipos de reglas vuelven el Common Intermediate Language (CIL) útil para JITers?</title>
			<para>La regla principal es que la pila en el CLI no es una pila de propósito general. No se le permite utilizar la pila con otros propósitos que no sean los de tratar valores y pasar argumentos a las funciones o retornar valores.</para>

			<para>Dada cualquier llamada o instrucción de retorno, los tipos en la pila tienen que ser los mismos, independientemente del flujo de ejecución de su código.</para>
			</sect2>

			<sect2>
			<title>¿No es un poco confuso tener el nombre XSP (el mismo que en el proyecto Apache), para soportar ASP.NET en Mono?</title>
			<para>En Mono, XSP es apenas el nombre del generador de código C# para páginas ASP.NET. En el proyecto Apache es un termino para la tecnología "eXtensible Server Pages" (Páginas Extensibles en el Servidor), entonces, como estás son cosas diferentes, no se deben de confundir.</para>
			</sect2>

			<sect2>
			<title>¿Es verdad que el CIL es ideal para "JITear" y no es eficiente para interpretes?</title>
			<para>El CIL puede ser mejor "JITeado" que los bytecodes JVM, pero puede interpretarlos de forma tan trivial como interpretarías bytecodes JVM.</para>
			</sect2>

			<sect2>
			<title>¿Existe algún plan para desarrollar un servidor aspx para Mono?</title>
			<para>El servidor XSP está disponible y puede usar también "mod_mono" con el servidor Apache.</para>
			</sect2>

			<sect2>
			<title>¿Existe alguna forma de desarrollar bibliotecas de clase utilizando Linux?</title>
			<para>Si. Mono se está "autodesarollando" desde Marzo del 2002.</para>
			</sect2>

			<sect2>
			<title>¿Existe alguna forma de instalar una copia estable de Mono en /usr y otra copia experimental en otro directorio?</title>
			<para>Si. Basta con usar dos prefijos de instalación.</para>
			</sect2>

			<sect2>
			<title>¿Cómo debo escribir test o una herramienta de test?</title>
			<para>Si dices una herramienta de test para C#, puede querer volverla independiente del compilador C# de Mono, de forma que otras implementaciones puedan utilizarla más adelante.</para>
			</sect2>

			<sect2>
			<title>¿Sería muy ruín tener otra corlib nombrada como libcorlib?</title>
			<para>Nosotros también renombramos "corlib" a "mscorlib" cuando salvamos archivos PE, de hecho, el runtime puede ejecutar perfectamente programas creados por mono.</para>
			</sect2>

			<sect2>
			<title>¿Es posible construir un archivo C# para algún tipo de formato intermediario que pueda ser anexado a un módulo final?</title>
			<para>Puede usar:</para>

<programlisting>
<command>mcs <option>/target:library</option> <replaceable>file1.cs</replaceable></command>
<command>mcs <option>/target:library</option> <replaceable>file2.cs</replaceable></command>
<command>mcs <option>/target:exe</option> <replaceable>file1.dll</replaceable> <replaceable>file2.dll</replaceable> <option>/out:mybin.exe</option></command>
</programlisting>
			</sect2>

			<sect2>
			<title>¿Existen planes para la implementación de remoting en un futuro próximo?</title>
			<para>La infraestructura de remoting está implementada. Tenemos implementaciones de TcpChannel, HttpChannel y de Soap y Formateadores Binarios. Son compatibles con .NET.</para>

			<para>Todavía, algunas clases de la biblioteca puden tener una representación binaria diferente, por que ellas pueden poseer una estructura de datos interna diferente, entonces por ejemplo, no podrá compartir un objeto Hashtable entre Mono y MS.NET. Esto no será un problema si estuvieras usando tipos primitivos, arrays de sus propias clases. Caso de tener problema, ¿Podría postear un test?.</para>
			</sect2>

			<sect2>
			<title>Mi código C usa __stdcall que no está disponible en Linux, ¿Cómo puedo volver ese código portable?</title>
			<para>Cambie el atributo __stdcall por el macro STDCALL, e incluya eso en su código C para nuevas versiones de gcc:</para>

<programlisting>
#ifndef STDCALL
#define STDCALL __attribute__((stdcall))
#endif
</programlisting>
			</sect2>

			<sect2>
			<title>Quiero poder ejecutar binarios de Mono sin tener que usar el comando "mono". ¿Cómo puedo hacerlo?</title>
			<para>Por Carlos Perelló:</para>

			<para>Creo que la mejor solución es el recurso binfmt con el wrapper que existe con paquetes Debian en: <ulink url="http://www.debianplanet.org/mono/dists/unstable/main/source/admin/">http://www.debianplanet.org/mono/dists/unstable/main/source/admin/</ulink></para>

			<para>Si quieres usar este en máquina "Big endian", debe aplicar un patch (<ulink url="http://carlos.pemas.net/debian/mono/binfmt-detector-cli.c.diff">http://carlos.pemas.net/debian/mono/binfmt-detector-cli.c.diff</ulink>.</para>

			<para>Funciona realmente bien y permite que utilices Wine también. EL lee las cabeceras del archivo ".exe" y comprueba que el archivo es un ejecutable .NET.</para>

			<para>Debes de ejecutar de la siguiente forma: ./mi_aplicacion.exe y funcionará sin precisar de ninguna adaptación.</para>
			</sect2>

			<sect2>
			<title>Veo caracteres extraños cuando ejecuto el programa, ¿Cuál es el problema?</title>
			<para>Por Peter Williams y Gonzalo Paniagua:</para>

			<para>Eso (probablemente) es Red Hat 9 usando UTF9 en tu consola; los bytes son marcadores UTF8. Puede hacer esto:</para>

<programlisting>
LC_ALL=C mono meuexe.exe
</programlisting>

			<para>Y ya no aparecerán.</para>

			<para>También puede hacer esto:</para>

<programlisting>
$ echo -e "\033%G"
</programlisting>

			<para>para habilitar UTF-8 en la consola.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y ASP.NET</title>

			<sect2>
			<title>¿Mono soporta ASP.NET?</title>
			<para>Si. Mono soporta ASP.NET, tenemos una instalación sin modificar de IBuySpy funcionando bien en Mono, como otros programas. Puede verlo por ti mismo descargando el servidor XSP.</para>
			</sect2>

			<sect2>
			<title>¿Es preciso instalar Cygwin para trabajar con ASP.NET en Mono, o Linux es suficiente?</title>
			<para>Linux es suficiente.</para>
			</sect2>

			<sect2>
			<title>¿Cómo puedo ejecutar aplicaciones ASP.NET con Mono?</title>
			<para>Necesitas de una máquina virtual Mono y un servidor web que aloje las páginas. Actualmente distribuimos un pequeño servidor web llamado XSP, que es usado para depurar aplicaciones, o puede usar mod_mono para ejecutas las páginas en Apache.</para>
			</sect2>

			<sect2>
			<title>¿Hay algún plan para hacer que ASP.NET sobre Mono funcione con Apache sobre Linux?</title>
			<para>El proyecto Mono desarollo un módulo para Apache llamado "mod_mono" que puede alojar páginas ASP.NET.</para>
			</sect2>

			<sect2>
			<title>¿Habrá soporte para Apache 1?</title>
			<para>Si. El módulo "mod_mono" soporta ahora las dos versiones de Apache (1.x y 2.x).</para>
			</sect2>

			<sect2>
			<title>¿Puedo ejecutar Apache 1 y Apache 2 en la misma máquina?</title>
			<para>Siempre podrá mantener una copia de Apache 2 ejecutando en paralelo con Apache 1.3 (en un puerto diferente o usando un reverse proxy).</para>

			<para>También puede diseñar dos servidores, con direcciones IP diferentes en la misma máquina física.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y ADO.NET</title>

			<sect2>
			<title>¿Cuál es el status de soporte de ADO.NET?, ¿Podría comenzar a migrar aplicaciones de MS.NET a Mono?</title>
			<para>El soporte para ADO.NET está completo y ya hay varios <ulink url="http://www.mono-project.com/Database_Access">proveedores disponibles</ulink> para él.</para>
			</sect2>

			<sect2>
			<title>In developing the data architecture for the application are there and objects I should stay away from in order to insure the smoothest possible transition (minimum code rewrite) to Mono's ADO.NET implementation?
</title>
			<para>a</para>
			</sect2>

			<sect2>
			<title>¿Puede Mono conectarse a Sybase utilizando Mono.Data.*?</title>
			<para>Si. Use la clase Mono.Data.SybaseClient. En primer lugar deberá crear un SybaseConnection, y entonces, a partir de él utilizar como cualquier otra clase basada en IDbConnection.</para>
			</sect2>

			<sect2>
			<title>¿El conector MySql sustituye ByteFX.Data?</title>
			<para>Si. MySql Connector/Net fue construido por MySql AB y ellos son las personas que mejor conocen el funcionamiento de acceso a esa base de datos. El autor de ByteFX.Data no mantiene más ByteFX.Data por que fue empleado por MySql AB. Para más información vea http://www.mono-project.com/MySQL.</para>
			</sect2>

			<sect2>
			<title>¿Cómo puedo conectar a Sql Lite?</title>
			<para>Usa la clase Mono.Data.SqliteClient. Tenga la certeza de que está usando Mono 1.1.3, por que el proveedor de Sql Lite no funciona bien con las versiones 1.0.x o inferiores de Mono. Use una cadena de conexión como esta: "URI=file:SqliteTest.db" si estuvieras usando Sql Lite versión 2.x, o use: "version=3,URI=file:SqliteTest.db" si estuvieras usando Sql Lite versión 3.x. Para más información consulte http://www.mono-project.com/SQL_Lite</para>
			</sect2>

			<sect2>
			<title>¿Qué proveedor debo de usar para conectar a PostgreSql?</title>
			<para>Puede usar Npgsql, ya incluido en Mono. También esta incluido en la instalación de PostgreSql 8.0 para Windows. Para más información consulte http://www.mono-project.com/PostgreSQL</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y Java</title>

			<sect2>
			<title>¿Por qué no usais Java?</title>
			<para>A fin de cuentas, existen muchos lenguajes que apuntan a Java VM.</para>

			<para>Puede conseguir herramientas muy buenas para desarrollar utilizando Java hoy en dia en sistemas libres. <ulink url="http://www.redhat.com/">Red Hat</ulink> contribuye con un <ulink url="http://gcc.gnu.org/java/">front-end</ulink> <ulink url="http://gcc.gnu.org/">GCC</ulink> para Java, que puede a partir de los fuentes y bytecodes de Java, generar ejecutables nativos. Transvirtual implementó <ulink url="http://www.kaffe.org/">Kaffe</ulink>, un motor JIT para Java. Intel también posee una máquina virtual Java llamada <ulink url="http://www.intel.com/research/mrl/orp/">ORP</ulink>.</para>

			<para>JVM no fue proyectada para ser una máquina virtual de propósito general. El lenguaje común intermediario (CIL), por otro lado, fue hecho tengiendo como blanco una gran variedad de lenguajes de programación, y tengiendo un conjunto de reglas proyectadas para ser optimizadas por "JITers".</para>
			</sect2>

			<sect2>
			<title>¿Puedo integrar Java como CLI?</title>
			<para>Si, Java puede ser integrado como CLI, el compilador de Microsoft J# hace exactamente eso.</para>

			<para>El proyecto <ulink url="http://www.ikvm.net/">IKVM</ulink> desarrolla una máquina virtual que funcione sobre Mono. IKVM es esencialmente un compilador JIT, que traduce bytecodes JVM para instrucciones CIL, y entonces deja que el motor JIT nativo asuma el control.</para>
			</sect2>

			<sect2>
			<title>¿Es posible escribir un conversor de códigos JVM a CIL?</title>
			<para>Si, eso es lo que hace <ulink url="http://www.ikvm.net/">IKVM</ulink>.</para>
			</sect2>

			<sect2>
			<title>¿Podría Mono volverse una plataforma híbrida CIL/Java?</title>
			<para>Eso puede ser hecho facilmente con IKVM.</para>
			</sect2>

			<sect2>
			<title>¿Planeais implementar un compilador de Javascript?</title>
			<para>Si. El inicio de un compilador JScript puede ser encontrado en el CVS. Cesar coordina éste esfuerzo.</para>
			</sect2>

			<sect2>
			<title>¿Pueden Mono o .NET compartir clases de sistema o se comportará como la JVM de Sun?</title>
			<para>Lo que puedes hacer con Mono es cargar aplicaciones diferentes en sus propios dominios de aplicación: esa es una característica del CLR que permite empaquetar aplicaciones en un único espacio de proceso. Eso es generalmente explotado para compartimentalizar diferentes partes de la misma aplicación, pero puede ser usado efectivamente para reducir el overhead de inicialización de memoria. Así se usan diferentes dominios de aplicaciones y la representación de runtime de tipos y métodos es compartida entre aplicaciones.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Extendiendo Mono</title>

			<sect2>
			<title>¿Permitireis otras clases además de aquellas que no estén en la especificación?</title>
			<para>Si. La colección de clases de Microsoft es muy grande, pero de ninguna forma puede ser considerada completa. Sería interesante la portabilidad de "Camel" (La Api de Mail usada por Evolution inspirada por Java Mail) para aplicaciones Mono.</para>

			<para>Puede también desear disponer la implementación de CORBA para Mono. No por que ella pueda ser últil, sino por que eso es una cosa divertida de hacer, dado el hecho de que CLI es un sitema rico en tipos.</para>

			<para>Para más información sobre como extender Mono, vea nuestra página de <ulink url="http://www.mono-project.com/Ideas">ideas</ulink>.</para>
			</sect2>

			<sect2>
			<title>¿Planeais cubrir y extender .NET?</title>
			<para>Cubrir una tecnología es algo bueno. Extender tecnologías de formas imcompatibles es ruín para los usuarios, entones no planeamos hacer cambios que traigan imcompatibilidades con las tecnologías.</para>

			<para>Si tienes ideas innovadoras, y desea crear nuevas clases, te animamos a hacer que esas clases funcionen correctamente en Mono y en .NET. Hoy Mono es distribuido con un número de bibliotecas extras que fueron desarrolladas por los miembros de la comunidad Mono y otros grupos.</para>

			<para>En algunos caso, recordamos que el código de Microsoft estaba incompleto, pero para evitar rompar la compatibilidad, expusimos la funcionalidad faltante en nuevos assemblies (Vea Mono.Security y System.Security).</para>
			</sect2>

			<sect2>
			<title>¿Existe alguna forma de desarrollar las bibliotecas de clases utilizando Linux?</title>
			<para>Si. Mono se está autodesarrollando desde Marzo de 2002.</para>
			</sect2>

			<sect2>
			<title>¿Existe alguna forma de instalar una copia estable de mono en /usr, y una copia experimental en otro directorio?</title>
			<para>Si. Basta con usar dos prefijos de instalación</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Portabilidad</title>

			<sect2>
			<title>¿Funciona Mono solamente en Linux?</title>
			<para>Actualmente, estamos haciendo nuestro trabajo en sistemas Linux y Windows. No esperamos mucho linuxismo en el código, entonces debe ser facil de portar Mono para otras variantes de UNIX.</para>
			</sect2>

			<sect2>
			<title>¿Qué sistemas operativos/Cpus son soportados?</title>
			<para>Mono actualmente funciona en Linux, Windows, Solaris, FreeBSD, HP-UX y MacOS X.</para>

			<para>El motor Just-in-Time (JIT) está disponible en x86 y PowerPc, Sparc y procesadores s390 pueden generar código y optimizaciones para una CPU específica.</para>

			<para>Existen intérpretes para CPUs Itanium, HP-PA y StrongArm.</para>
			</sect2>

			<sect2>
			<title>¿Mono se ejecuta en Windows?</title>
			<para>Si. Puedes conseguir los binarios precompilados en <ulink url="http://www.mono-project.com/downloads/index.html">http://www.mono-project.com/downloads/index.html</ulink></para>
			</sect2>

			<sect2>
			<title>¿Mono se ejecuta en Linux?</title>
			<para>Si. Puedes conseguir los binarios precompilados en <ulink url="http://www.mono-project.com/downloads/index.html">http://www.mono-project.com/downloads/index.html</ulink></para>
			</sect2>

			<sect2>
			<title>¿Necesitaré Cygwin para ejecutar Mono?</title>
			<para>No. Cygwin solo es necesario para construir Mono.</para>
			</sect2>

			<sect2>
			<title>¿Mono dependerá de Gnome?</title>
			<para>Dependerá solamente si usas algún assemblie en particular (por ejemplo, para desarrollar aplicaciones GUI). Si está interesado en Mono para implementar un "P2P Enterprise Web Service Hello World", no necesitará de ningún componente Gnome.</para>
			</sect2>

			<sect2>
			<title>¿Planteais portar Rhino para C#?</title>
			<para>Eto Demerzal ya inició la portabilidad de Rhino para C#.</para>
			</sect2>

			<sect2>
			<title>¿Ya se ha completado la construcción de una versión Mac del entorno C#? ¿En caso contrario, podrías explicar cómo?</title>
			<para>Si, Mono funciona en Linux/PPC y MacOS X (10.2 y 10.3).</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Reutilizando código existente</title>

			<sect2>
			<title>¿Cuantos proyecto reusareis o tomareis como base?</title>
			<para>Queremos poner luego Mono en las manos de los programadores. Estamos interesados en reutilizar el software open source existente.</para>
			</sect2>

			<sect2>
			<title>¿Podré utilizar Microsoft SQL Server 2000 o tendré que cambiar para una base de datos Open Source específica?</title>
			<para>No existe la necesidad de reescribir tu código si continua usando Microsoft Sql Server. Si quisiese utilizar una base de datos Open Source, entonces necesitará hacer cambios en sus fuentes.</para>
			</sect2>

			<sect2>
			<title>¿Qué debo observar cuando estuviera programando en VB.NET, de forma que pueda que yo puedar hacer funcionar esas aplicaciones en Linux?</title>
			<para>No hacer llamadas a P/Invoque o DLLs y no utilizar nada que sea parte de los namespaces Microsoft.* es suficiente. No use todavía Métodos/Clases marcadas como "Este tipo/método soporta la infraestructura del framework de .NET y no debe ser utilizado directamente a partir de su fuente.", excepto que sepas lo que esas clases/métodos hacen.</para>
			</sect2>

			<sect2>
			<title>¿Serán soportados los informes de Crystal Reports?</title>
			<para>Crystal Reports es propietario. Alguien puede intentar crear algo parecido, pero no hay ningún voluntario.</para>
			</sect2>

			<sect2>
			<title>¿Y en cuanto a escribir en el registro?, por lo que se, Linux no tiene un registro correspondiente.</title>
			<para>Intente evitarlo. Aunque pase, verá una emulación para el registro en Mono. Gnome tiene un mecanismo de configuración similar al registro, pero las llaves no son iguales, entonces probablemente terminará por tener que hacer alguna detección en el runtime, y dependiendo de la detección, cargar un assembly con las modificaciones específicas de la plataforma.</para>
			</sect2>

			<sect2>
			<title>System.Data.SqlClient con FreeTDS, ¿Portareis partes a C# para utilizarlas?</title>
			<para>Si, eso ya fue hecho.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y Gcc</title>

			<sect2>
			<title>¿Estais trabajando en algún front-end de GCC para C#?</title>
			<para>No. No se está haciendo nada de eso.</para>
			</sect2>

			<sect2>
			<title>¿Y que tal construir un front-end para GCC que coja imagenes CIL y genere código nativo?</title>
			<para>No existe nada en ese sentido, pero Mono ya provee servicios de precompilación (compilación Ahead-of-time).</para>
			</sect2>

			<sect2>
			<title>¿Soportareis C/C++ en la VM de Mono?</title>
			<para>Actualmente no hay instrucciones para eso, entretanto existen algunos esfuerzos en ese sentido. El concepto sería similar al uso de gestionar C++ de la implementación de Microsoft. El problema es que gestionar el C++ de Microsoft no produce código totalmente gestionado y la máquina virtual no está preparada para gestionar código nativo para diferentes plataformas.</para>
			</sect2>

			<sect2>
			<title>Tengo una librería en C que me gustaría usar en Mono. ¿Cómo puedo hacerlo?</title>
			<para>Existen algunas soluciones posibles:</para>

			<itemizedlist>

			<listitem>
			<para>Usar un generador de código como SWIG que lee el código C++ y genera unas bibliotecas de funciones C que pueden ser llamadas por C#.</para>
			</listitem>
			</itemizedlist>

			<para>Pró: permite usar código C++ por C#. Contra: No es muy elegante; Una camada extra tiene impacto sobre la ejecución.</para>

			<itemizedlist>

			<listitem>
			<para>Había un esfuerzo con el compilador WHIRL-to-IL, que compilaría C (y probablemente C++) en CIL que Mono podría ejecutar.</para>
			</listitem>

			<listitem>
			<para>Modificar GCC para producir CIL.</para>
			</listitem>

			<listitem>
			<para>Usar Gimple en GCC 4.0.</para>
			</listitem>
			</itemizedlist>
			</sect2>

			<sect2>
			<title>¿Qué es WHIRL-to-IL para usar C++ con Mono?</title>
			<para>WHIRL es el nombre de la representación intermediaria produciza por el compilador Open64 de SGI. El compilador Open64 es una versión modificada de GCC que genera un nuevo lenguaje intermediario en vez de RTL. Este podría ser la base para la generación de código CIL, y para implementar las futuras extensiones gestionadas para C++ del ECMA. Open64 (y otros forks derivados de GCC) dividen los front-ends de los backends, utilizando una representación WHIRL intermediaria. Kris comenzó la implementación de un traductor de WHIRL para CIL. Entonces sería posible usar compiladores GCC que generasen código CIL.</para>
			</sect2>

			<sect2>
			<title>¿Y cuando gestionará C++?</title>
			<para>Una vez que exista un traductor completo para WHIRL, estamos interesados en procurar expandir los front-ends de GCC para incluir extensiones para gestionar C++.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Mono y el lenguaje Basic</title>

			<sect2>
			<title>¿Implementa Mono el lenguaje Basic?</title>
			<para>La implementación del lenguaje VB.NET está en proceso. Para encontrar más información sobre la situación actual del compilador, mire la página sobre <ulink url="http://www.mono-project.com/Language_BASIC">Basic</ulink>.</para>
			</sect2>

			<sect2>
			<title>¿Y cuando VB6?</title>
			<para>Por el momento, Mono no tiene ninguna intención de implementar el lenguaje VB6.</para>

			<para>La ventaja principal reportada sobre VB6 es su integración con los controles basados en COM, que no estarían disponible para UNIX. En general la ventaja principal de VB6, es la disponibilidad de controles abastecidos por terceros.</para>

			<para>Un esfuerzo en esta implementación requeriría una implementación de la tecnología COM para ejecutar los controles existentes. Esta tare está fuera del objetivo de Mono.</para>
			</sect2>

			<sect2>
			<title>¿Y sobre VBScript y VBA?</title>
			<para>Esos lenguajes son simples de implementar, excepto por su dependencia de objetos COM. Entretanto, en este momento no hay planes de implementarlos.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Performance</title>

			<sect2>
			<title>¿Como de rápido será Mono?</title>
			<para>No podemos predecir el futuro, pero una estimación conservadoras es que sera por lo menos tan rápido como otros motores JIT".</para>

			<para>El motor JIT de Mono fue recientemente rearquitectado, y provee muchas nuevas características, y camadas subseptibles a optimizaciones. Es relativamente facil añadir nuevas optimizaciones en Mono.</para>

			<para>El CIL tiene algunas ventajas obre los bytecodes de Java: La existencia de struct en vez de clases, ayuda mucho a la ejecución y minimiza los requerimientos de memoria de las aplicaciones.</para>

			<para>Generalmente en el mundo CLI son ciudadanos de primera clase, no son apenas un añadido fuertemente tipado al lenguaje. Las especificaciones genéricas son embebidas en el flujo de instrucciones, y el JIT usa esta información para "JITar" una única instancia de un método que es optimizado en los argumentos de tipo.</para>

			<para>El CIL es realmente una representación intermediaria y existe un número de restricciones sobre como puedes emitir código CIL que simplifique la creación de mejores motores JIT.</para>

			<para>Por ejemplo, en el CIL, la pila no es realmente una abstracción disponible para que el gestor de códigos lo utilice a su gusto. En vez de eso, es una manera de crear una representación fija del arbol de analisis gramatical. Cualquier dato punto de llamada o punto de retorno, se espera a que la pila contenga los mismos tipos de objetos, independientemente de como la instrucción fue obtenida.</para>
			</sect2>
		</sect1>
	</chapter>

	<chapter>
	<title>Licencias</title>

		<sect1>
		<title>Licencias</title>

			<sect2>
			<title>¿Puedo crear aplicaciones comerciales o propietarias que funcionen con Mono?</title>
			<para>Si. La licencia fue planeada para permitir la creación de aplicaciones propietarias.</para>
			</sect2>

			<sect2>
			<title>¿Cual es la licencia, o licencias, usadas por el proyecto Mono?</title>
			<para>Usamos tres tipos de licencia:</para>

			<itemizedlist>

			<listitem>
			<para>El compilador de C# y las herramientas esstán licenciadas bajo los terminos de la <ulink url="http://www.opensource.org/licenses/gpl-license.html">GNU General Public License (GPL)</ulink>.</para>
			</listitem>

			<listitem>
			<para>La máquina virtual está bajo la <ulink url="http://www.gnu.org/copyleft/library.html#TOC1">GNU Library GPL 2.0 (LGPL 2.0)</ulink></para>
			</listitem>

			<listitem>
			<para>Las bibliotecas de clases están licenciadas bajo los terminos de la <ulink url="http://www.opensource.org/licenses/mit-license.html">MIT X11</ulink>.</para>
			</listitem>
			</itemizedlist>

			<para>Tanto la máquina virtual como el compilador de C#, están también disponibles en una licencia propietara, para que no se pueda usar LGPL o GPL en su código.</para>

			<para>Para más información sobre la licencia, contacte con <email>mono-licensing@novell.com</email>. </para>
			</sect2>

			<sect2>
			<title>¿Por qué la biblioteca de clases está bajo los terminos de la licencia MIT X11?</title>
			<para>Originalmente, las bibliotecas de clases eran licenciadas bajo los terminos de la GNU Library GPL (LGPL). El problema de la GNU LGPL esta en las partes ultrapasadas relacionadas a trabajos derivados. Un trabajo derivado necesitaría estar licenciado bajo la misma licencia. Esta definicion era buena antes de la existencia de las bibliotecas orientadas a objeto, pero con la introducción de las bibliotecas orientadas a objeto, muchas personas están en desacuerdo en que la herencia de una clase orientada a objeto sea considerado un trabajo derivado.</para>

			<para>Las bibliotecas de clases son una parte bien grande de Mono y es ahí donde está la mayor diversidad de contribuciones.</para>

			<para>Debido a ésta ambigüedad y el hecho de que diferentes autores puedan interpretar los terminos de la licencia de forma diferente, hemos escogido una licencia que continua siendo libre sin esas ambigüedades.</para>

			<para>La ambigüedad permitirá que el autor de un código exigiese la liberación de las partes del código, basandose en conceptos técnicos. Nosotros no queremos que eso suceda con Mono en el futuro.</para>
			</sect2>

			<sect2>
			<title>Me gustaría contribuir a Mono con código. ¿Qué licencias aceptais?</title>
			<para>Primeto tenemos que avalar la compatibilidad de su licencia, aunque generalmente aceptamos código, bajo los mismos terminos del módulo en el que el código formará parte.</para>
			</sect2>

			<sect2>
			<title>¿Por qué pide Novell una atribución de los derechos de autor?</title>
			<para>Cuando un desarrollador continue con el código para el compilador de C# o la máquina virtual de Mono, le pedimos al autor derechos para relicenciar su contribución bajo los terminos de otras licencias.</para>

			<para>Esto le permite a Novell redistribuir el código de Mono para que no pueda usar versiones GPL o LGPL del código. Particularmente fabricantes de sistemas embebidos, pueden obtener derechos sobre la máquina virtual de MOno y modificarla para sus propósitos sin necesidad de devolver sus modificaciones.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Patentes</title>

			<sect2>
			<title>¿Pueden las patentes ser usadas contra Mono?</title>
			<para>Comencemos con algunas consideraciones.</para>

			<para>El framework de .NET está dividido en 2 partes: las tecnologías cubiertar por el ECMA/ISO y otras tecnologías desarrolladas sobre éstas últimas como ADO.NET, ASP.NET y Windows.Forms.</para>

			<para>Mono implementa ambas partes, las cubiertas por el ECMA/ISO y otras de más alto nivel como ASP, ADO.NET y Windows.Forms. El proyecto Mono fue desarrollando esos componentes e integrando bibliotecas y clases de receros, siendo las más importantes: APIs de depuración, integración con la plataforma Gnome (Accesibilidad, renderización Pango, Gdk/Gtk, Glade, GnomeUI), Mozilla, OpenGL, soporte extensivo a bases de datos (Microsoft solamente soporta algunos proveedores, cuando mono soporta 11 tipos diferentes de proveedores), bibliotecas de integración POSIX y finalmente la API embebida (usada para añadir capacidades de ejecución de scripts en aplicaciones y alojar el CLI, como el runtime embebido en Apache).</para>

			<para>El nucleo del framework .NET que fue patentado por Microsoft fue sometido al ECMA/ISO. Jim Miller de Microsoft hizo una declaración de las patentes que cubren en ISO/ECMA (él es uno de los inventores listados en la patente). Básicamente permite que cualquiera que quiera implementar esos componentes, pueda hacerlo con cualquier propósito.</para>

			<para>Los elementos de la controversia son los conjuntos de clases ASP.NET, ADO.NET y Windows.Forms. Estas son necesarias para aquellas que necesitan de total compatibilidad con la plataforma Windows, aunque no son necesarias para la plataforma open source Mono, e ninguna para la integración y soporte de Mono en Linux.</para>

			<para>La estrategia de Mono para congeniar con éstas tecnologías es la siguiente:</para>

			<itemizedlist>

			<listitem>
			<para>Superar la patente usando una técnica diferente de la implementada que mantenga la API aunque cambie los mecanismos, si eso no es posible podemos:</para>
			</listitem>

			<listitem>
			<para>Eliminar partes del código cubiertas por esa patente o:</para>
			</listitem>

			<listitem>
			<para>Encontrar trabajos anteriores que inutilicen la patente.</para>
			</listitem>
			</itemizedlist>

			<para>No proveer ninguna característica/capacidad patentada llevaría a la interoperabilidad, aunque todavía si proveeriamos a la comunidad de software libre una buena herramienta de desarrollo, que es la razón principal para desarrollar Mono.</para>

			<para>Es importante recordar que las patentes no se aplican a paises donde las patentes de software no están reguladas. Para el desarrollo del Linux desktop o servidor, solamente necesitamos de componentes ECMA, y las cosas que nosotros mismo desarrollamos (Como Gtk#) y la integración con Apache.</para>
			</sect2>

			<sect2>
			<title>¿Mono es apenas es una implementación de .NET?</title>
			<para>Además de implementar las clases del framework de .NET, Mono implementa también un gran conjunto de bibliotecas específicas de UNIX, de Gnome y algunas otras que aunque no sean parte del framework de .NET son útiles para muchas personas.</para>

			<para>El mapa siguiente muestra la relación entre los diversos componentes:</para>

			<mediaobject>
			<imageobject>
				<imagedata fileref="Monocomponentsmap.png" format="PNG">
			</imageobject>
			<textobject>
				<phrase>Mapa de componentes de Mono</phrase>
			</textobject>
			</mediaobject>
			</sect2>
		</sect1>
	</chapter>

	<chapter>
	<title>ASP.NET</title>

		<sect1>
		<title>Instalación y configuración</title>
		</sect1>

		<sect1>
		<title>Características</title>

			<sect2>
			<title>¿Mono acepta codebehind en ASP.NET?</title>
			<para>Si, acepta codebehind en su implementación de ASP.NET. Aunque queda avisado de que mono ignora el atributo CodeBehind que VS.NET añade a sus páginas generadas.</para>
			</sect2>

			<sect2>
			<title>¿Cómo puedo referenciar un assembly en mis páginas .aspx?</title>
			<para>ASP.NET hace referencias a algunos assemblies padres y todos los assemblies encontrado sn el directorio <filename>bin</filename> de su aplicación.</para>

			<para>Si necesita hacer referencia a algún otro assembly que está instalado en el GAC, use:</para>

<programlisting>
<![CDATA[
<%@ Assembly name="Assembly.Name" %>
]]>
</programlisting>
			</sect2>

			<sect2>
			<title>¿Cómo registro un Tag?</title>
			<para>Si tienes un tag en un archivo MyTags.dll, y ese archivo no está en el directorio <filename type="directory">bin</filename> o <filename type="directory">GAC</filename>, y quiere que el prefijo sea <command>something</command>, añade lo siguiente a su página:</para>


<programlisting>
<![CDATA[
<%@ Register TagPrefix="something" Namespace="MyTags" assembly="MyTags" %>
]]>
</programlisting>

			<para>Ahora, si existe un control en el assembly MyTags.dll llamado <command>SuperDuper</command> puede usar lo siguiente:</para>

<programlisting>
<![CDATA[
<something:SuperDuper id="myid" otherattributes="go here" /
]]>
</programlisting>
			</sect2>

			<sect2>
			<title>¿Mono ejecuta aplicaciones ASP.NET 2.x?</title>
			<para>El soporte para aplicaciones ASP.NET está en desarrollo y todavía no está completo, Si quiere intentarlo, use el comando <command>xsp2</command>. Necesitará instalar los assemblies y compiladores de la versión 2.0 preview.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Portabilidad</title>
		<para>La portabilidad es en la mayoría de los casos un problema cuando quiere mover su aplicación Windows/.NET para Mono en una plataforma Windows.</para>

		<para>Si estuviera desarrollando una aplicación desde cero, los problemas de portabilidad estarán resueltos si testea su aplicación regularmente en Linux y en Windows durante el desarrollo.</para>

			<sect2>
			<title>¿Todas las aplicaciones ASP.NET son ejecutadas bajo Mono?</title>
			<para>No todas las aplicaciones escritas para ASP.NET funcionan en Mono la mayoría de las veces debido a suposiciones que hacen los desarrolladores. En UNIX, los nombres de archivos son case sensitive y es posible, por ejemplo, tener en el mismo directorio <filename>Login.aspx</filename> y <filename>login.aspx</filename>. Si los desarrolladores no mantienen la consistencia en los nombres de archivo, no funcionará.</para>

			<para>Estos son los problemas más comunes:</para>

			<itemizedlist>

			<listitem>
			<para>Los archivos ASP.NET están, por ejemplo, como <filename>Login.aspx</filename>, pero todas las referencias en el código están como <filename>login.aspx</filename>.</para>
			</listitem>

			<listitem>
			<para>La aplicación usa el registro de Windows para guardar configuraciones (Mono no implementa las clases de registro para Unix).</para>
			</listitem>

			<listitem>
			<para>La aplicación usa clases no disponibles en Mono (EnterpriseServices por ejemplo).</para>
			</listitem>
			</itemizedlist>

			<para>Portar una aplicación requiere que esos cambios sean considerados.</para>
			</sect2>

			<sect2>
			<title>¿Funciona en Mono?</title>
			<para>La mayoría de las aplicaciones funcionarán en Mono sin que se haga nada, pero otras necesitarán ser corregidas de los problemas citados en la sección anterior.</para>

			<para>Si quiere ver la lista de aplicaciones ASP.NET portadas en Mono vea <ulink url="http://www.go-mono.com/ports/">http://www.go-mono.com/ports/</ulink> o eche un ojeada a otras aplicaciones como nGallery, que incluye soporte para Mono.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Usando Mono con Apache</title>
		</sect1>

		<sect1>
		<title>Alojamiento</title>

			<sect2>
			<title>¿Qué proveedores poseen soporte para aplicaciones Mono?</title>
			<para>Los siguientes proveedores poseen soporte para aplicaciones ASP.NET en Mono:</para>

			<itemizedlist>

			<listitem>
			<para><ulink url="http://monoforge.com">http://monoforge.com</ulink></para>
			</listitem>

			<listitem>
			<para><ulink url="http://www.grokthis.net">http://www.grokthis.net</ulink></para>
			</listitem>
			</itemizedlist>
			</sect2>
		</sect1>

		<sect1>
		<title>Uso de Memoria</title>

			<sect2>
			<title>¿Por qué Mono no libera memoria?</title>
			<para>Mono actualmente usa un conservador y no remueve el recolector de basura. Esto significa que la falta de memoria no es redimensionada cuando la memoria es liberada. Entonces las aplicaciones podrán hacer un uso exagerado de la memoria, que hará que el proceso crezca como aplicaciones en C, C++, Perl y Python.</para>

			<para>Es importante no cometer éste tipo de error, por ejemplo, en vez de crear un bloque de tamaño SIZE y liberarlo, puede crar dos de tamaño SIZE/2+1</para>

			<para>ASP.NET en Mono es particularmente vulnerable a éste tipo de problema de memoria por que es facil para los desarrolladores definir APIs que transfieran grandes bloques de datos, como archivos de imagen enteros, eso reservaría mucha memoria que puede ser fragmentada.</para>

			<para>Una solución simple sería intentar escribir aplicaciones que no reserven grandes bloques de datos, y si varios bloques pequeños.</para>
			</sect2>
		</sect1>
	</chapter>

	<chapter>
	<title>Seguridad</title>

		<sect1>
		<title>SSL/TLS</title>

			<sect2>
			<title>WebRequest.Create(""); genera una excepción</title>
			<para>WebRequest.Create("https://www.anywhere.com"); genera una excepción.</para>

			<para>Esto probablemente suceda por que Mono no confia en el sitio al que está intentando conectar. La instalación principal de Mono está configurada para no confiar en sitio alguno.</para>

			<para>Para confirmarlo hay una herramienta <command>tlstest.ext</command></para>

<programlisting>
<command>mcs tlstest.cs <option>/r:System.dll</option> <option>/r:Mono.Security.dll</option></command>
<command>mono tlstest.exe https://www.anywhere.com</command>
</programlisting>

			<para>Existen dos alternativas para resolver el problema:</para>

			<itemizedlist>

			<listitem>
			<para>Implementando ICertificatePolicy en una clase. Un ejemplo está disponible en el código fuente de <filename>tlstest.cs</filename>. Haciendo ésto, podrá sustituir los resultados normales de validación del certificado (y por ejemplo aceptar un certificado no confiable). Mientras tanto quedará como responable de sus propias reglas de confianza para su aplicación.</para>
			</listitem>

			<listitem>
			<para>Usando la utilidad <command>certmgr.exe</command> (incluso en Mono) para añadir certificados a la raiz de Mono. Todos los certificados SSL asignados a la raiz serán aceptados (ninguna excepción será aceptada) para usar con SSL (para todas las aplicaciones de Mono ejecutadas por el usuario o por el ordenador - dependiendo de donde esté instalado el certificado).</para>
			</listitem>
			</itemizedlist>
			</sect2>

			<sect2>
			<title>¿Por qué SSL usa certificados?</title>

			<itemizedlist>

			<listitem>
			<para>SSL cifra los datos - pero cifrar los datos en un servidor inseguro no servirá de nada. Necesitará saber quien está al otro lado.</para>
			</listitem>

			<listitem>
			<para>SSL usa certificados X.509 con el propósito de verificar una clave pública junto a una entidad (en este caso un Web Server). El servidor pone este certificado junto a una autoridad certificadora (CA) que certifica si una clave pertenece a su dueño. Entonces podrá confiar en una entidad certificadora para hacer este trabajo correctamente.</para>
			</listitem>
			</itemizedlist>
			</sect2>
		</sect1>

		<sect1>
		<title>Firma de código</title>

			<sect2>
			<title>¿Soporta Mono la firma de código?</title>
			<para>Si. Mono acepta la firma para assemblies. Assemblies son archivos de tipo PE. Mono soporta la firma de varios tipos de archivo PE, como EXE, DLL, OCX, SRC...</para>
			</sect2>

			<sect2>
			<title>¿Acepta Mono la firma de código en archivos CAB?</title>
			<para>No. Los archivos CAB no son archivos PE. En cuanto a los mecanismos de asignación son semejantes, el formato CAB es muy diferente del formato PE. Mono no requiere de archivos CAB en este momento (y talvez nunca), entonces soportar la firma de archivos CAB no es necesario (a menos que alguien quiera contribuir con eso).</para>
			</sect2>

			<sect2>
			<title>¿Qué quiere decir: "signature can't be traced back to a trusted root!" ?</title>
			<para><command>Signature can't be traced back to a trusted root!</command> o <command>A assinatura não pôde ser rastreada até uma autoridade raiz!</command>.</para>

			<para>La instalación principal de Mono no confia en ninguna entidad certificadora (CA). Al verificar un archivo PE, la utilidad <command>chktrust</command> intentará encontrar una raiz confiable y si no la encuentra emitirá el siguiente error:</para>

<screen>
Mono CheckTrust 1.1.4.0
Verifying file sample.exe for Authenticode(tm) signatures...
WARNING! sample.exe is not timestamped!
ERROR! sample.exe signature can't be traced back to a trusted root!
</screen>

			<para>Podra utilizar la herramienta <command>certmgr</command> para añadir un certificado raiz para la firma de código.</para>
			</sect2>
		</sect1>

		<sect1>
		<title>Claves públicas</title>

			<sect2>
			<title>¿Mono es totalmente compatible con el RFC2459 o el RFC3280?</title>
			<para>No. Mono tiene un soporta limitado a la construcción y validación de certificados PKIX. Eso es suficiente para casos simples de autentificación SSL/TLS y firma de código. La versión 2.0 del framework de .NET mejorará este soporte con nueva clases X609Chain.</para>
			</sect2>

			<sect2>
			<title>¿Por qué no incluye Mono certificados raiz para X, Y o Z?</title>
			<para>Existen dos principales razones para no incluir certificados raiz en la instalación principal de Mono:</para>

			<itemizedlist>

			<listitem>
			<para>Certificados digitales son como la mayoría de los archivos digitales pasivos de derechos de autor. Eso hace que existan restricciones en cuanto a su distribución.</para>
			</listitem>

			<listitem>
			<para>No estamos en el negocio para decidir quien es confiable y quien no. Las autoridades certificadoras existen en todo el mundo. El mejor servicio para ti podra no ser el mejor servicio para otras personas y tener una lista enorme de raizes confiables no es una solución muy segura.</para>
			</listitem>
			</itemizedlist>
			</sect2>
		</sect1>

		<sect1>
		<title>Seguridad de acceso al código</title>

			<sect2>
			<title>¿Mono soporta CAS?</title>
			<para>Mono 1.0.x (estable) no soporta CAS (<ulink url="http://www.mono-project.com/CAS">Code Access Security</ulink>). Mono 1.1.x tiene un soporte parcial (la implementación está en desarrollo) pero las bibliotecas de clases no tiene protección en la mayoría de sus recursos. En Mono 1.2 habrá una previa de esa tecnología (desligada por la principal) con soporte parcial a biblioteca de clases. El soporte total está previsto para Mono 2.0.</para>
			</sect2>

			<sect2>
			<title>¿Cómo puedo activar el soporte para CAS?</title>
			<para>Principalmente el soporte para CAS está desligado en Mono. En Mono 1.1.4 o versiones superiores podrá activar el soporte de gestión de seguridad usando la opción <command><option>--security</option></command>.</para>

			<screen><userinput><command>mono <option>--security</option> sample.exe</command></userinput></screen>
			</sect2>
		</sect1>
	</chapter>

	<chapter>
	<title>Créditos</title>
	<para>Esta Faq contiene material producido por:</para>
	
	<itemizedlist>

	<listitem>
	<para>Miguel de Icaza</para>
	</listitem>

	<listitem>
	<para>Jaime Anguiano</para>
	</listitem>

	<listitem>
	<para>Lluis Sánchez</para>
	</listitem>
	</itemizedlist>

	<para>Traducción libre al Español por:</para>

	<itemizedlist>

	<listitem>
	<para>Ezequiel Foncubierta - <email>efoncu@agali.org</email></para>
	</listitem>
	</itemizedlist>

	<para>Parte de la traducción (puntos "General-Básicas" y "General-Mono y Novell") se debe a:</para>

	<itemizedlist>

	<listitem>
	<para>Fabian seoane - <email>fabian@fseoane.net</email></para>
	</listitem>

	<listitem>
	<para>Eduardo García - <email>kiwnix@yahoo.es</email></para>
	</listitem>

	<listitem>
	<para>Alejando Sánchez - <email>raciel@x0und.net</email></para>
	</listitem>
	</itemizedlist>

	</chapter>
</book>
