La poule et l'oeuf

et moins le développeur comprend ce qu’il est en train de faire…

un truc que j’ai jamais compris dans cette logique de je compile pour un processeur
c’est que si je compile pour un processeur pourquoi un meme programme fonctionne sur different processeur
mais que un programme linux ne marche pas sous windows ou mac et vice versa

[quote=“bobzer”]un truc que j’ai jamais compris dans cette logique de je compile pour un processeur
c’est que si je compile pour un processeur pourquoi un meme programme fonctionne sur different processeur
mais que un programme linux ne marche pas sous windows ou mac et vice versa[/quote]
Ton binaire fais des appels à des fonctions de linux (ouvrir un fichier, etc…). L’ensemble de ces possibilités d’appel (les fonctions que ton programme peut appeler quand il est sous sa forme binaire) s’appelle l’ABI. Ceci n’est pas lié au processeur et ne peut pas être lié statiquement sans embarqué le noyau dans ton programme.

[quote=“MisterFreez”][quote=“bobzer”]un truc que j’ai jamais compris dans cette logique de je compile pour un processeur
c’est que si je compile pour un processeur pourquoi un meme programme fonctionne sur different processeur
mais que un programme linux ne marche pas sous windows ou mac et vice versa[/quote]
Ton binaire fais des appels à des fonctions de linux (ouvrir un fichier, etc…). L’ensemble de ces possibilités d’appel (les fonctions que ton programme peut appeler quand il est sous sa forme binaire) s’appelle l’ABI. Ceci n’est pas lié au processeur et ne peut pas être lié statiquement sans embarqué le noyau dans ton programme.[/quote]
c’est bien ce que je pensais (d’ailleur wine fonctionne comme ça nan ? il mets a dispo les truc windows)
mais qu’est ce qui nous empeche de faire un programme qui embarque ce que nous avons besoin pour qu’il fonctionne partout ?

Si je ne me trompe pas wine intercepte les appel systèmes et tente de donner un résultat cohérent.

C’est impossible parce que tu ne peut pas outre passer le noyau du système d’exploitation (et encore heureux), donc il faudrait que ton application soit un système d’eploitation en elle même et s’excute tout seul ou en environement virtualisé.

Ce dernier point c’est ce que fais java et ferras perl6.

[quote=“bobzer”]un truc que j’ai jamais compris dans cette logique de je compile pour un processeur
c’est que si je compile pour un processeur pourquoi un meme programme fonctionne sur different processeur
mais que un programme linux ne marche pas sous windows ou mac et vice versa[/quote]
C’est avant tout un problème de format. Chez Kro$oft il y a deux formats les .COM et les .EXE chez Linux il y a le format ELF. Ces différents formats implique à l’OS de faire un certain nombre de choses avant d’exécuter la première instruction d’un programme.