banner
Inicio  |   Registro  |   Programa  |   Expositores  |   Alojamiento  |   Ubicación  |   Auspiciadores  |   Documentación
Federico Mena Quintero
Cuando yo estaba en la preparatoria, en las tardes me ponía a programar en lugar de hacer la tarea de la escuela. En ese entonces estaba muy interesado en las gráficas por computadora. Yo utilizaba una PC 386 con DOS y Turbo C. Manipular imágenes era todo un problema por las limitaciones de un sistema operativo y compilador de 16 bits --- la mayoría de las imágenes son mayores que 64 KB, y era difícil manejar datos grandes en ese ambiente. Mi amigo Max de Mendizábal me recomendó que utilizara el compilador de GNU, así como un sistema operativo llamado Linux, porque ambos trabajaban en 32 bits y entonces sería posible accesar conjuntos de datos muy grandes sin hacer nada especial. Me interesé la idea del compilador, pero no tanto la de cambiar de sistema operativo.

Fue entonces cuando entré a la Facultad de Ciencias de la Universidad Nacional Autónoma de México (UNAM). Ahí fue donde tuve mi primer contacto con sistemas Unix. Los laboratorios de la carrera de Ciencias de la Computación tenín un montón de terminales X conectadas a un servidor corriendo Solaris. Yo siempre había tenido ganas de aprender a usar Unix, entonces comencé a leer sobre el sistema.

Al tenera acceso a Internet desde la escuela, pude bajar el compilador de C de GNU para mi computadora casera, en la versión DJGPP para DOS. Lo instalé y re-escribí mis pequeños programas de manipulación de imágenes para que utilizaran un espacio de memoria de 32 bits, y así se simplificaron mucho. Lo lindo de esto es que también podían compilarse sin cambios en las máquinas Unix de la Facultad. Trabajar en Unix era mucho más placentero que en DOS, entonces me dieron ganas de conseguir un Unix para mi casa.

En la Facultad conocí a Miguel de Icaza y a otros malandrines Linuxeros, quienes me convencieron de instalar Linux en mi casa. Conseguí un pequeño disco duro prestado y le puse una versión de Slackware. Un año más tarde me di cuenta del gran error que esto había sido e instalé Red Hat Linux.

Yo le había contado a Miguel que tenía planes para escribir un programa para edición de imágenes. Mi idea era hacerlo en grande, como Adobe Photoshop, con plug-ins y herramientas sofisticadas. Sin embargo, en aquel tiempo yo no tenía la menor idea de cómo organizar un proyecto de semejante tamaño, entonces nunca escribí nada útil. Miguel me dijo del General Image Manipulation Program (GIMP), que era un proyecto nuevo en ese tiempo, y me recomendó que lo revisara. Así lo hice y me puse a ver cómo estaban hechos los plug-ins. En ese entonces el GIMP utilizaba Motif para su interfase gráfica, porque la biblioteca GTK+ todavía no existía. Como no teníamos una licencia de Motif para recompilar el GIMP, bajamos una versión pre-compilada. Los autores originales del GIMP tuvieron la buena idea de escribir el núcleo del programa utilizando Motif, pero no era necesario tener una licencia de este para recompilar los plug-ins. De esta manera uno podía escribir nuevos filtros libremente.

Lo primero que hice fue suscribirme a la lista de correo del GIMP y re-escribir mi filtro de distorsión de remolino para que funcionara como un plug-in. Lo mandé a la lista de correo. Al día siguiente, obtuve una respuesta maravillosa que me hizo querer continuar con el proyecto: a los autores del GIMP les había encantado mi filtro de Whirl, y me pedían que escribiera más --- era el primer filtro escrito por una persona que no fuera de los autores originales. Re-escribí el resto de mis filtros para que funcionaran como plug-ins y así comenzó a crecer el proyecto. Yo no podía contribuir al núcleo del programa porque no tenía una licencia de Motif, entonces me dediqué a ayudar a otras personas a que escribieran plug-ins por su cuenta. Así conocí a un montón de hackers interesados en las gráficas por computadora, y también aprendí a trabajar en un proyecto grande con muchos participantes. Antes de involucrarme con el software libre, me costaba muchísimo trabajo leer código fuente escrito por otras personas. Al estudiar el GIMP aprendí a leer código ajeno y a ver cómo otras personas resolvían los problemas de manera diferente a como yo lo hubiera hecho. Así como diferentes escritores utilizan diversos estilos para sus descripciones, los programadores utilizan sus técnicas preferidas. El software libre me enseñó que hay muchas maneras de hacer las cosas.

