De XMMS a Audacious, historia de un clon de Winamp
musica audio linux mp3 software xmms
Una de las funciones más utilizadas en cualquier ordenador moderno es la capacidad de reproducir música. Desde los primeros beep y pong en los viejos arcades hasta la AdLib o las primeras SoucandBlaster en los PC domésticos, y ahora los monstruosos 51 millones de transistores de la X-Fi, la gente ha escuchado y sigue escuchando música en sus ordenadores.
En 1997, alguien decidió escribir un reproductor realmente usable para Linux, X11Amp, después llamado XMMS.
Y es que, en mayo de 1997, una pequeña y desconocida compañía llamada Nullsoft sacó al mercado un software que instantáneamente se convirtió en un éxito, y hoy en día sigue siendo el mejor ejemplo de reproductor musical; era Winamp.
El trabajo de Justin Frankel se convirtió en el reproductor de facto para Windows. Winamp sufre sin embargo de un bug realmente severo; sólo funciona en Windows —N. del T. Funciona realmente bien con las últimas versiones de WINE—. Así que, unos meses después, en noviembre, Peter y Mikael Alm crearon un clon libre de Winamp para Linux, X11Amp.
Peter y Mikael escribieron este software porque «faltaba un buen reproductor MP3 en Linux». Clonando el aspecto y las características de Winamp y permitiendo a la gente utilizar su popular formato de skins, X11Amp se convirtió pronto en una opción tan popular en Linux como Winamp lo era en Windows.
En 1999, nuestros intrépidos desarrolladores de X11Amp eligieron a 4Front Technologies como sponsor, conocidos como responsables del entonces sistema de sonido estándar en Linux, OSS —reemplazado más tarde por ALSA—. Esta relación provocó el cambio de nombre de X11Amp a XMMS. Yo empecé a usar XMMS por esta época, y seguí de cerca el desarrollo de XMMS. Sus asuntos políticos internos hacían de éste un tema muy interesante.
Durante cinco años, XMMS consiguió tener plug-ins para casi cualquier formato de sonido existente, y liberó docenas de versiones estables. El desarrollo se detuvo en 2004, y desde entonces se han aprendido varias cosas.
La primera versión del toolkit GTK+, la primera en su estilo, y desde luego la única cuando XMMS fue creado, estaba repleta de bugs y carente de características avanzadas. Fea por dentro y por fuera, y una para la que resultaba doloroso desarrollar. GTK2, el sucesor de GTK+, fue una decisiva mejora.Los símbolos de GTK+ y GTK2 están en conflicto, así que aunque los desarrolladores de XMMS cambiasen a GTK2, todos los viejos plug-ins para XMMS basados en GTK+ reventarían el nuevo reproductor. Esto ocurre en cada fork de XMMS que usa GTK2 y que pretende ser compatible con la API para plug-ins de XMMS, como BMPXMMS le pasa las referencias de memoria de sus estructuras internas a los plug-ins, lo que permite que aquellos mal escritos revienten XMMS en nuevas e interesantes formas.No había forma de proceder sin reescribir casi todo el software. Se intentó hacerlo, y el código resultante confundió a todos como lo hace una película de Hideaki Anno.
En 2002, Peter Alm inicia un fork de XMMS llamado XMMS2, reescribe, añade características, soporte para GTK2, y rompe la API para plug-ins arreglando pequeños problemas pero sobre todo forzando dejar de utilizar los plug-ins originales para XMMS sin portarlos a medida primero.
Peter también decidió separar los plug-ins en categorías; input y transport —dado que muchos plug-ins de entrada contenían código redundante, para soportar flujos por Internet y cosas similares—, añadió funciones para soportar librerías de medios, y separó la visualización del motor de reproducción, haciéndoles comunicarse mediante sockets. El desarrollo de XMMS2 sigue activo aunque no haya versiones nuevas a menudo. Desafortunadamente cabe sospechar que esto, más la falta de publicidad, hará que el proyecto muera pronto.
Casi al mismo tiempo que XMMS2, Beep Media Player, o BMP, liderado por Milosz deadchip Derezynski se separó de XMMS pero, contra XMMS2, intencionadamente mantuvo la API para plug-ins. De hecho, siempre que no se utilicen los cuadros de diálogo, es posible utilizar plug-ins compilados para XMMS en BMP sin más problemas.
El desarrollo de BMP continuó hasta que Milosz decidió que XMMS y BMP realmente necesitaban ser reescritos caso por completo. Aunque por lo visto no se ha puesto de acuerdo con Peter en cuál es el reemplazo de XMMS que se necesita. En octubre de 2005 Milosz separó BMP —que esencialmente era XMMS con GTK2 y algo de rediseño de software, pero no exactamente un programa nuevo— y creó BMPx. Aún utilizando descuidadamente el término fork, ya que se ha reescrito desde cero. BMPx está diseñado además alrededor de Xine —y más tarde de GStreamer— como sistema de plug-ins.
Milosz alineó a varios desarrolladores para BMPx cuando decidió hacer pedazos el código original de BMP. Algunos dejaron el proyecto enfadados, y otros simplemente porque ya no entendían el proyecto. Algunos pasaron a desarrollar otros reproductores de medios.
En mi opinión, BMPx está en un callejón sin salida.
Partiendo donde finalizó el desarrollo de BMP, William nenolod Pitcock decidió separar código de BMP unos días después de que Milosz comenzara BMPx y lo llamó Audacious. Comenzando como una caza de bugs, Audacious parece haber heredado el título de reproductor de facto para Linux.
William ha arreglado hasta ahora docena de bugs realmente importantes, ha añadido la posibilidad de que clientes externos se conecten al motor musical, ha reescrito el decodificador MP3 —el cual, en mi opinión, suena mejor que libMAD, el que era hasta ahora para mí el mejor decodificador MP3— y ahora se enfrenta a la tarea de añadir una API que permita utilizar Audacious tal y como GStreamer ya es utilizado.
Entre Audacious y BMPx, Audacious parece ser el único proyecto que realmente continúa donde XMMS lo dejó. BMP era básicamente un esfuerzo de mantenimiento y de reescritura de código, útil, pero que no añadía nuevas características. XMMS2 murió y BMPx no va a ninguna parte.
Así que, si aún usas XMMS o BMP, prueba Audacious. Lo peor que puede pasarte es que redescubras cómo de fácil siempre fue escuchar música en Linux.
Visto en FSM.