Herramientas libres para el desarrollo Como es de esperarse, una de las ramas en que más y mejores programas libres vamos a encontrar es en la de herramientas para la programación. Esto es de esperarse, si recordamos que el Software Libre es creado por entusiastas de la programación. Asomándonos a cómo piensa un típico programador: Si me gusta escribir código, obviamente, lo voy a hacer de la manera en que más natural me sea, en que menos me tenga que esforzar - aún si para eso tengo que trabajar varios meses o años. El tema que elegí para esta columna es muy amplio, y engloba una muy amplia gama de categorías. Vamos, pues, de lo más básico a lo más sofisticado. Me permito recordarles que, como con casi todos los programas libres, no es indispensable utilizar Linux para emplearlas - Las herramientas libres típicamente funcionan en cualquier sistema operativo. Editores La herramienta básica para todo programador, para todo administrador de sistemas, e incluso de todo usuario entusiasta de un sistema operativo libre es un simple editor de texto. Ahora... ¿Simple? No, un editor de texto puede ser cualquier cosa, menos simple. Lo primero que todo usuario serio de un sistema tipo Unix debe aprender es el uso del editor vi, o de alguno de sus derivados. En su versión básica, no tiene mayor atractivo - pero siempre está ahí. Es muy simple, muy ágil, y nos puede salvar fácilmente el pellejo. El editor multiusos por experiencia es Emacs. Tiene más de 25 años de historia a cuestas, y sigue siendo la herramienta favorita para programar de miles de personas. Para ser sólo un editor, Emacs sufre de una benigna pero tremenda obesidad: Desde este programa, y gracias a lo enormemente extensible que es (incluye un intérprete completo de Lisp) es posible programar, depurar, leer correo, manejar depósitos de código, manejar bases de datos, navegar, e incluso jugar. [IMAGEN: emacs.png] Gedit es un sencillo pero potente editor, integrado al entorno Gnome, que nos brinda muchas de las bondades de emacs y de vi, pero integrado a un entorno que a muchos resultará más familiar. [IMAGEN: gedit.png] Herramientas de modelado Tan pronto como nos enfrentamos con una tarea que nos tomará más de unos cuantos cientos de líneas de código, nos confrontamos con la innegable necesidad de una herramienta de modelado, donde podamos hacer los diferentes esquemas que representen nuestra aplicación, facilitándonos tanto explicarla a otras personas como encontrar posibles errores de diseño con mucho mayor facilidad. Es, incluso, una muy buena práctica de programación ayudarnos de estas herramientas antes de iniciar siquiera a escribir código. Probablemente el programa de modelado más común sea Dia, una herramienta Gtk+ que permite la creación de muy diversos tipos de diagrama, como los tradicionales diagramas de flujo, entidad-relación, UML, hasta diagramas eléctricos, de red, y varias categorías más específicas a dominios especializados. Y si bien Dia es únicamente una herramienta de modelado, a través de diversas herramientas como dia2sql o dia2code puede utilizarse como generador de código. [IMAGEN: dia.png] ArgoUML es un modelador muy completo y muy bien logrado, capaz de generar y analizar código. Está, sin embargo, completamente enfocado a UML y a Java, por lo cual su utilidad queda limitada a quienes utilicen estas tecnologías. [IMAGEN: argouml.png] Generadores de interfaces Crear una interfaz de usuario gráfica (GUI) puede ser una tarea terriblemente compleja, y depurarla peor aún. Hay dos maneras de atacar a esta problemática: A través de un generador de interfaces, que limita su rol a definir la interfaz usuario, permitiendo al programador usar las herramientas que más le gusten para la generación del código (en este caso, probablemente un editor como los mencionados hace unos párrafos), o a través de un entorno integrado de desarrollo (IDE). En lo que respecta a generadores de interfaces, desde hace varios años contamos con varias opciones - Menciono sólamente los dos más conocidos. El proyecto Gnome creó a Glade. Siguiendo la filosofía general de Gnome, Glade es muy peculiar comparándolo con herramientas similares: Está hecho para no estar atado a ningún lenguaje de programación. Glade describe la interfaz que creamos en XML, y -vía libglade, una biblioteca disponible para prácticamente cualquier lenguaje- nos permite llamarla desde nuestro programa. Además de esto, hay varios generadores de código para algunos de dichos lenguajes que nos evitan incluso la tarea manual de escribir el esqueleto de nuestro programa. [IMAGEN: glade.png] Qt Designer, de Trolltech, es la contraparte de Glade para el mundo de KDE - Y, nuevamente, nos deja ver claramente la ideología general de su proyecto. Qt Designer nos da mayor integración y mayor funcionalidad que la de Glade, sin embargo -y si bien también utiliza a XML como representación interna- está más enfocado a desarrollo de proyectos en C++. [IMAGEN: qtdesigner.png] Control de versiones Un sistema de control de versiones nos permite dar seguimiento al desarrollo de nuestros proyectos a lo largo del tiempo, registrando las modificaciones que vamos haciendo, y permitiendo que trabajemos el mismo código desde diferentes computadoras, incluso entre diferentes personas, y proveyendo mecanismos para la resolución de conflictos (esto es, saber cómo resolver cuando dos personas modifican la misma sección del mismo archivo). Los sistemas de control de versiones han sido una pieza fundamental para el desarrollo del Software Libre en el mundo, permitiendo que miles de personas a lo largo del mundo compartan su código de manera ágil y sencilla. La herramienta de este estilo más utilizada es CVS - Con más de quince años de desarrollo, casi todos los proyectos importantes han pasado por un depósito CVS. Y si bien CVS se maneja como las tradicionales herramientas Unix, a través de la línea de comando, hay una gran cantidad de herramientas gráficas o de Web que nos facilitan grandemente su uso. Una muy buena herramienta para el uso de CVS es lincvs - Ligera, potente y fácil de utilizar, partiendo de una familiar interfaz de navegación de archivos, nos brinda acceso a toda la funcionalidad de CVS sin tener que aprender o interpretar la salida de la interfaz de línea de comando. [IMAGEN: lincvs.png] Siendo el control de versiones una tarea naturalmente cliente-servidor, podemos encontrar también interfaces para manejarlo vía Web. Frecuentemente, incluso, los desarrollos de software libre cuentan con estas herramientas con acceso público, para que todo quien esté interesado pueda dar seguimiento a la evolución de su proyecto. Uno de los programas más socorridosque nos permite el uso de CVS via Web es Chora - nos brinda funcionalidad similar (para la consulta, no para la modificación) a la de lincvs, con la posibilidad de utilizarlo desde cualquier punto del mundo. Ahora, con la edad que tiene, obviamente hay varios puntos en que CVS comienza a mostrar carencias. Si bien nadie cuestionaba la supremacía de CVS hasta hace cinco años, hoy tenemos una gran cantidad de propuestas alternativas que nos traen mayor funcionalidad que CVS. Los principales contendientes son -y, claro está, enfocados a diferentes necesidades- Subversion, GNU Arch, Monotone y Git. El control de versiones, de hecho, es una herramienta muy poderosa para manejar prácticamente cualquier tipo de información, y no sólo puede ser utilizado como parte de un esfuerzo colaborativo - En mi caso, todos los documentos que escribo desde hace cerca de cinco años son parte de mi árbol CVS personal, y la flexibilidad y robustez que esto me brinda me han salvado el cuello en varias ocasiones. [IMAGEN: chora.png] En el mundo del software libre hay, obviamente, muchísimas más opciones de las que aquí alcanzo a mencionar. Hay herramientas más completas, más especializadas, más generales, más verdes o más maduras - Pero a fin de cuentas, todo eso se traduce a una cuestión muy simple: Si nos gusta programar, tenemos todo lo necesario para ser productivos y (¿por qué no?) divertirnos con las herramientas que tenemos a nuestra disposición. ---------- IMAGENES: argouml.png: Editando un diagrama de clases en ArgoUML chora.png: Chora mostrando las diferencias en un árbol CVS por Web dia.png: Diferentes tipos de diagramas en Dia emacs.png: Editando SQL y Perl en Emacs gedit.png: El entorno de edición en gedit glade.png: Creando un GUI en Glade lincvs.png: LinCVS mostrando la diferencia entre dos versiones de un proyecto qtdesigner.png: Creando un GUI con QT Designer