
Tenía que escribir un post sobre esta controversia publicada en LWN. Y es que el compilador LLVM/Clang está empezando a preocupar en las lista de correo de GNU.
Erase una vez un compilador llamado GCC que con sus más de 25 años de existencia se le sigue teniendo un gran respeto por su licencia libre y copyleft, además de ser el compilador usado por el kernel linux y hasta hace poco por FreeBSD. El que quería aprender a desarrollar en C o C++, seguro que usaba GCC independientemente de la arquitectura de su máquina. Sin embargo GCC padecía de cierto hermetismo, en parte por la filosofía de quienes lo crearon y en parte por su desarrollo estilo catedral, donde se ejercía un fuerte control sobre que iba en GCC y que no (ahora ya no tanto pero sigue habiéndolo), lo cual abrió el camino para la construccion de front-ends y otras características que a la larga GCC acabó adoptando. Para saber más de la corta historia de EGCS, les dejo este link.
Mientras, en la Universidad de Illinois en Urbana-Champaign circa 2002, un proyecto de investigación desemboca en la creación de un compilador creado de una forma modular tal que se podían reemplazar fácilmente sus elementos individuales como los front-ends, los generadores de códigos y los optimizadores. Lo llamaron LLVM porque al principio era una máquina virtual de bajo nivel pero acabó siendo más que eso. Y lo licenciaron con su propia licencia, la cual era similar a la BSD (libre, no copyleft, compatible con la GPL). Años después, Apple se interesó por LLVM y lo adoptó para sus sistemas operativos iOS y OS X, además de construir (y liberar bajo la misma licencia libre que LLVM) su propio front-end llamado Clang, para C y Objetive C. La pega es la posibilidad de incluir LLVM/Clang en programas privativos, tal es el caso del compilador CUDA de NVIDIA y del IDE XCode de Apple.
Pero un día, hace unas cuantas semanas en la lista de correos de emacs, en medio de una discusión sobre un modo de autocompletar diseñado para Clang, Dimitry Gutov dice “Hace tiempo me contaron que Richard Stallman odiaba tanto a Clang que se oponía a incluir código que lo utilice en emacs”. Esto luego derivó en otra discusión sobre clang y el software libre en donde el propio Richard aclara: “Nuestra política es no aceptar cambios a ningún paquete de GNU que pueda funcionar con Clang pero no con GCC. Emacs no animará a la gente a alejarse de GCC. Cuando se tenga la oportunidad, animaremos a usar GCC por encima de Clang.”
Poco tiempo despues aparece Eric Raymond (famoso por crear La Catedral y el Bazar, junto con la definición de Open Source) quien, mitad cantando la justa, mitad trolleando, va y dice que LLVM/Clang fue una respuesta a la resistencia del proyecto GCC a ser más interoperable, además de que Clang supera a GCC en varias medidas técnicas. Según él (y mostrando un video de una conferencia de Chandler Carruth), los desarrolladores de Clang le preguntaron a Stallman si había alguna razón de por qué los front ends de GCC no podían convertirse en librerías dinámicas que puedan ser enlazadas por cualquier programa que quiera parsear un código fuente. Stallman les respondió que un objetivo de GCC era evitar que los programas privativos usaran cualquiera de sus partes, así que deliberadamente evitaron varias cosas que posiblemente habrían facilitado dicho uso……..lo cual consideraron una respuesta nada útil. Ellos querían crear IDEs y otras herramientas que compartan el código del compilador y GCC no les dejaba, así que a crear Clang y mandar a GCC a /dev/null. Los desarrolladores de GCC le saltaron encima puteándole por no estar del todo informado (con lo de que Clang supera a GCC en varias medidas técnicas). En medio de las puteadas aparece Stallman diciendo que LLVM es un terrible retroceso, no por cuestiones técnicas sino sólamente por su licencia no copyleft lo cual beneficia a Apple.
Luego el artículo de LWN dedica largos parrafos sobre la modularidad de GCC y las medidas que incluyeron adrede para dificultar el uso de su representación interna por programas privativos, sobre la GCC Runtime Library Exception la cual resuelve la cuestion de si GCC debería compilar código propietario. Yo quisiera agregar también el caso de FreeBSD (cuya versión 10 liberada hace poco, reemplaza a GCC por LLVM/Clang como compilador principal). La última versión que usaban de GCC era la 4.2.1 (la última con licencia GPLv2) y ni locos iban a actualizarlo a una version con GPLv3 (simplemente quieren un BSD sin nada de GPL), así que LLVM/Clang les viene como anillo al dedo.
En fin, otra batalla de la eterna guerra GPL vs BSD.
Continúar leyendo...