Si je comprends bien les émulateurs (d'une manière simple), ils traduisent ou substituent les appels de fonction d'un programme utilisant les fonctions du système X en fonctions utilisées par le système Y dans lequel le programme est exécuté. Le projet Wine affirme que Wine n'est pas un émulateur, car:
Au lieu de simuler la logique interne de Windows comme une machine virtuelle ou un émulateur, Wine traduit les appels de l'API Windows en appels POSIX à la volée, éliminant les performances et les pénalités de mémoire d'autres méthodes et vous permettant d'intégrer proprement les applications Windows dans votre bureau.
Eh bien, comment les émulateurs et les machines virtuelles simulent la logique Windows interne sur les systèmes hôtes non Windows? N'est-ce pas en traduisant les appels système Windows dans les appels respectifs de l'hôte? La différence entre les émulateurs et les non-émulateurs (comme Wine) est que les émulateurs émulent tout un système d'exploitation, puis l'application utilise les API de ce système sans savoir qu'elle parle à un émulateur, tandis que les non-émulateurs traduisent directement les appels de l'application dans l'hôte ( et l'application peut également ne pas le savoir)? Le niveau supplémentaire d'indirection est-il le seul différent entre les émulateurs et Wine?
Réponses:
Non, ou du moins pas dans le sens où WINE le fait - en traduisant littéralement les appels système un à un dans l'espace utilisateur. Un émulateur le fait de manière abstraite via une route plus détournée; il ne traduit pas directement les appels système.
Un véritable émulateur crée une machine virtuelle (par exemple x86-64), pas un système d' exploitation virtuel . Vous pouvez ensuite en théorie exécuter n'importe quel système d'exploitation ciblant ce style de machine. Généralement, un "émulateur" inclut le système d'exploitation, mais ce n'est pas vraiment ce qu'il émule; le système d'exploitation qu'il inclut est le même que celui qui fonctionnerait sur une vraie machine.
Les émulateurs sont parfois utilisés pour simuler du matériel différent de la machine hôte, mais aussi du matériel qui est exactement le même pour exécuter un système d'exploitation à l'intérieur d'un autre.
WINE est différent de cela car il ne s'agit pas réellement de fenêtres. Vous pouvez exécuter un émulateur x86-64 avec une vraie copie de fenêtres à l'intérieur, mais ce n'est pas ce que WINE est. Leur affirmation selon laquelle il est en fait plus efficace qu'un émulateur est logique - le surcoût pour la simple traduction des appels système est probablement inférieur à celui de l'exécution d'une machine virtuelle. L'inconvénient est que WINE ne peut être que des fenêtres; vous ne pouvez pas l'utiliser avec un autre système d'exploitation comme vous le feriez avec une machine virtuelle normale .
la source
Considérez les machines virtuelles Java. Aucune JVM n'émule aucune autre, ce sont toutes des implémentations d'une spécification. Wine n'émule pas l'API Win32, c'est une implémentation de celui-ci. Les spécifications et la réalité ne correspondent pas nécessairement, l'implémentation de Microsoft et l'implémentation de Wine ont des solutions de contournement pour faire fonctionner le code de bogue, et il n'est pas nécessairement évident quelle implémentation est une meilleure cible pour un projet donné.
la source
Wine est une cale qui intercepte les appels API Windows et les convertit à la volée en appel (s) API Linux correspondants. Un émulateur ou une machine virtuelle émule à la place une machine physique. De toute évidence, une cale est plus efficace, mais peut ne pas être complètement capable d'imiter la fonctionnalité souhaitée.
la source
Les émulateurs virtualisent le processeur et / ou le système d'exploitation qui exécute normalement une application Windows en créant la logique et le comportement de la plate-forme de système d'exploitation / processeur dans l'application d'émulateur qui s'exécute elle-même au-dessus d'une autre plate-forme de système d'exploitation / processeur. Wine ne virtualise pas le comportement du système d'exploitation Windows / processeur, mais exécute plutôt l'application Windows au même niveau d'abstraction que le système d'exploitation Windows. Il le fait en réimplémentant l'API Windows pour s'exécuter directement sur la plate-forme OS / processeur basée sur Unix. Autrement dit, Wine est une réimplémentation des éléments principaux du système d'exploitation Windows, un ensemble de DLL compilées qui traduisent directement les demandes d'appel de l'API Windows en un code Unix équivalent qui communique directement avec le processeur physique.
Cela signifie qu'il existe parfois des contextes d'exécution qui permettront à Wine + Linux d'exécuter une application Windows plus rapidement que Windows lui-même! Un émulateur ne pourrait jamais avoir cette possibilité car son code serait occupé à simuler la plate-forme CPU / WinOS au-dessus de la plate-forme basée sur Unix à un niveau d'abstraction plus élevé. Dans ce cas, davantage de traductions et d'interfaces sont nécessaires pour exécuter une application Windows. (Voir schéma ci-dessous)
En bref, Wine est une réimplémentation de Windows, pas une émulation de Windows.
la source