Como o vinho não é um emulador?

22

Como eu entendo os emuladores (de uma maneira simples), eles traduzem 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 Wine não é um emulador, porque:

Instead of simulating internal Windows logic like a virtual machine or emulator, Wine translates Windows API calls into POSIX calls on-the-fly, eliminating the performance and memory penalties of other methods and allowing you to cleanly integrate Windows applications into your desktop.

Bem, como emuladores e máquinas virtuais simulam lógica interna do Windows em sistemas host não-Windows? Isso não é traduzir as chamadas do sistema Windows para as respectivas chamadas do host? A diferença entre emuladores e não emuladores (como o Wine) é que emuladores emulam todo um sistema operacional, então 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 o host ( e o aplicativo também pode não saber)? O nível extra de indireção é a única diferença entre emuladores e Wine?

    
por amyassin 11.11.2013 / 11:54

4 respostas

27

Well, how emulators and virtual machines simulate internal Windows logic on host non-Windows systems? Isn't that by translating Windows system calls into the host's own respective calls?

Não, ou pelo menos não no sentido que o WINE faz - literalmente traduzindo as chamadas do sistema uma a uma no espaço do usuário. Um emulador faz isso abstratamente através de uma rota mais circular; não traduz diretamente as chamadas do sistema.

Um verdadeiro emulador cria uma máquina virtual (por exemplo, x86-64), não um sistema operacional virtual . Em teoria, você pode executar qualquer sistema operacional que tenha como alvo esse estilo de máquina. Comumente, um "emulador" inclui o sistema operacional, mas não é exatamente isso que está sendo emulado; o sistema operacional que ele inclui é 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 o hardware que é exatamente o mesmo com o objetivo de executar um SO dentro de outro.

WINE é diferente disso porque não é realmente windows. Você poderia executar um Emulador x86-64 com uma cópia real do windows dentro dele, mas não é isso que o WINE é. Sua alegação de que é realmente mais eficiente do que um emulador faz sentido - a sobrecarga para apenas traduzir as chamadas do sistema é provavelmente menor do que a execução de uma VM. A desvantagem é que o WINE só pode ser windows; você não pode usá-lo com outro sistema operacional como você poderia uma VM normal .

    
por 11.11.2013 / 12:06
13

Considere o Java Virtual Machines. Nenhuma JVM emula qualquer outra, todas elas são implementações de uma especificação. O Wine não está emulando a API do win32, é uma implementação disso. Especificações e realidade não necessariamente correspondentes, tanto a implementação da Microsoft quanto a implementação do Wine têm soluções alternativas para fazer com que o código de bugs funcione, e não é necessariamente óbvio qual implementação é um alvo melhor para qualquer projeto.

    
por 11.11.2013 / 17:44
4

O Wine é um shim que intercepta as chamadas da API do Windows e as converte nas chamadas correspondentes da API do Linux. Um emulador ou uma máquina virtual, em vez disso, emula uma máquina física. Obviamente, um shim é mais eficiente, mas pode não ser completamente capaz de imitar a funcionalidade desejada.

    
por 11.11.2013 / 17:12
0

Os emuladores virtualizam o processador e / ou sistema operacional que normalmente executam um aplicativo do Windows, criando a lógica e o comportamento da plataforma OS / processador no aplicativo emulador que é executado em cima de outra plataforma OS / processador. O Wine não virtualiza o comportamento do sistema operacional / processador do Windows, mas executa o aplicativo Windows no mesmo nível de abstração do sistema operacional Windows. Ele faz isso reimplementando a API do Windows para executar diretamente na plataforma OS / processador baseada em Unix. Ou seja, Wine é uma reimplementação dos principais elementos do sistema operacional Windows, um conjunto de DLLs compiladas que traduzem diretamente as solicitações de chamadas da API do Windows para código baseado em Unix equivalente, que se comunica diretamente com o processador físico.

Isso significa que, às vezes, existem contextos de tempo de execução que permitirão que o Wine + Linux execute um aplicativo do Windows mais rapidamente do que o próprio Windows! Um Emulador nunca poderia ter essa possibilidade porque seu código estaria ocupado simulando a plataforma CPU / WinOS no topo da plataforma baseada em Unix em um nível mais alto de abstração. Nesse caso, mais traduções e interfaces são necessárias 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.

    
por 13.12.2017 / 10:11