Nach meinem Verständnis übersetzen oder ersetzen Emulatoren (auf einfache Weise) die Funktionsaufrufe eines Programms, das Funktionen von System X verwendet, in Funktionen, die von System Y verwendet werden, auf dem das Programm ausgeführt wird. Das Weinprojekt behauptet, dass Wein kein Emulator ist, weil:
Anstatt die interne Windows-Logik wie eine virtuelle Maschine oder einen Emulator zu simulieren, übersetzt Wine Windows-API-Aufrufe direkt in POSIX-Aufrufe, wodurch die Leistung und der Speicherbedarf anderer Methoden entfallen und Sie Windows-Anwendungen sauber in Ihren Desktop integrieren können.
Wie simulieren Emulatoren und virtuelle Maschinen die interne Windows-Logik auf Nicht-Windows-Hostsystemen? Ist das nicht so, dass Windows-Systemaufrufe in die entsprechenden Aufrufe des Hosts übersetzt werden? Ist der Unterschied zwischen Emulatoren und Nicht-Emulatoren (wie Wine), dass Emulatoren ein ganzes Betriebssystem emulieren, dann verwendet die Anwendung diese System-APIs, ohne zu wissen, dass sie mit einem Emulator spricht, während Nicht-Emulatoren die Aufrufe der Anwendung direkt in die Aufrufe des Hosts übersetzen ( und die anwendung kann es auch nicht wissen)? Ist die zusätzliche Indirektionsebene der einzige Unterschied zwischen Emulatoren und Wine?
Antworten:
Nein, oder zumindest nicht in dem Sinne, wie es WINE tut - indem es Systemaufrufe buchstäblich eins zu eins im Benutzerbereich übersetzt. Ein Emulator tut dies abstrakt über einen umständlicheren Weg; Systemaufrufe werden nicht direkt übersetzt.
Ein echter Emulator erstellt eine virtuelle Maschine (z. B. x86-64), kein virtuelles Betriebssystem . Sie können dann theoretisch jedes Betriebssystem ausführen, das auf diesen Maschinentyp abzielt. Üblicherweise enthält ein "Emulator" das Betriebssystem, aber das ist nicht wirklich das, was es emuliert. Das Betriebssystem, das es enthält, ist dasselbe, das auf einem realen Computer ausgeführt werden würde.
Emulatoren werden manchmal verwendet, um Hardware zu simulieren, die sich vom Host-Computer unterscheidet, aber auch Hardware, die genau gleich ist, um ein Betriebssystem in einem anderen auszuführen.
WEIN unterscheidet sich davon dadurch, dass es sich eigentlich nicht um Fenster handelt. Sie könnten einen x86-64-Emulator mit einer echten Kopie von Windows ausführen, aber das ist nicht WINE. Ihre Behauptung, dass es tatsächlich effizienter ist als ein Emulator, ist sinnvoll - der Aufwand für die reine Übersetzung von Systemaufrufen ist wahrscheinlich geringer als der für die Ausführung einer VM. Der Nachteil ist, dass WEIN nur Fenster sein kann; Sie können es nicht mit einem anderen Betriebssystem verwenden, wie Sie es von einer normalen VM gewohnt sind .
quelle
Betrachten Sie Java Virtual Machines. Keine JVM emuliert eine andere, sie sind alle Implementierungen einer Spezifikation. Wine emuliert die Win32-API nicht, sondern implementiert sie. Die technischen Daten und die Realität stimmen nicht unbedingt überein. Sowohl die Implementierung von Microsoft als auch die Implementierung von Wine haben Problemumgehungen, damit fehlerhafter Code funktioniert, und es ist nicht unbedingt klar, welche Implementierung für ein bestimmtes Projekt besser geeignet ist.
quelle
Wine ist ein Shim, der Windows-API-Aufrufe abfängt und diese im Handumdrehen in die entsprechenden Linux-API-Aufrufe konvertiert. Ein Emulator oder eine virtuelle Maschine emuliert stattdessen eine physische Maschine. Offensichtlich ist ein Shim effizienter, kann jedoch die gewünschte Funktionalität möglicherweise nicht vollständig imitieren.
quelle
Emulatoren virtualisieren den Prozessor und / oder das Betriebssystem, auf dem normalerweise eine Windows-Anwendung ausgeführt wird, indem sie die Logik und das Verhalten der Betriebssystem- / Prozessorplattform in der Emulatoranwendung erstellen, die selbst auf einer anderen Betriebssystem- / Prozessorplattform ausgeführt wird. Wine virtualisiert nicht das Windows-Betriebssystem / Prozessor-Verhalten, sondern führt die Windows-Anwendung auf derselben Abstraktionsebene aus wie das Windows-Betriebssystem. Dazu wird die Windows-API erneut implementiert, um sie direkt auf der Unix-basierten Betriebssystem- / Prozessorplattform auszuführen. Wine ist eine Neuimplementierung der Kernelemente des Windows-Betriebssystems, einer Reihe kompilierter DLLs, die Windows-API-Aufrufanforderungen direkt in entsprechenden Unix-basierten Code umwandeln, der direkt mit dem physischen Prozessor kommuniziert.
Dies bedeutet, dass es manchmal Laufzeitkontexte gibt, in denen Wine + Linux eine Windows-Anwendung schneller ausführen kann als Windows selbst! Ein Emulator könnte diese Möglichkeit niemals haben, da sein Code damit beschäftigt wäre, die CPU / WinOS-Plattform auf der Unix-basierten Plattform auf einer höheren Abstraktionsebene zu simulieren. In diesem Fall sind weitere Übersetzungen und Schnittstellen erforderlich, um eine Windows-Anwendung auszuführen. (Siehe Abbildung unten)
Kurz gesagt, Wine ist eine Neuimplementierung von Windows, keine Emulation von Windows.
quelle