Linus Torvalds habla sobre Git

Ya hemos hablado en otra ocación sobre sistemas de control de versiones. En este video, Linus Torvalds (autor original y lider del desarrollo del núcleo de Linux), nos habla sobre Git, un sistema de control de versiones distribuido, desarrollado por él mismo para manejar el código fuente del núcleo de Linux, y utilizado por ejemplo por X.org y Wine. Fiel a su estilo sacástico y de opiniones controvertidas, Torvalds critica en durísimos términos a CVS y Subversion, y dice que los únicos sistemas de control de versiones que recomienda usar son Mercurial y Git, aunque según él Git es mejor. Los demás, dice o no son distribuidos o no son eficientes.

Coincido con Linus en que los sistemas de control de versiones distribuidos (sin un repositorio central), parecen ser más adecuados al modelo de desarrollo del software libre. Sin embargo, es justo reconocer que CVS es una herramienta que ha sido útil por muchos años (aunque actualmente es claro que presenta serias limitaciones frente a sus competidores más modernos), y que Subversion es efectivamente un “mejor CVS” (que es la herramienta correcta en el caso de que uno quiera usar un modelo de desarrollo centralizado), por lo que no coincido con la forma en que critica a los desarrolladores de estos sistemas.

Python 3000 (o Python 3.0) es una futura versión (actualemente en desarrollo) de Python, un versátil lenguaje de scripting del que ya hemos hablado en otra ocación.

La diferencia con las anteriores versiones es que Python 3.0 incluirá cambios que son incompatibles con las serie Python 2.x, de modo de corregir los errores de diseño y eleminar las funcionalidades obsoletas, que han sido su que se han ido acumulando en el lenguaje a lo largo de las diferentes versiones.

El diseño de Python 3000 aspira a cristalizar mejor que nunca los principios de simplicidad que guian el diseño del lenguaje.

Al respecto, quiero recomendarles este video donde Guido Van Rossum habla sobre el proceso de creación de Python 3000, en las Google Tech Talks.

Entre los cambios más salientes que se prometen están los siguientes: todos los strings de caracteres utilizarán Unicode (y habrá un nuevo tipo de datos bytes, para cuando uno quiera manipular caracteres que no sean Unicode), se rediseñará la librería de entrada y salida, la sentencia print será reemplazada por una función (con el consiguiente cambio de sintaxis) y range devolverá un iterador en vez de una lista.

Actualización: (20 de junio) En este artículo en su blog, Guido habla sobre los cambios previstos en Python 3000.

Publicado en Desarrollo. 1 Comment »

Hace poco comentábamos sobre que había tantos lenguajes de programación que uno puede entrar en crisis a la hora de elegir el más adecuado.

Ahora estoy tratando de elegir un sistema de control de versiones para mis proyectos personales, y me sucede algo similar. Existen tantos sistemas de control de versiones que no sé cuál es el más adecuado. Aquí pueden ver una comparación entre varios de elllos. (Incluso algunos proyectos como Axiom, no llegan a decidirse por uo de ellos y ofrecen su código fuente a través de varios de ellos).

Los sistemas de control de versión son un componente esencial en el desarrollo del software libre. Los sistemas de control de versiones hacen posible que varios programadores compartan el código en el que están trabajando a través de la red. Cuando un programador hace una modificación, ella está inmediatamente visible para los demás desarrolladores. Además el sistema lleva el control de las versiones del proyecto, y es posible pedirle algo como “quiero ver el código fuente del proyecto tal como estaba el viernes a las tres de la tarde”. Usando CVS, pude por ejemplo, colaborar en proyectos de software libre como Bluefish o Yacas, trabajando con programadores en Holanda o en Rusia, a los cuáles nunca he conocido personalmente.

El interés de los sistemas de control de versiones no está limitado a los programadores. También son útiles para otros propósitos: por ejemplo los científicos podemos usarlos para escribir un trabajo (paper) en colaboración.

En un comienzo CVS era el sistema de control de versiones más utilizado. Sin duda, CVS es una herramienta que ha sido muy útil durante muchos años, y todavía es utilizada por muchos proyectos de software libre. Representó un gran avance sobre la era pre-CVS, donde el desarrollo se hacía intercambiando parches (patchs) que se aplicaban a mano, en un proceso engorroso y propenso a los errores.

