Como entiendo los emuladores (de una manera simple), traducen o sustituyen las llamadas de función de un programa que utilizan funciones del sistema X en funciones utilizadas por el sistema Y en el que se ejecuta el programa. El proyecto Wine afirma que Wine no es un emulador porque:
En lugar de simular la lógica interna de Windows como una máquina virtual o un emulador, Wine traduce las llamadas API de Windows en llamadas POSIX sobre la marcha, eliminando el rendimiento y las penalizaciones de memoria de otros métodos y permitiéndole integrar limpiamente las aplicaciones de Windows en su escritorio.
Bueno, ¿cómo los emuladores y las máquinas virtuales simulan la lógica interna de Windows en sistemas host que no son Windows? ¿No es eso traduciendo las llamadas del sistema de Windows a las llamadas respectivas del host? La diferencia entre los emuladores y los no emuladores (como Wine) es que los emuladores emulan un sistema operativo completo, luego la aplicación usa las API del sistema sin saber que está hablando con un emulador, mientras que los no emuladores traducen directamente las llamadas de la aplicación al host ( y la aplicación también puede no saberlo) ¿El nivel extra de indirección es la única diferencia entre los emuladores y Wine?
Respuestas:
No, o al menos no en el sentido en que lo hace WINE, al traducir literalmente las llamadas del sistema de una a una en el espacio del usuario. Un emulador hace esto de manera abstracta a través de una ruta más tortuosa; no traduce las llamadas del sistema directamente.
Un verdadero emulador crea una máquina virtual (por ejemplo, x86-64), no un sistema operativo virtual . Entonces, en teoría, puede ejecutar cualquier sistema operativo dirigido a ese estilo de máquina. Comúnmente, un "emulador" incluye el sistema operativo, pero eso no es realmente lo que está emulando; El sistema operativo que incluye es el mismo que se ejecuta en una máquina real.
Los emuladores a veces se utilizan para simular hardware diferente de la máquina host, pero también hardware que es exactamente el mismo con el fin de ejecutar un sistema operativo dentro de otro.
WINE es diferente de esto en que no es realmente windows. Podría ejecutar un emulador x86-64 con una copia real de Windows dentro, pero eso no es lo que es WINE. Su afirmación de que en realidad es más eficiente que un emulador tiene sentido: la sobrecarga por solo traducir las llamadas al sistema es probablemente menor que la de ejecutar una VM. La desventaja es que WINE solo puede ser Windows; no puede usarlo con otro sistema operativo como lo haría con una VM normal .
fuente
Considere las máquinas virtuales Java. Ninguna JVM emula a ninguna otra, todas son implementaciones de una especificación. Wine no está emulando el win32 api, es una implementación del mismo. Las especificaciones y la realidad no coinciden necesariamente, tanto la implementación de Microsoft como la implementación de Wine tienen soluciones para hacer que el código defectuoso funcione, y no es necesariamente obvio qué implementación es un mejor objetivo para un proyecto determinado.
fuente
Wine es una cuña que intercepta las llamadas de la API de Windows y las convierte de inmediato en las llamadas correspondientes de la API de Linux. En cambio, un emulador o máquina virtual emula una máquina física. Obviamente, una cuña es más eficiente, pero puede no ser completamente capaz de imitar la funcionalidad deseada.
fuente
Los emuladores virtualizan el procesador y / o sistema operativo que normalmente ejecuta una aplicación de Windows al crear la lógica y el comportamiento de la plataforma del sistema operativo / procesador en la aplicación de emulador que se ejecuta sobre otra plataforma de sistema operativo / procesador. Wine no virtualiza el comportamiento del procesador / sistema operativo Windows, sino que ejecuta la aplicación de Windows al mismo nivel de abstracción que el sistema operativo Windows. Lo hace al volver a implementar la API de Windows para que se ejecute directamente en la plataforma de procesador / SO basada en Unix. Es decir, Wine es una reimplementación de los elementos centrales del sistema operativo Windows, un conjunto de archivos DLL compilados que traducen directamente las solicitudes de llamadas de la API de Windows a un código equivalente basado en Unix que se comunica directamente con el procesador físico.
Esto significa que a veces hay contextos de tiempo de ejecución que permitirán a Wine + Linux ejecutar una aplicación de Windows más rápido que el propio Windows. Un emulador nunca podría tener esa posibilidad porque su código estaría ocupado simulando la plataforma CPU / WinOS sobre la plataforma basada en Unix en un nivel más alto de abstracción. En este caso, se necesitan más traducciones e interfaces para ejecutar una aplicación de Windows. (Ver diagrama abajo)
En resumen, Wine es una reimplementación de Windows, no una emulación de Windows.
fuente