Pourquoi Windows ne fonctionne-t-il pas sous Linux?


29

Je ne demande pas comment faire fonctionner un exe Windows sous Linux.

Je demande POURQUOI cela ne fonctionne pas.

Qu'est-ce qui diffère dans la façon dont Windows exécute un exécutable et Linux exécute un exécutable? Pourquoi devaient-ils être différents? De plus, pourquoi les exécutables Linux n'ont-ils pas d'extension de fichier?


Réponses:


45

Les exécutables Linux et Windows utilisent différents formats. Linux utilise le format ELF sur la plupart des architectures, tandis que Windows utilise le format PE . ELF est mieux adapté à la façon dont Linux gère les bibliothèques partagées, et PE est mieux adapté à la façon dont Windows gère les bibliothèques partagées, mais il n'y a aucune raison fondamentale pour laquelle Linux ne pourrait pas exécuter les exécutables PE ou les exécutables Windows ELF. En fait, Linux peut exécuter des exécutables PE, via Wine .

La difficulté est que Windows et Linux ont des API complètement différentes : elles ont des interfaces de noyau et des ensembles de bibliothèques différents. Donc, pour exécuter réellement une application Windows, Linux devrait émuler tous les appels d'API que l'application effectue. Ça fait beaucoup de travail. Wine le fait dans une certaine mesure, mais c'est très difficile, d'autant plus que le fabricant de Windows ne coopère pas. Vous pouvez le comparer avec, disons, l'apprentissage de l'anglais lorsque votre langue maternelle est le chinois: le format exécutable est l'alphabet (pas si difficile à maîtriser), l'API est le vocabulaire (il faut des années pour arriver à un niveau où vous pouvez commencer à lire la littérature ).


9
"Vocabulaire" est une excellente analogie.
pause jusqu'à nouvel ordre.

Je pense que vous vouliez dire complètement différent .
Mircea Chirea

Android prend également en charge les binaires Linux (pas les packages) s'ils sont compilés pour ARM car il est basé sur Linux
Suici Doga

@SuiciDoga En quelque sorte, mais c'est plus compliqué que ça. Le noyau Android peut exécuter des binaires Linux (s'ils sont compilés pour le bon noyau ABI, par exemple à l'aide de registres NEON), mais si vous souhaitez exécuter des programmes liés dynamiquement, vous devez également installer toutes les bibliothèques. (Et si vous faites cela, vous pouvez également installer un gestionnaire de paquets, donc "les binaires mais pas les paquets" n'est pas vraiment vrai.)
Gilles 'SO- arrête d'être mauvais'

Oui, je sais que vous devez changer le chemin de la bibliothèque, etc.
Suici Doga

14

Les binaires Windows ont un ABI différent et utilisent une API différente de celle des binaires Linux.

Les binaires Linux n'ont pas besoin d'une extension car * nix utilise des bits d'autorisation pour identifier un exécutable au lieu de l'extension.


1
D'accord avec la réponse ... des données supplémentaires qui peuvent être pertinentes: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans

Ah oui, il a également besoin d'un chargeur différent. en.wikipedia.org/wiki/Loader_%28computing%29
Ignacio Vazquez-Abrams

J'aime particulièrement la deuxième information manquante dans la réponse de @Gilles.
Timothy Gu

@ IgnacioVazquez-Abrams C'est très intéressant. Que faire si je vous dis que je viens de lancer nativement un jeu Windows PlantsVsZombies.exe sur Ubuntu 16.04 Linux? Je l'ai juste fait par ennui en sachant qu'il ne se lancerait pas, mais il l'a fait et je pouvais parfaitement le jouer. C'est comme impossible, car ce jeu a besoin de l'API Steam pour fonctionner en premier et ce n'est clairement pas le cas. Comment a-t-il été lancé ??? Dois-je poser une nouvelle question à ce sujet?
Nikos

@ RestlessC0bra: Wine et Mono sont des choses.
Ignacio Vazquez-Abrams le

0

C'est ainsi que j'ai entendu le côté Windows expliqué en termes simples par les programmeurs.

Dans Windows, il existe des hooks dans les programmes et le système d'exploitation auquel Exe fait des appels ne sera pas là sous Linux. En raison des différences dans les deux environnements. Initialement, Linux recherche des autorisations, Windows recherche d'abord un format pouvant être lié en examinant l'extension, en regardant les propriétés puis en regardant à l'intérieur du fichier Exe, etc.

Il y a des applications comme Netbackup qui ont commencé sous Linux et ont été modifiées pour fonctionner dans un environnement Windows sans utiliser Wine IMHO, souvent celles-ci sont parmi les meilleures applications Windows les plus stables.

Lorsque Windows Apps. devenir indiscipliné généralement parce que certains de ces crochets détenus par l'application n'ont pas été complètement libérés et Windows pense qu'ils l'étaient (Memory Leaks). Lorsque Windows remet cet espace mémoire non libéré à une autre application Plantage et gravure.


2
D'une certaine manière, j'aimerais croire que Bill Gates a répondu à ma question ;-)
Nav
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.