Resumen: La razón principal para cambiar de GCC a Clang es la incompatibilidad de la licencia GPL v3 de GCC con los objetivos del proyecto FreeBSD . También hay cuestiones políticas relacionadas con la inversión corporativa, así como los requisitos de la base de usuarios. Finalmente, se esperan ventajas técnicas relacionadas con el cumplimiento de las normas y la facilidad de depuración. Las mejoras en el rendimiento del mundo real en la compilación y ejecución son específicas del código y discutibles; Se pueden hacer casos para ambos compiladores.
FreeBSD y la GPL: FreeBSD tiene una relación incómoda con la GPL. Los defensores de la licencia BSD creen que el software verdaderamente libre no tiene restricciones de uso . Los defensores de GPL creen que las restricciones son necesarias para proteger la libertad del software, y específicamente que la capacidad de crear software no libre a partir de software libre es una forma injusta de poder en lugar de una libertad. El proyecto FreeBSD, cuando sea posible, intenta evitar el uso de la GPL :
Debido a las complejidades adicionales que pueden evolucionar en el uso comercial del software GPL, sin embargo, nos esforzamos por reemplazar dicho software con envíos bajo la licencia más relajada de FreeBSD siempre que sea posible.
FreeBSD y la GPL v3: la GPL v3 prohíbe explícitamente la denominada Tivoización de código, una laguna en la GPL v2 que permitió que las restricciones de hardware impidieran las modificaciones legales de software de los usuarios. Cerrar esta escapatoria fue un paso inaceptable para muchos en la comunidad de FreeBSD:
Los proveedores de dispositivos en particular tienen más que perder si la gran cantidad de software actualmente licenciado bajo GPLv2 hoy migra a la nueva licencia. Ya no tendrán la libertad de usar el software GPLv3 y restringir la modificación del software instalado en su hardware ... En resumen, hay una gran base de consumidores de OpenSource que de repente están muy interesados en comprender alternativas al software con licencia GPL.
Debido al cambio de GCC a la GPL v3, FreeBSD se vio obligado a seguir usando GCC 4.2.1 (GPL v2), que se lanzó en 2007 , y ahora está significativamente desactualizado. El hecho de que FreeBSD no se moviera para usar versiones más modernas de GCC, incluso con los dolores de cabeza de mantenimiento adicionales de ejecutar un compilador antiguo y correcciones de backport, da una idea de la fortaleza del requisito para evitar la GPL v3. El compilador de C es un componente importante de la base de FreeBSD, y " uno de los objetivos (tentativos) para FreeBSD 10 es un sistema de base libre de GPL ".
Inversión corporativa: al igual que muchos proyectos importantes de código abierto, FreeBSD recibe financiación y trabajo de desarrollo de corporaciones. Aunque la medida en que FreeBSD es financiada o desarrollada por Apple no se puede descubrir fácilmente, existe una superposición considerable porque el sistema operativo Darwin de Apple utiliza un código de núcleo sustancial originado en BSD . Además, Clang en sí era originalmente un proyecto interno de Apple, antes de ser de código abierto en 2007 . Dado que los recursos corporativos son un facilitador clave del proyecto FreeBSD, satisfacer las necesidades de los patrocinadores es probablemente un importante motor del mundo real .
Base de usuarios: FreeBSD es una opción atractiva de código abierto para muchas compañías, porque la licencia es simple, no restrictiva y es poco probable que genere demandas. Con la llegada de GPL v3 y las nuevas disposiciones contra la Tivoización , se ha sugerido que existe una tendencia acelerada, impulsada por el proveedor, hacia licencias más permisivas . Dado que la ventaja percibida de FreeBSD para las entidades comerciales radica en su licencia permisiva, existe una creciente presión de la base de usuarios corporativos para alejarse de GCC y de la GPL en general.
Problemas con GCC: además de la licencia, el uso de GCC tiene algunos problemas percibidos . GCC no es totalmente compatible con las normas, y tiene muchas extensiones que no se encuentran en la norma ISO C estándar . Con más de 3 millones de líneas de código, también es " uno de los proyectos de software más complejos y gratuitos / de código abierto ". Esta complejidad hace que la modificación del código a nivel de distribución sea una tarea desafiante.
Ventajas técnicas: Clang tiene algunas ventajas técnicas en comparación con GCC . Lo más notable son los mensajes de error mucho más informativos y una API diseñada explícitamente para IDEs, refactorización y herramientas de análisis de código fuente. Aunque el sitio web de Clang presenta gráficos que indican una compilación y un uso de memoria mucho más eficientes, los resultados del mundo real son bastante variables y, en general, están en línea con el rendimiento de GCC. En general, los binarios producidos por Clang se ejecutan más lentamente que los binarios equivalentes de GCC:
Si bien el uso de LLVM es más rápido en el código de construcción que GCC ... en la mayoría de los casos, los binarios construidos con GCC 4.5 tuvieron un mejor desempeño que LLVM-GCC o Clang ... en el resto de las pruebas, el rendimiento fue cercano al de GCC o bien detrás. En algunas pruebas, el rendimiento de los binarios generados por Clang fue simplemente horrible.
Conclusión: es muy poco probable que la eficiencia de la compilación sea un motivador significativo para correr el riesgo sustancial de trasladar un gran proyecto como FreeBSD a una cadena de herramientas de compilación completamente nueva, particularmente cuando falta el rendimiento binario. Sin embargo, la situación no era realmente sostenible. Dada la opción entre 1) ejecutar un GCC desactualizado, 2) Pasar a un GCC moderno y verse obligado a usar una licencia incompatible con los objetivos del proyecto o 3) mudarse a un compilador estable con licencia BSD, la decisión Probablemente era inevitable. Tenga en cuenta que esto solo se aplica al sistema base y al soporte de la distribución; nada impide que un usuario instale y use un GCC moderno en su caja de FreeBSD.