web-dev-qa-db-fra.com

Quelles sont les garanties fournies par Ubuntu en ce qui concerne la compatibilité binaire entre les versions?

Je sais généralement que la réponse est "utiliser un PPA", mais en dehors de cela ...

Quelle est la politique d'Ubuntu en matière de compatibilité entre les versions d'Ubuntu pour une architecture donnée? Par exemple, si un binaire dans un paquet est construit sur 10.04 LTS et que les mêmes bibliothèques existent dans Ubuntu 12.04 LTS, Ubuntu garantit-il la compatibilité? Existe-t-il des directives pour les éditeurs de logiciels?

J'ai beaucoup cherché et trouvé des références sur la compatibilité avec LSB, d'autres distributions, etc. Je ne trouve pas de document décrivant les différentes versions d'Ubuntu.

7
Matt Ingenthron

Ce qui rend un paquet binaire incompatible avec une bibliothèque est une rupture API ou ABI.

  • Un interruption d'API se produit lorsque l'interface proposée par la bibliothèque change d'une manière qui n'est plus compatible avec la version précédente. Un exemple est l'ajout ou la suppression d'un argument d'une signature de méthode.

    Les interruptions d'API nécessitent généralement que vous adaptiez votre logiciel à la nouvelle interface et sont évitées autant que possible par les développeurs de bibliothèques.

  • Un interruption ABI se produit lorsque la taille ou l'alignement des types de données change ou que les conventions de bas niveau (telles que les conventions d'appel) changent. Un exemple consiste à modifier le type de paramètre d'une fonction de int à size_t. Les pauses ABI sont généralement introduites simplement par des corrections de bugs ou par des modifications de l'API.

    Les pauses ABI nécessitent simplement de recompiler votre programme avec les en-têtes de bibliothèque les plus récents.

Cela dit, quelle est la politique d'Ubuntu sur les ruptures d'API et d'ABI?

  • Les versions les plus récentes d’Ubuntu essaient de toujours proposer les logiciels les plus récents, y compris les dernières bibliothèques de logiciels.

  • Les nouvelles versions d'Ubuntu tentent d'être aussi rétrocompatibles que possible. Par exemple, Ubuntu propose à la fois les technologies GTK + 2 et GTK + 3.

  • Une fois qu'une version Ubuntu est créée, elle est figée , en ce sens que seules les corrections de bugs importants peuvent atteindre l'archive de cette version (il existe des exceptions et des modifications spéciales). cas concernant cette règle, mais ces exceptions sont limitées à un petit ensemble d’applications).

  • Parmi les mises à jour d'une seule version d'Ubuntu, il n'y a aucune chance que l'API se casse. Ceci est impliqué par la politique "Uniquement les corrections de bugs".

  • Comme je l'ai dit précédemment, certaines corrections de bugs peuvent introduire des ruptures ABI. Bien que ce soit un cas rare, cela est possible et si une interruption ABI est nécessaire pour corriger un bogue important, elle sera introduite.

  • Parmi les principales versions d'Ubuntu, des interruptions API et ABI peuvent être introduites. En effet, essaie de toujours proposer les logiciels les plus récents.

Longue histoire: que votre programme fonctionne avec les versions d'Ubuntu dépend vraiment des bibliothèques qu'il utilise et des règles qui les entourent. De plus, vous ne pouvez pas être sûr que votre paquet sera compatible avec les mises à jour Ubuntu.

C'était la partie la plus technique. Cela dit, nous pouvons combattre le problème d’un autre point de vue: considérons que 1. il existe de nombreuses normes, 2. le logiciel libre essaie de respecter autant les normes. Dans la mesure du possible, et ., la plupart des bibliothèques (même les plus petites et sans importance) changeront très peu leur API/ABI d’une publication à l’autre.

Alors, n'hésitez pas à proposer un seul paquet binaire pour plusieurs versions d'Ubuntu, mais gardez un œil sur les changelogs. N'oubliez pas également de bien comprendre les dépendances de votre paquet: par exemple. ne dites pas que cela dépend de GTK + 3, mais indiquez clairement les plages (de 3.X à 3.Y). Cela aidera vos utilisateurs à éviter les erreurs graves.

