Le binaire linux est-il universel pour toutes sortes de distributions?

15

Il se trouve que j'installe le simulateur de modèle sim VHDL sur Linux. Le manuel dit qu'il ne prend en charge que RedHat ou Suse, mais j'ai juste essayé de l'installer sur Ubuntu. Et, je pourrais l'installer sans aucun problème.

entrez la description de l'image ici

  • Le binaire linux est-il universel pour toutes sortes de distribution? Je veux dire, si je fais un programme sur la distrubution A, puis-je être sûr qu'il fonctionnera sur n'importe quel Linux?
  • Pourquoi la plupart des fournisseurs de programmes commerciaux disent que le programme fonctionne sur une distribution spécifique? (principalement Redhat et Suse, pas ubuntu)
prosseek
la source

Réponses:

15

Ce sont deux questions:

Un binaire Linux est-il universel pour toutes les distributions?

Ça dépend:

  • Si le programme n'utilise rien en dehors du noyau Linux, il sera universel à l'exception de la question 32 ou 64 bits. Un "hello world" Linux (un programme minimaliste qui imprime simplement "hello world" dans une fenêtre de terminal) pourrait probablement être indépendant de la distribution.
  • Si le programme utilise une bibliothèque ou un service non-noyau (qui est la plupart de Linux, le noyau est assez petit), il existe des différences dans les bibliothèques incluses, les versions de ces bibliothèques et leur emplacement. Donc, dans ce cas (le plus courant), les distributions ne sont pas égales.

Pourquoi de nombreux programmes commerciaux disent-ils qu'ils ne fonctionnent que sur une ou quelques distributions?

Parce qu'il y a un très grand nombre de distributions Linux , et personne ne veut tester leur programme sur toutes.

Un fournisseur commercial dira normalement qu'il ne prend en charge que les distributions sur lesquelles il a testé son logiciel. Cela peut ou non fonctionner sur d'autres distributions, du point de vue du vendeur, le fait est que vous ne pouvez pas vous plaindre si cela ne fonctionne pas sur une distribution qu'il ne prend pas en charge.

Les distributions sélectionnées pour les tests dépendent de ce que le fournisseur attend de ses clients. Les programmes commerciaux / professionnels choisissent généralement les distributions d'entreprise, éventuellement selon un raisonnement similaire à «les personnes qui ont payé pour leur système d'exploitation sont plus susceptibles de payer pour nos logiciels», peut-être simplement en comptant les distributions utilisées par leurs clients existants.

Voir aussi Mark Shuttleworth (le gars qui est la raison pour laquelle nous avons un Ubuntu en premier lieu) sur la compatibilité binaire entre Ubuntu et Debian - Debian est le parent de distribution le plus proche d'Ubuntu.

jg-faustus
la source
2

RedHat et SUSE ont une longue tradition Linux d'entreprise et ont réussi à produire et à tester ces packages. Au fil du temps, il y aura plus d'exemples de paquets qui ont été testés pour fonctionner sur Ubuntu. En fait, de nombreux packages de ce type depuis l'année dernière sont testés pour fonctionner avec Ubuntu. Comme Canonical conclut des accords avec plus de fournisseurs, il y aura plus de packages certifiés Ubuntu.

Pour votre première question: si vous voulez créer un programme qui s'exécute sur toutes les distributions, créez un exécutable statique (par rapport à dynamique). Un statically-linkedexécutable ne dépend pas des bibliothèques système, il peut donc fonctionner entre les distributions, tant que l'architecture (comme Intel / AMD) est la même.

Voici un programme,

int main(void)
{ 
  printf("Hello, World!\n");
  return 0;
}

Compilons comme d'habitude,

$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
    libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$ 
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
    not a dynamic executable
$ 

Alors, que pouvez-vous faire avec ce programme VHDL? Obtenez le fichier .rpm et convertissez-le en .deb en utilisant alien . Ensuite, installez. Si ça a marché, ça va. Si cela ne fonctionne pas, utilisez lddpour déterminer quel fichier de bibliothèque est manquant. Dans le pire des cas, créez une machine virtuelle pour ces autres distributions Linux et exécutez-y le programme.

user4124
la source
1

J'appuie la réponse de jg-faustus, mais vous devez également faire attention au format du package. Même si les exécutables eux-mêmes sont portables et que toutes les bibliothèques nécessaires sont présentes, différentes distributions placent les fichiers à différents endroits et utilisent différents outils pour gérer les packages installés.Si le fournisseur met en package son produit en tant que package RPM, vous devrez utiliser un package comme `` alien 'pour le convertir et l'installer sous une distribution basée sur DEB comme Ubuntu.

S'ils distribuent leur logiciel en tant que code source, vous pourrez peut-être également le compiler vous-même, auquel cas l'exécutable sera adapté à votre système spécifique (mais le gestionnaire de paquets ubuntu ne le saura pas).

ImaginaryRobots
la source