ça doit être assez monstre et réserver pas mal d’effets de bord jusqu’à trouver toutes les conséquences possibles d’un appel.
quand ils ont commencé dan les années 90 personne croyait qu’ils arriveraient à faire marcher plus que notepad.exe
faudrait y mettre des IA pour faire ce boulot de test systématique maintenant
En fait, une bonne partie du code dans un exe est compatible entre Windows et Linux (les instructions x64). Ce sont les services offerts par l’OS qui sont différents: pour l’affichage, la gestion de la mémoire ou la gestion des fichiers. Et encore pas tans que ça, les principes sont souvent proches voir les appels les mêmes en OpenGL par exemple, mais c’est un autre sujet. Donc Wine n’a qu’a fournir les mêmes services que Windows via des appels à Linux. On ne perd quasiment pas en performances, voir on gagne car certains mécanismes sont un peu plus rapides sous Linux et surtout Wine ne fournit pas tous les services offerts par Windows, seulement ceux nécessaires (je dirais plutôt découverts) avec les logiciels validés sur Wine.
le format de binaire n’est pas le même, PE/COFF pour Windows et ELF pour Linux
Mais en gros oui, c’est comme les langues latines, le français et l’espagnole sont bien différents mais ont pourtant les mêmes racines (Latin - x86)
C’est même beaucoup plus proche que deux langues latines.
Le très gros d’un exécutable, c’est le code binaire, qui est bel et bien identique d’une plateforme à l’autre (modulo éventuellement un comportement différent du compilo en fonction de la plateforme), tant qu’il cible les mêmes CPU.
Ce qui change, c’est essentiellement les métadonnées qui permettent de « patcher » le binaire après l’avoir chargé en mémoire : grosso modo, il faut remplacer dans le binaire les adresses mémoire de toutes les références à des fonctions externes, pour y mettre les adresse où ces fonctions ont effectivement été chargées, et le PE et le ELF diffèrent sur la façon dont sont listées les emplacements à patcher et les fonctions auxquelles ils correspondent.
Si on veut rester dans l’analogie avec les langues, le binaire est un texte à trou, identique sur les deux plateformes, et ce qui diffère c’est la façon de présenter la liste des mots à mettre dans les trous.
Tout à fait.
Mais pour moi c’est du détail (comme le type de container d’un format vidéo). Par contre je ne sais pas comment Wine adresse ça…
Ils doivent avoir un parser/loader de binaires PE, qui va lire la table de relocation et la table de symboles au format PE pour aller patcher le binaire comme il faut en mémoire.