6
Andrea Corbellini

Je suis peut-être un peu en retrait, mais laissez-moi vous dire ce que je sais à ce sujet. Je vais utiliser comme exemple le paquet nvidia-313 avec la version 313.18-0ubuntu1~xedgers~raring2

Au niveau de base, lorsqu'un paquet est créé pour une version spécifique d'Ubuntu, il contient:

  • Architecture pour laquelle il a été conçu (exemple: 32 bits, 64 bits)
  • Pour quelle version il a été fait (par exemple: 12.04, 12.10, raring, oneric ..)
  • Quelle version spécifique de ce paquet est (Dans mon exemple ci-dessus, vous pouvez voir raring2, ce qui voudrait dire soit la 3ème version si elle commence à 0, soit la 2e si elle commence à 1. Cela dépend bien sûr du PPA que j'ai utilisé et de ce que le mainteneur avait à l'esprit)

Qu'est-ce que tout cela garantit? Il garantit que:

  1. Le paquet fonctionnera "correctement" pour cette version spécifique d'Ubuntu, avec cette architecture spécifique. Cela suppose que les bibliothèques susceptibles d'être utilisées par le paquet n'ont pas été modifiées manuellement ni altérées de quelque manière que ce soit dans un environnement propre.

  2. Le paquet saura pour quelles architectures sa version est. S'il est utilisé dans un autre, il vous avertira ou échouera simplement à installer.

  3. La plupart des développeurs PPA et des référentiels principaux d'Ubuntu auront une version d'un paquet. C’est peut-être la même version (comme un Nvidia 313 pour 13.04, 12.10, 12.04, etc.), mais lorsqu’il était empaqueté, il utilisait des versions spécifiques de certains autres paquets (dépendances ou pré-dépendances) et des versions spécifiques de certaines bibliothèques nécessaire pour cette version d'Ubuntu. Voir le même paquet pour différentes versions d’Ubuntu.

Cela fonctionnera-t-il s'il est utilisé sur une version future ou une version plus ancienne de celle pour laquelle elle a été conçue, la plupart du temps pas. Dans certains cas, cela vous donnera au moins un avertissement. Dans la plupart des cas, cela dépend vraiment des dépendances dudit paquet, car, si on utilisait des bibliothèques par exemple dans 12.04 qui n’avaient pas changé ou changeaient un peu quand 13.04, ce paquet pourrait même encore fonctionner correctement sur 13.04 (même si a été faite pour 12.04), en supposant bien sûr qu’il s’agisse au moins d’une architecture identique pour éviter d’autres problèmes.

Pour arriver à une question spécifique que vous posez:

si un binaire dans un paquet est construit sur 10.04 LTS et que les mêmes bibliothèques existent dans Ubuntu 12.04 LTS, Ubuntu garantit-t-il la compatibilité?

Si les mêmes bibliothèques existent dans les deux versions, 10.04 et 12.04, avec la même version, la même architecture (et les mêmes pré-dépendances, versions, etc.), alors je pense que le paquet fonctionnera dans les deux versions d'Ubuntu. Maintenant, ce n'est pas très probable car la vitesse à laquelle une distribution Linux change sur une période de deux mois est énorme.

De nombreuses bibliothèques changent, de nombreuses mises à jour sont apportées, de nombreuses améliorations sont ajoutées. Ainsi, quelque chose qui n’existait pas dans 10.04, par exemple, pourrait exister dans 12.04, ce qui éliminera la nécessité d’utiliser, par exemple, moins de bibliothèques (comme si un paquet utilisait 12 bibliothèques dans 10.04, mais dans 12.04, il n’aurait besoin que de 2 même objectif). Cela prend également en compte les modifications apportées aux outils qui compilent et conditionnent chaque application. Beaucoup de nouvelles techniques apparaissent chaque année, beaucoup de façons d'optimiser les paquets, de les compresser, de les lire, etc.

Donc, sur la base de mon peu de connaissances, je suppose que plus il y aura de temps entre un paquet sur différentes versions d’Ubuntu, moins il sera probable que le paquet fonctionne entre les deux versions d’Ubuntu.

1
Luis Alvarado