|
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
|