Eu não uso muito o Ubuntu, sendo um engenheiro de plataformas e construção em uma organização que é principalmente a Red Hat Enterprise e seus similares.
O problema de apenas construir e usar um GCC atualizado são as bibliotecas de tempo de execução da linguagem. Eu teria que distribuí-los, complicando as remessas e deixando os advogados nervosos com a GPL, ou exigir que meus clientes construíssem e instalassem o mesmo GCC.
Eu produzo software comercial de código fechado, principalmente modelagem matemática, compilado a partir de fontes C e C++ e enviado como bibliotecas compartilhadas. Isso significa que estou extremamente interessado em obter compatibilidade binária entre distribuições. Isso é prático porque tudo o que minhas bibliotecas precisam está disponível na glibc e nos tempos de execução da linguagem GCC ( libgcc_s.so.1
e libstdc++.so.6
). Ambos os conjuntos de bibliotecas têm compatibilidade futura muito forte, devido ao fato de todos os seus símbolos serem versionados e novas versões serem criadas sempre que há uma mudança de comportamento.
Atualmente, faço minhas compilações no RHEL 8.x. Ele possui GCC (8.x) e glibc (2.28) bastante antigos; portanto, se eu construísse minhas bibliotecas usando-o ingenuamente, teria compatibilidade futura com Linux com versões iguais ou posteriores dessas bibliotecas. No entanto, aquele antigo GCC não suporta o padrão de linguagem C++20, que os desenvolvedores desejam muito usar, muito menos o novo padrão C++23. RHEL fornece uma solução para isso, mas não encontrei nada semelhante para o Ubuntu.
A solução Red Hat é um "conjunto de ferramentas GCC". Existem vários deles, mas todos funcionam da mesma maneira. Eles fornecem uma versão posterior do GCC, construída para rodar nos tempos de execução do RHEL 8.x, nos cabeçalhos padrão e em alguns scripts especiais para GNU ld
. Esses scripts dizem ao vinculador para usar as bibliotecas do sistema para os tempos de execução da linguagem GCC sempre que possível, e para funções que não estão nas bibliotecas do sistema, vincular estaticamente o código necessário à biblioteca compartilhada (ou executável) que está sendo vinculada. Isso parece assustador, mas funciona extremamente bem. Provavelmente isso ocorre porque a Red Hat é uma grande contribuidora para o GCC e garante que ele continue funcionando.
O Ubuntu tem algo semelhante? Eu gostaria de ter uma alternativa ao Red Hat, caso a exploração das brechas da GPL consiga eliminar as semelhanças de trabalho de seu sistema operacional, que é muito caro para ser executado em todas as máquinas de teste.
Meu conhecimento atual de compilação e tempos de execução do Ubuntu é explicado em minha resposta a uma pergunta relacionada aqui .
Para o caso C++20, mudar para o Ubuntu LTS 22.04 preencheria a necessidade. No entanto, o C++23 está começando a aparecer. Podemos esperar o Ubuntu LTS 24.04 em breve, mas provavelmente será muito cedo para o suporte ao C++ 23 no GCC 14, com lançamento previsto para abril ou maio de 2024. Estou presumindo que os clientes "empresariais" do Ubuntu irão instale apenas versões LTS em seus servidores principais, em vez das versões intermediárias.
Se o Ubuntu não fizer isso, tudo bem. Dado que é um Enterprise Linux, pensei que poderia estar faltando alguma coisa.