Retrouvez cet article dans : Linux Pratique Hors série 8
Un programme informatique est écrit dans un langage informatique donné. Le plus souvent en C ou en C++ pour un Logiciel libre. Une des avancées majeures est la modularisation des codes : ainsi, un programme peut utiliser des « bouts » de code qui existent déjà . En effet, pourquoi recoder toujours une bibliothèque qui lit des .jpeg quand la libjpeg le fait très bien ? Les fonctionnalités de base sont fournies par la glibc, qui fait notamment l'interface avec le noyau Linux.
ABI, Application Binary Interface, définit la façon dont les modules communiquent entre eux. Ceci est d'ailleurs défini dans les standards des langages de programmation. Malheureusement, ces standards sont complexes et souvent les compilateurs (programmes qui transforment le code source en exécutable) génèrent leur propre version de l'interface pour se simplifier la vie.
L'interface du langage C est assez stable, mais celle du C++ a évolué entre les différentes versions 3.x du compilateur libre gcc pour se rapprocher le plus possible du standard. Cela signifie que 2 modules de programmes C++ compilés avec différentes versions de gcc ont peu de chances de fonctionner correctement ensemble. Ces modules doivent donc être compilés avec la même version du compilateur. Cela n'est pas un problème avec une distribution GNU/Linux, car tous les logiciels sont compilés ensemble. Mais les problèmes arrivent avec les binaires propriétaires téléchargés sur Internet...
C'est pourquoi un « vieux » binaire propriétaire peut avoir du mal à fonctionner sur une distribution Linux récente.
En effet, il essaiera de communiquer avec la bibliothèque fondamentale du système, mais dans un ancien langage. L'ABI que le programme utilise n'est pas compatible avec celle du système hôte. Donc forcément, cela ne marche pas... Pour un Logiciel libre, cela n'est pas gênant, car il suffit de prendre la dernière version d'un programme compilé pour sa distribution.
 Retrouvez cet article dans : Linux Pratique Hors série 8

