Como eu entendo os emuladores (de uma maneira simples), eles convertem ou substituem as chamadas de função de um programa usando funções do sistema X em funções usadas pelo sistema Y no qual o programa está sendo executado. O projeto Wine afirma que o vinho não é um emulador, porque:
Em vez de simular a lógica interna do Windows como uma máquina virtual ou emulador, o Wine converte chamadas da API do Windows em chamadas POSIX on-the-fly, eliminando as penalidades de desempenho e memória de outros métodos e permitindo integrar de maneira limpa os aplicativos do Windows à sua área de trabalho.
Bem, como emuladores e máquinas virtuais simulam a lógica interna do Windows em sistemas host que não são Windows? Não é isso, traduzindo as chamadas do sistema Windows nas respectivas chamadas do host? A diferença entre emuladores e não emuladores (como o Wine) é que os emuladores emulam um sistema operacional inteiro; o aplicativo usa as APIs do sistema sem saber que está falando com um emulador, enquanto os não emuladores traduzem diretamente as chamadas do aplicativo para as do host ( e o aplicativo também pode não saber)? O nível extra de indireção é o único diferente entre emuladores e vinho?
Respostas:
Não, ou pelo menos não no sentido que o WINE faz - traduzindo literalmente o sistema chama um para um no espaço do usuário. Um emulador faz isso abstratamente através de uma rota mais tortuosa; não converte chamadas do sistema diretamente.
Um emulador verdadeiro cria uma máquina virtual (por exemplo, x86-64), não um sistema operacional virtual . Em teoria, você pode executar qualquer sistema operacional direcionado para esse estilo de máquina. Geralmente, um "emulador" inclui o sistema operacional, mas não é exatamente isso que ele está emulando; o sistema operacional incluído é o mesmo que seria executado em uma máquina real.
Às vezes, os emuladores são usados para simular hardware diferente da máquina host, mas também hardware exatamente o mesmo para executar um sistema operacional dentro de outro.
O WINE é diferente disso, pois não é realmente o Windows. Você pode executar um emulador x86-64 com uma cópia real das janelas, mas não é isso que é o WINE. A alegação de que é realmente mais eficiente do que um emulador faz sentido - a sobrecarga para apenas traduzir chamadas do sistema é provavelmente menor do que a de executar uma VM. A desvantagem é que o WINE pode ser apenas janelas; você não pode usá-lo com outro sistema operacional, como faria com uma VM normal .
fonte
Considere Java Virtual Machines. Nenhuma JVM emula qualquer outra, elas são todas implementações de uma especificação. O vinho não está emulando a API do win32, é uma implementação dela. Especificações e realidade não necessariamente correspondentes, tanto a implementação da Microsoft quanto a do Wine têm soluções alternativas para fazer o código com erros funcionar, e não é necessariamente óbvio qual implementação é o melhor destino para um determinado projeto.
fonte
Wine é um calço que intercepta as chamadas de API do Windows e as converte rapidamente nas chamadas de API do Linux correspondentes. Um emulador ou máquina virtual emula uma máquina física. Obviamente, um calço é mais eficiente, mas pode não ser completamente capaz de imitar a funcionalidade desejada.
fonte
Os emuladores virtualizam o processador e / ou SO que normalmente executa um aplicativo do Windows criando a lógica e o comportamento da plataforma de SO / processador no aplicativo de emulador que é executado sobre outra plataforma de SO / processador. O Wine não virtualiza o comportamento do SO / processador do Windows, mas executa o aplicativo do Windows no mesmo nível de abstração do SO do Windows. Isso é feito reimplementando a API do Windows para executar diretamente na plataforma OS / processador baseada em Unix. Ou seja, o Wine é uma reimplementação dos elementos principais do sistema operacional Windows, um conjunto de DLLs compiladas que traduzem diretamente as solicitações de chamada da API do Windows em código equivalente baseado em Unix que se comunica diretamente com o processador físico.
Isso significa que, às vezes, existem contextos de tempo de execução que permitem que o Wine + Linux execute um aplicativo do Windows mais rápido que o próprio Windows! Um emulador nunca poderia ter essa possibilidade porque seu código estaria ocupado simulando a plataforma CPU / WinOS na parte superior da plataforma baseada em Unix em um nível mais alto de abstração. Nesse caso, são necessárias mais traduções e interfaces para executar um aplicativo do Windows. (Veja o diagrama abaixo)
Em suma, o Wine é uma reimplementação do Windows, não uma emulação do Windows.
fonte