Resumo: O principal motivo para mudar do GCC para o Clang é a incompatibilidade da licença GPL v3 do GCC com os objetivos do projeto FreeBSD . Há também questões políticas relacionadas ao investimento corporativo, bem como requisitos de base de usuários. Finalmente, existem vantagens técnicas esperadas relacionadas à conformidade com os padrões e à facilidade de depuração. As melhorias de desempenho do mundo real na compilação e execução são específicas do código e discutíveis; casos podem ser feitos para ambos os compiladores.
FreeBSD e a GPL: O FreeBSD tem um relacionamento desconfortável com a GPL. Os defensores da licença BSD acreditam que o software verdadeiramente livre não tem restrições de uso . Os advogados da GPL acreditam que são necessárias restrições para proteger a liberdade de software e, especificamente, que a capacidade de criar software não livre a partir de software livre é uma forma injusta de poder, e não de liberdade. O projeto FreeBSD, sempre que possível, tenta evitar o uso da GPL :
Devido às complexidades adicionais que podem evoluir no uso comercial do software GPL, nos esforçamos, no entanto, por substituir esse software por envios sob a licença mais relaxada do FreeBSD, sempre que possível.
FreeBSD e a GPL v3: A GPL v3 proíbe explicitamente a chamada Tivoização de código, uma brecha na GPL v2 que permitiu que restrições de hardware proibissem modificações de software legais pelos usuários. Fechar essa brecha foi um passo inaceitável para muitos na comunidade FreeBSD:
Os fornecedores de equipamentos, em particular, têm mais a perder se o grande corpo de software atualmente licenciado sob a GPLv2 hoje migrar para a nova licença. Eles não terão mais liberdade para usar o software GPLv3 e restringir a modificação do software instalado em seu hardware ... Em suma, existe uma grande base de consumidores de código aberto que, de repente, estão muito interessados em entender alternativas ao software licenciado pela GPL.
Devido à mudança do GCC para a GPL v3, o FreeBSD foi forçado a continuar usando o GCC 4.2.1 (GPL v2), que foi lançado em 2007 e agora está significativamente desatualizado. O fato de o FreeBSD não ter se mudado para usar versões mais modernas do GCC, mesmo com as dores de cabeça adicionais de manutenção da execução de um compilador antigo e correções de backport, dá uma idéia da força do requisito para evitar a GPL v3. O compilador C é um componente importante da base do FreeBSD e " um dos objetivos (provisórios) do FreeBSD 10 é um sistema de base livre de GPL ".
Investimento corporativo: Como muitos dos principais projetos de código aberto, o FreeBSD recebe trabalho de financiamento e desenvolvimento de empresas. Embora a extensão em que o FreeBSD seja financiado ou tenha sido desenvolvido pela Apple não seja fácil de descobrir, há uma sobreposição considerável porque o Darwin OS da Apple faz uso de um substancial código do kernel originário do BSD . Além disso, o próprio Clang era originalmente um projeto interno da Apple, antes de ser de código aberto em 2007 . Como os recursos corporativos são um facilitador essencial do projeto FreeBSD, atender às necessidades dos patrocinadores é provavelmente um fator significativo no mundo real .
Base de usuários: O FreeBSD é uma opção atraente de código aberto para muitas empresas, porque o licenciamento é simples, irrestrito e improvável que leve a processos judiciais. Com a chegada da GPL v3 e as novas disposições anti-tivoização , foi sugerido que há uma tendência acelerada e orientada pelo fornecedor para licenças mais permissivas . Como a vantagem percebida do FreeBSD para entidades comerciais reside em sua licença permissiva, há uma pressão crescente da base de usuários corporativos para se afastar do GCC e da GPL em geral.
Problemas com o GCC: Além da licença, o uso do GCC tem alguns problemas percebidos . GCC não é totalmente compatível com as normas, e tem muitas extensões não encontrados na norma ISO C padrão . Com mais de 3 milhões de linhas de código, também é " um dos projetos de software mais complexos e de código aberto / gratuito ". Essa complexidade torna a modificação do código no nível da distribuição uma tarefa desafiadora.
Vantagens técnicas: Clang tem algumas vantagens técnicas em comparação com o GCC . Mais notáveis são as mensagens de erro muito mais informativas e uma API explicitamente projetada para IDEs, refatoração e ferramentas de análise de código-fonte. Embora o site Clang apresente gráficos indicando uma compilação e uso de memória muito mais eficientes, os resultados do mundo real são bastante variáveis e amplamente alinhados ao desempenho do GCC. Em geral, os binários produzidos pelo Clang são mais lentos que os binários equivalentes do GCC:
Embora o uso do LLVM seja mais rápido na criação de código que o GCC ... na maioria dos casos, os binários criados no GCC 4.5 tiveram um desempenho melhor que o LLVM-GCC ou Clang ... nos demais testes, o desempenho foi próximo ao do GCC ou bem atrás. Em alguns testes, o desempenho dos binários gerados pelo Clang foi simplesmente péssimo.
Conclusão: É altamente improvável que a eficiência da compilação seja um motivador significativo para correr o risco substancial de mover um grande projeto como o FreeBSD para uma cadeia de ferramentas do compilador totalmente nova, principalmente quando falta desempenho binário. No entanto, a situação não era realmente sustentável. Dada a escolha entre 1) executar um GCC desatualizado, 2) mudar para um GCC moderno e ser forçado a usar uma licença incompatível com os objetivos do projeto ou 3) mudar para um compilador licenciado por BSD estável, a decisão provavelmente era inevitável. Lembre-se de que isso se aplica apenas ao sistema base e ao suporte da distribuição; nada impede que um usuário instale e use um GCC moderno em sua própria caixa do FreeBSD.