Préparez-vous, cette question semblera probablement naïve et / ou stupide, étant donné que je suis relativement nouveau dans le fonctionnement interne des systèmes de type Unix et dans la programmation en général.
Prêt? D'accord! Je vais passer par environ 3 niveaux de ridicule, augmentant au fur et à mesure.
Nous avons deux systèmes avec un matériel similaire (le principal étant le processeur, disons un duo Intel Core 2 standard).
L'un est en cours d'exécution (insérez votre distribution linux ici: Ubuntu sera désormais utilisé), et l'autre est en cours d'exécution, disons Mac OS X.
On compile un programme équivalent, Disons quelque chose comme:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
Le code est extrêmement simple, car je ne veux pas encore considérer les implications des bibliothèques partagées.
Une fois compilé sur les systèmes respectifs. La différence principale entre la sortie n'est-elle pas une question d'ELF vs Mach-O? Si l'on supprimait chaque binaire du formatage, en laissant un binaire plat, les instructions machine démontées ne seraient-elles pas les mêmes? (avec peut-être quelques différences selon les habitudes / tendances des compilateurs).
1.) Si l'on devait développer un programme pour reconditionner le binaire plat produit à partir de notre système Ubuntu, au format Mach-O, fonctionnerait-il dans le système Mac OS X? Ensuite, si l'on ne disposait que du binaire compilé du programme supposé ci-dessus et que l'on avait cet outil mystique pour reconditionner les binaires plats, des programmes simples pourraient-ils s'exécuter sur le système Mac OS X?
Allons maintenant un peu plus loin.
Nous avons maintenant un programme avec source tel que:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2.) En supposant que ce programme est compilé et lié statiquement, notre programme magique serait-il toujours capable de reconditionner le binaire brut au format Mach-O et de le faire fonctionner sur mac os X? Étant donné qu'il n'aurait pas besoin de s'appuyer sur d'autres binaires (pour lesquels le système mac n'aurait pas dans ce cas)
Et maintenant pour le niveau final;
3.) Et si nous utilisions ce programme supposé pour convertir toutes les bibliothèques partagées nécessaires au format Mach-O, puis compilions le programme ci-dessus avec une liaison dynamique. Le programme réussirait-il toujours à fonctionner?
Ça devrait être ça pour l'instant, évidemment chaque étape de l'absurdité s'appuie sur la base précédente, même pour donner un sens. donc si le tout premier pilier est détruit, je doute qu'il y ait beaucoup de mérite aux niveaux restants.
Je n'irais certainement pas jusqu'à penser à cela avec des programmes avec GUI à l'esprit. Les systèmes de fenêtrage seraient probablement un tout autre casse-tête. Je ne considère que les programmes de ligne de commande à ce stade.
Maintenant, j'invite le monde à me corriger et à me dire tout ce qui ne va pas dans ma façon de penser absurde.