Yo había leédo el Manifiesto del Proyecto GNU y otros documentos importantes y estaba de acuerdo con lo que decían. Richard Stallman vino unas cuantas veces a México a dar conferencias, y conocerlo en persona fue toda una experiencia. Fue maravilloso ver que un gran programador se interesaba en los proyectos de uno mismo, porque estos ayudarían a la causa del software libre.

Un par de años después, los autores originales del GIMP desaparecieron de la faz de la tierra, o más bien obtuvieron un trabajo real en una compañía. Como ya no tenían tiempo para mantener el proyecto, me pasaron la estafeta y fui el encargado del GIMP por poco menos de un año. El desarrollo se aceleró porque intenté hacerlo similar al kernel de Linux. Me dediqué a revisar los parches que la gente mandaba a la lista de correo y a instalar los parches útiles; también me encargué de liberar versiones nuevas frecuentemente para que la gente las pudiera probar. Para ese entonces el GIMP había sido re-escrito sobre GTK+, entonces todo el mundo podía recompilar el núcleo del programa sin tener Motif.

Los autores originales del GIMP demostraron que si era posible escribir software libre para usuarios finales --- el GIMP no es una herramienta del sistema como el compilador de C o un editor de textos, sino que es un programa para diseñadores gráficos, artistas y personas que hacen páginas de web.

Como un proyecto separado, Miguel y Elliot Lee habían discutido escribir una serie de bibliotecas con herramientas útiles para aplicaciones de propósito general: funciones para guardar la configuración de un programa, funciones de impresión y manipulación de archivos. De ahí no salió gran cosa más que buenas ideas. La intención era que los programas para Unix compartieran funcionalidad, en lugar de que cada uno re-implementara cosas como su propio sistema de configuración.

Tiempo más tarde, Miguel fue a visitar a un amigo al campus de Microsoft en Redmond. Regresó muy animado por conocer la manera en que Microsoft desarrollaba software a gran escala, basado en un sistema de componentes.

El sistema de plug-ins del GIMP se basaba en un "procedural database", PDB, o base de datos de funciones. Había una lista de funciones registradas en una base de datos, y cualquier parte del programa, incluso los plug-ins, podían llamar esas funciones para modificar imágenes. Al escribir un nuevo plug-in, uno daba de alta sus funciones en la base de datos, y estas a su vez se podían accesar desde cualquier parte del programa. Para hacer un sistema de componentes, queríamos hacer algo similar al PDB del GIMP, pero con contextos de operación para las funciones de modo que fuera como un pequeño sistema orientado a objetos. Hicimos algunos diseños en el pizarrón y más tarde alguien nos dijo, "esto se parece a CORBA; por qué no lo utilizan?". El proyecto terminó ahí, porque no teníamos idea de lo que nos estaban hablando.

El proyecto KDE empezaba a hacerse conocido. Miguel lo instaló y vio que era una cosa maravillosa: una interfase gráfica completa y consistente para Linux. Más tarde nos enteramos de que KDE dependía de la biblioteca Qt, que no era software libre. Por lo tanto, las distribuciones de Linux no podrían re-distribuirla. Al ver que sería imposible cambiar la licencia de Qt, comenzó el proyecto GNOME, con la idea de escribir un ambiente gráfico y un modelo de componentes basado enteramente en software libre.

La biblioteca GTK+ ya no era exclusiva del GIMP y otras personas habían escrito aplicaciones gráficas utilizándolo por su cuenta. Las primeras versiones de GNOME eran unas pequeñas bibliotecas de utilerías, sacadas del cóigo del manejador de archivos Midnight Commander, y algunas utilerías para que utilizar GTK+ fuera más fácil. Creamos un depósito de CVS y listas de correo para los programadores. Desde el principio incluimos bibliotecas para utilizar GTK+ desde Guile, un intérprete de Scheme, y desde Objective-C --- queríamos que la gente pudiera utilizar su lenguaje de programación favorito en lugar de forzarlos a usar sólo C. Un ejemplo de esto es que la primera versión del programa para configurar el protector de pantalla estaba escrita en C++, el programa de utilerías de redes estaba escrito en Scheme, el programa para manejar colas de impresión estaba escrito en Objective-C, y el cliente de "talk" estaba escrito en C.

