La Catedral y El Bazar
La Catedral y El Bazar
La Catedral y El Bazar
La catedral y el bazar:
Cuando Linux apareció en mi camino, a principios de 1993,
yo tenía invertidos en UNIX y el desarrollo del software libre
alrededor de diez años. Fui uno de los primeros en
contribuir con GNU a mediados de los 80 y he estado
aportando una buena cantidad de software libre a la red,
desarrollando o colaborando en varios programas que
todavía son ampliamente usados. Creí que sabía cómo
debían hacerse las cosas.
Linux vino a trastocar buena parte de lo que pensaba que
sabía. Había estado predicando durante años el evangelio
UNIX de las herramientas pequeñas, de la creación rápida
de prototipos y de la programación evolutiva. Pero también
creía que existía una determinada complejidad crítica, por
encima de la cual se requería un enfoque más planeado y
centralizado. Yo pensaba que el software de mayor
envergadura requería construirse como las catedrales, es
decir, que debía ser cuidadosamente elaborado por genios
o pequeñas bandas de magos trabajando encerrados a
piedra y lodo, sin liberar versiones beta antes de tiempo.
El estilo de desarrollo de Linus Torvalds me cayó de
sorpresa. No se trataba de ninguna forma reverente de
construir la catedral. Al contrario, la comunidad Linux se
asemejaba más a un bullicioso bazar de Babel, colmado de
individuos con propósitos y enfoques dispares , de donde
surgiría un sistema estable y coherente únicamente a partir
de una serie de artilugios.
El hecho de que este estilo de bazar parecía funcionar, y
funcionar bien, realmente me dejó sorprendido. A medida
que iba aprendiendo a moverme en ese medio, no sólo
trabajé arduamente en proyectos individuales, sino en
tratar de comprender por qué el mundo Linux no
naufragaba en el mar de la confusión, sino que se fortalecía
con una rapidez inimaginable para los constructores de
catedrales.
Creí empezar a comprender a mediados de 1996. El destino
me dio un medio perfecto para demostrar mi teoría, en la
forma de un proyecto de software libre que trataría de
realizar siguiendo el estilo del bazar de manera consciente.
Así lo hice y resultó un éxito digno de consideración.
En el resto de este artículo relataré la historia de este
proyecto, y la usaré para proponer algunos aforismos sobre
el desarrollo real del software libre. No todas estas cosas
fueron aprendidas del mundo Linux, pero veremos cómo
fue que les vino otorgar un sentido particular. Si estoy en lo
cierto, le servirán para comprender mejor qué es lo que
hace a la comunidad linuxera tan buena fuente de software;
y le ayudarán a ser más productivo.
County InterLink , en West Chester, Pennsylvania .
Esto podría sonar muy obvio: el viejo proverbio dice que «la
necesidad es la madre de todos los inventos».
Empero, hay muchos programadores de software que
gastan sus días, a cambio de un salario, en programas que ni
necesitan ni quieren. No ocurre lo mismo en el mundo
Linux; lo que sirve para explicar por qué se da una calidad
promedio de software tan alta en esa comunidad.
Por todo esto, ¿pensaran que me lancé inmediatamente a la
vorágine de escribir, a partir de cero, el programa de un
nuevo cliente POP3 que compitiese con los existentes?
¡Nunca en la vida! Revisé cuidadosamente las herramientas
POP que tenía al alcance, preguntándome «¿cuál se
aproxima más a lo que yo necesito?», porque...
Los buenos programadores saben qué escribir.
Aunque no presumo ser un extraordinario programador, he
tratado siempre de imitar a uno de ellos. Una importante
característica de los grandes programadores es la
meticulosidad con la que construyen. Saben que les
pondrán diez no por el esfuerzo sino por los resultados; y
que casi siempre será más fácil partir de una buena solución
parcial que de cero.
Linus, por ejemplo, no intentó escribir Linux partiendo de
cero. En vez de eso, comenzó por reutilizar el código y las
ideas de Minix, un pequeño sistema operativo tipo UNIX
hecho para máquinas 386.
Eventualmente terminó desechando o reescribiendo todo el
código del Minix, pero mientras contó con él le sirvió como
una importante plataforma de lanzamiento del proyecto en
gestación que posteriormente se convertiría en Linux.
Con ese espíritu, comencé a buscar una herramienta POP
que estuviese razonablemente escrita para ser usada como
plataforma inicial para mi desarrollo.
La tradición del mundo UNIX de compartir las fuentes
siempre se ha prestado a la reutilización del código.
posee terabytes de código fuente que están generalmente
disponibles. Así que es más probable que la búsqueda de
algo bueno tenga mayores probabilidades de éxito en el
mundo Linux que en ningún otro lado.
Así sucedió en mi caso. Además de los que había
encontrado antes, en mi segunda búsqueda conseguí un
total de nueve candidatos: fetchpop, PopTart, get-mail,
gwpop, pimp, pop-perl, popc, popmail y upop. El primero
que elegí fue el «fetchpop», un programa de Seung-Hong
Oh. Le agregué mi código para que tuviera la capacidad de
reescribir los encabezados y varias mejoras más, las cuales
fueron incorporadas por el propio autor en la versión 1.9.
Sin embargo, unas semanas después me topé con el código
fuente de «popclient», escrito por Carl Harris, y descubrí
que tenía un problema. Pese a que fetchpop poseía algunas
ideas originales , sólo podía manejar POP3, y estaba escrito
a la manera de un aficionado . El código de Carl era mejor,
bastante profesional y robusto, pero su programa carecía de
varias de las características importantes del fetchpop que
eran difíciles de implementar .
¿Seguía o cambiaba? Cambiar significaba desechar el código
que había añadido a cambio de una mejor base de
desarrollo.
Un motivo práctico para cambiar fue la necesidad de contar
con soporte de múltiples protocolos. POP3 es el protocolo
de servidor de correos que más se utiliza, pero no es el
único. Fetchpop y otros no manejaban
POP2, RPOP ó APOP, y yo tenía ya la idea vaga de añadir
IMAP sólo por entretenimiento.
«Contemple la posibilidad de desecharlo, de todos modos
tendrá que hacerlo.