Je n'utilise pas Ubuntu très souvent, étant ingénieur plates-formes et builds dans une organisation principalement axée sur Red Hat Enterprise et ses équivalents.
Le problème avec simplement construire et utiliser un GCC à jour est la bibliothèque d'exécution du langage. Je devrais soit les distribuer, compliquant les envois et rendant les avocats nerveux à propos du GPL, soit exiger que mes clients construisent et installent le même GCC.
Je produis des logiciels commerciaux à code source fermé, principalement des modèles mathématiques, compilés à partir de sources en C et C++ et expédiés en tant que bibliothèques partagées. Cela signifie que je souhaite vivement parvenir à une compatibilité binaire entre distributions. Cela est pratique car tout ce dont mes bibliothèques ont besoin est disponible dans glibc et les exécutions des langages GCC (libgcc_s.so.1
et libstdc++.so.6
). Ces ensembles de bibliothèques offrent une très forte compatibilité ascendante, grâce à tous leurs symboles étant versionnés, et de nouvelles versions étant créées à chaque fois qu'il y a un changement de comportement.
Actuellement, je réalise mes constructions sur RHEL 8.x. Cela dispose d'un GCC (8.x) et d'un glibc (2.28) assez anciens, donc si je construisais mes bibliothèques en l'utilisant de manière naïve, j'aurais une compatibilité ascendante avec les Linux disposant de versions égales ou ultérieures de ces bibliothèques. Cependant, ce vieux GCC ne gère pas la norme de langage C++20, que les développeurs souhaitent vivement utiliser, et encore moins la nouvelle norme C++23. RHEL propose une solution pour cela, mais je n'ai rien trouvé de similaire pour Ubuntu.
La solution de Red Hat est un "GCC Toolset". Il existe toute une gamme de ces outils, mais ils fonctionnent tous de la même façon. Ils fournissent une version plus récente de GCC, construite pour s'exécuter sur les exécutions de RHEL 8.x, les en-têtes standard, et quelques scripts spéciaux pour GNU ld
. Ces scripts indiquent au lieur d'utiliser les bibliothèques système pour les exécutions des langages GCC lorsqu'elles sont disponibles, et pour les fonctions qui ne sont pas dans les bibliothèques système, lient de manière statique le code requis dans la bibliothèque partagée (ou l'exécutable) en cours de liaison. Cela peut sembler effrayant, mais cela fonctionne extrêmement bien. C'est probablement parce que Red Hat est un contributeur majeur à GCC et veille à ce qu'il continue de fonctionner.
Ubuntu a-t-il quelque chose de similaire? J'aimerais avoir une alternative à Red Hat, au cas où leur exploitation des failles du GPL parviendrait à éliminer les équivalents de travail pour leur OS, qui est trop cher à exécuter sur chaque machine de test.
Mes connaissances actuelles sur la compilation et les exécutions Ubuntu sont expliquées dans ma réponse à une question connexe ici.
Pour le cas du C++20, passer à Ubuntu LTS 22.04 remplirait le besoin. Cependant, le C++23 commence à apparaître. Nous pouvons nous attendre à Ubuntu LTS 24.04 assez prochainement, mais il sera probablement trop tôt pour le support du C++23 dans GCC 14, censé être publié en avril ou mai 2024. Je pars du principe que les clients "Enterprise" d'Ubuntu n'installeront que les versions LTS sur leurs serveurs principaux, plutôt que les versions intermédiaires.
Si Ubuntu ne le fait pas, ce n'est pas grave. Étant donné que c'est un Linux Enterprise, je pensais peut-être passer à côté de quelque chose.