GNOME comenzó a crecer muy rápidamente, y para la versión 0.13 fue necesario partirlo en pedazos. Originalmente se distribuia todo junto: bibliotecas de programación, utilerías y los programas finales. Después de la versión 0.13 estas partes distribuian por separado. Con el tiempo aprendimos a coordinar las versiones de las bibliotecas con las de los programas, para que la gente no tuviera que "perseguir" las últimas versiones todo el tiempo. Comenzamos utilizando la base de datos de bugs de Debian, Debbugs, y tiempo más tarde utilizamos Bugzilla.

Los primeros experimentos para un modelo de componentes fueron con Mico, una implementación de CORBA terriblemente grande y lenta. Elliot Lee entonces se dedicó a escribir ORBit, una implementación de CORBA en C que era muy pequeña y rápida. Cuando estuvo listo, se empezó a utilizar poco a poco en el resto de GNOME, comenzando por el panel de control. Al principio no teníamos interfases de programación estandarizadas para los componentes; más tarde surgió Bonobo como el fundamento de los componentes de GNOME.

Red Hat me ofreció trabajo y después de varios meses de papeleo y burocracia para obtener una visa para EUA, me fui a trabajar ahí en el verano de 1998. Trabajé en Red Hat Advanced Development Labs, donde terminé de escribir el GNOME-Canvas y el Gnome-Calendar que habíamos comenzado a escribir Miguel, Arturo Espinoza y yo en México. Después tuve que trabajar mucho tiempo en el Midnight Commander para que el manejador de archivos de GNOME fuera estable y robusto. Trabajar en el Midnight Commander me hizo aprender muchas cosas sobre interfases de usuario --- tuve que ponerme a estudiar cómo trabajaba el Explorer de Windows para ver cómo hacían que su interfase de usuario se sintiera tan bien pulida.

Mi visa para estar en los EUA era una visa de entrenamiento, entonces tenía una duración máxima de 18 meses. Al terminar mi período en Red Hat, regresé a México y luego me fui a Boston para trabajar en Helix Code, luego Ximian, y ahora Novell Ximian Services.

En Ximian comencé a trabajar en el calendario de Evolution, basado en GNOME-Calendar. La arquitectura de Evolution es muy diferente a la del programa original, entonces hubo que re-escribir pedazos grandes. Trabajar con gente que se dedica exclusivamente a diseñar interfases de usuario fue muy interesante; anteriormente la presentación de los programas siempre la había diseñado de manera ad-hoc y eso no siempre funciona bien. Después de Evolution trabajé un tiempo en Ximian Desktop, arreglando bugs en los programas de GNOME y haciendo tareas para integrarlos en nuestra distribución.

Trabajé también con Michael Meeks en OpenOffice.org, lo cual fue muy diferente de GNOME. OO.o tiene una filosofía e historia completamente diferente a lo que estaba acostumbrado: es un programa muy viejo y con una historia extensa. Al leer el código puedes ver las partes viejas, rebuscadas y con telarañas, y también las partes nuevas que están escritas con un estilo más limpio y más cercano a lo que estamos acostumbrados. Trabajar en un proyecto de esta magnitud puede ser agobiante, pero te da una perspectiva diferente. Ahora que OO.o ha sido liberado como software libre, la comunidad ha estado limpiando el código y haciendo que se integre mejor con el resto de GNOME.

Actualmente trabajo sobre la biblioteca GTK+ y el resto del desktop. Mi trabajo es tomar las tareas en GTK+ que los desarrolladores principales no tienen tiempo para realizar. Ahorita estoy trabajando en el nuevo selector de archivos para GTK+. Deberí estar listo en unas cuantas semanas, y después de ello trabajaré en la integración de Bonobo con el nuevo sistema de menús en GTK+.

Federico Mena Quintero
Septiembre 2003

DITyM - Dirección de Informática, Telecomunicaciones y Medios | Universidad de Talca | Talca - Chile
[mailto: conasol@utalca.cl]
Gnome   Freebsd   Mono   Kde   Gnu   Linux   Debian Gimp Freebsd