Sin embargo, con el tiempo, se han empezado a notar sus limitaciones. Para mí las más notables son tres: CVS no soporta mover o renombrar archivos o directorios conservando la historia; tampoco soporta copiar un archivo conservando la historia, y finalmente las operaciones de escritura al repositorio (commits) no son atómicas.

Después apareció Subversion, un proyecto que se propuso superar las deficiencias de CVS pero conservando su filosofía básica, y realmente creo que es una gran herramienta. De a poco, la mayoría de los grandes proyectos, se están moviendo a Subversion: GCC, KDE y ahora Gnome. También Sourceforge ofrece ahora soporte para Subversion.

Sin embargo, el modelo de desarrollo centralizado de CVS y Subversion (que requiere un repositorio central al que los desarrolladores tengan acceso a través de la red) no es adecuado para muchos propósitos.

Se han desarrollado por ello, sistemas de control de versiones distribuidos, que no requieren un repositorio central como por ejemplo: SVK (construido sobre Subversion), GNU Arch, Mercurial, Monotone , Darcs, Bazaar y Git (creado por el mismísimo Linus Torvalds para manejar el código fuente del núcleo de Linux; cuando su elección del sistema privativo Bitkeeper mostró haber sido un claro error).

Seguramente voy a elegir algun sistema de control distribuido porque tengo varias computadoras que uso para desarrollo que no tienen conección permanente a la red, hasta ahora el que más me seduce es Mercurial. Entre otras cosas por estar escrito en Python. Si quieren dejarme algún consejo al repecto en los comentario, es bienvenido.

Por suerte existe Tailor, una herramienta para convertir entre los diferentes sistemas de control de versiones. Prové convertir mi repositorio de Subversion a Mercurial sin éxito (Tailor parece confundido por un directorio que borré de mi repositorio), pero sí funcionó convertirlo de Subversion a Darcs.

Actualización:  Quiero recomendarles este video de  Bryan O’Sullivan, uno de los desarrolladores pincipales de Mercurial, hablando en las Google TechTalks sobre este proyecto.

Publicado en Desarrollo. 2 Comments »

Se ha dicho en otra parte que el avance de las tecnologías de virtualización fue una de las claves que hicieron de 2006 ” el año de Linux”.

Las tecnologías de virtualización permiten ejecutar un sistema operativo dentro de una “máquina virtual”, sin necesidad de modificar nada en la máquina que sirve de anfitrión.

Son por ejemplo, muy útiles en el desarrollo de sistemas operativos, para probar versiones experimentales sin riesgo de dañar el equipo. O para correr aplicaciones de otro sistema operativo en una ventana, sin necesidad de volver a arrancar el equipo.

Aquí por ejemplo, pueden ver a React OS (un proyecto para desarrollar un sistema operativo libre compatible con Windows, en desarrollo) , corriendo en una ventana en mi escritorio bajo GNU/Linux, usando QEmu:

reactos-under-quemu.png

En los últimos días se han proucido algunas novedades realmente interesantes en esta área:

  • KVM, una tecnología de virtualización a nivel del núcleo de Linux para los procesadores Intel y AMD con extensiones de virtualización, ha sido incluida en la reciente vesión 2.6.20 del núcleo de Linux.
  • El módulo Kquemu para aceleración de Qemu, ha sido liberado finalmente bajo la GNU GPL.
  • Virtual Box, otro software de virtualización para GNU/Linux y Windows ha sido liberado bajo la GNU GPL (En realidad, existen dos versiones de Virtualbox: una versión Open Source bajo la GPL, y una versión propietaria con algunas prestaciones más, que se puede descargar gratuitamente para uso personal y evaluación). Aquí pueden ver una interesante nota sobre el mismo.

Actualización (26 de febrero): Leyendo el blog  “Conocimiento Libre”, encontré este interesante artículo que explica las tecnologías de virtualización en Linux desde un punto de vista técnico.

Publicado en Desarrollo. 1 Comment »

Existen muchos lenguajes de programación, tantos como para entrar en crisis. Los hay para todos los gustos: simples o complicados, de alto nivel o de bajo nivel, compilados o interpretados, modernos o arcaicos, legibles o crípticos,…

(Aunque en muchos casos la elección del lenguaje de programación depende del tipo de programa, que se tenga en mente, y del entorno en el cuál ese programa va a correr. C seguramente es un lenguaje adecuado para escribir un sistema operativo, pero probablemente no lo es para escribir una aplicación de alto nivel orientada a la web)

Hoy quiero comentarles sobre mi lenguaje de programación favorito: Python.

Python es un lenguaje interpretado, de muy alto nivel, que es muy popular en la comunidad de software libre. Python es un lenguaje potente y a la vez relativamente simple, y fácil de aprender. Fue creado por Guido Van Rossum.

Python es utilizado en múltiples aplicaciones, entre las que se me ocurre mencionar: el manejador de listas de correo GNU Mailman, Portage (el manejador de paquetes de Gentoo), el programa para compartir archivos Bittorrent,  el sistema de álgebra computacional Sage, el sistema de control de versiones Mercurial y el servidor de aplicaciones para web Zope. Como puden ver con esta pequeña lista, las aplicaciones de Python van desde la administración del sistema, a las aplicaciones de alto nivel orientadas a la web.

Para los que deseen aprender Python, les recomiendo el libro How to Think Like a Computer Scientist. Learning with Python , escrito por Allen B. Downey, Jeffrey Elkner y Chris Meyers (disponible en línea). Hay una traducción al castellano.

En la Cafeconf 2006 asistí a una interesante conferencia sobre Python de Alex Martelli,quien es miembro de la Python Software Foundation y trabaja, para Google como “Über Tech Lead”.

El título de la conferencia era “What is Python, and Why it matters” (¿Que es Python y Porqué importa?). En la conferencia destacaba algunos aspectos de la filosofía y el diseño de Python. Me sorprendieron el énfasis que hizo en las similitudes que hay entre la filosofía de C y la de Python.

Y comentó una curiosidad, Python tiene su propio Zen. Para conocerlo, basta tipear “import this” en el interprete python (o hacer click aquí).

Publicado en Desarrollo. 3 Comments »

Filezilla es un cliente FTP en modo gráfico que es software libre, y que es muy fácil de usar gracias a su diseño en dos paneles; en uno de los cuáles se muestra la máquina local (cliente) y en el otro la remota (servidor). Entre otras carácterísticas, vale destacar que soporta también el protocolo SFTP, y tranferencias simultáneas múltiples. Originalmente pensado para la plataforma Windows, su próxima versión 3.0 (ya está disponible la beta 4) funcionará también bajo GNU/Linux, gracias a la librería wxwidgets para creación de interfaces gráficas multiplataforma.

Ya existe un paquete para la versión “testing” de Debian. También existe un ebuild para Gentoo, aunque aún no está incluido en el árbol de portage, pero pueden obtenerlo del sistema de seguimiento de bugs de Gentoo.

Aquí pueden ver una captura de pantalla de Filezilla 3.0 beta 4 funcionando en mi sistema GNU/Linux.

Captura de pantalla de Filezilla 3.0 beta 4

Novedades del Desarrollo del GCC

El GCC no es un proyecto de software libre más. Es algo así­ como el corazón del proyecto GNU, ya que sin un compilador libre no podrí­a haber un sistema operativo 100% libre.

El mismísimo Richard Stallman escribió la versión original del GCC, que fue liberada en 1987.

Aunque originalmente era un compilador de C, actualmente el GCC es una colección de compiladores para distintos lenguajes: C, C++, java, fortran, objetive C y Ada (Existen también Front Ends para otros lenguajes; por ejemplo GDC para el Lenguaje D).

Lo que hace realmente notable al GCC es que es un compilador portable, que funciona en más de 20 arquitecturas diferentes. Esto se debe a que el GCC representa el programa internamente en tres lenguajes intermedios (RTL, GENERIC y GIMPLE) antes de generar el código assembler, y es capaz por ello, de realizar optimizaciones independientes del lenguaje original y de la arquitectura para la cuál el programa va a ser compilado.

Sigo habitualmente por curiosidad el desarrollo del GCC, y pruebo la versión experimental (en SVN).

Una muy buena noticia para la comunidad de software libre, es que el GCC, proyecto vital para el desarrollo del software libre, está siendo activamente mejorado y goza de buena salud.

En los primeros días del año 2007, nuevas mejoras fueron anunciadas:

(Fuente: Pá¡gina del GCC: gcc.gnu.org )