Come Wine non è un emulatore?


23

Come capisco gli emulatori (in modo semplice), traducono o sostituiscono le chiamate di funzione di un programma usando le funzioni del sistema X in funzioni utilizzate dal sistema Y in cui il programma viene eseguito. Il progetto Wine afferma che Wine Is Not an Emulator, perché:

Invece di simulare la logica interna di Windows come una macchina virtuale o un emulatore, Wine converte le chiamate API di Windows in chiamate POSIX al volo, eliminando le penalità di prestazioni e memoria di altri metodi e consentendo di integrare in modo pulito le applicazioni Windows nel desktop.

Bene, in che modo gli emulatori e le macchine virtuali simulano la logica interna di Windows su sistemi host non Windows? Non è forse quello di tradurre le chiamate di sistema di Windows nelle rispettive chiamate dell'host? La differenza tra emulatori e non emulatori (come Wine) è che gli emulatori emulano un intero sistema operativo, quindi l'applicazione utilizza le API di quel sistema senza sapere che sta parlando con un emulatore, mentre i non emulatori traducono direttamente le chiamate dell'applicazione nell'host ( e l'applicazione potrebbe anche non saperlo)? Il livello extra di riferimento indiretto è l'unico diverso tra emulatori e Wine?


7
Normalmente quando le persone attente al computer usano la parola "emulatore", intendono un emulatore hardware , un software che emula l'hardware. In tal senso, Wine non è un emulatore. Tuttavia, nel senso del dizionario della parola, Wine emula Windows e in tal senso potresti chiamare Wine un emulatore di Windows.
Christoffer Hammarström,

1
WINE è anche un backronym leggermente allungato, una sorta di umorismo che fa appello alla personalità richiesta per creare WINE in primo luogo.
RBerteig,

Risposte:


29

Bene, in che modo gli emulatori e le macchine virtuali simulano la logica interna di Windows su sistemi host non Windows? Non è forse quello di tradurre le chiamate di sistema di Windows nelle rispettive chiamate dell'host?

No, o almeno non nel senso che fa WINE - traducendo letteralmente il sistema chiama uno a uno nello spazio utente. Un emulatore lo fa in modo astratto attraverso un percorso più tortuoso; non traduce direttamente le chiamate di sistema.

Un vero emulatore crea una macchina virtuale (ad esempio x86-64), non un sistema operativo virtuale . In teoria è quindi possibile eseguire qualsiasi sistema operativo destinato a quello stile di macchina. Comunemente un "emulatore" include il sistema operativo, ma non è proprio quello che sta emulando; il sistema operativo incluso è uguale a quello che verrebbe eseguito su una macchina reale.

Gli emulatori vengono talvolta utilizzati per simulare hardware diverso dal computer host, ma anche hardware identico allo scopo di eseguire un sistema operativo all'interno di un altro.

WINE è diverso da questo in quanto non è in realtà Windows. Potresti eseguire un emulatore x86-64 con una vera copia di Windows al suo interno, ma non è quello che è WINE. La loro affermazione che in realtà è più efficiente di un emulatore ha senso: l'overhead per la sola traduzione delle chiamate di sistema è probabilmente inferiore a quello di eseguire una VM. Lo svantaggio è che WINE può essere solo windows; non puoi usarlo con qualche altro sistema operativo come potresti fare con una normale VM .


13

Prendi in considerazione Java Virtual Machines. Nessun JVM emula nessun altro, sono tutte implementazioni di una specifica. Il vino non sta emulando l'API win32, è un'implementazione di esso. Le specifiche e la realtà non corrispondono necessariamente, sia l'implementazione di Microsoft che l'implementazione di Wine hanno soluzioni alternative per far funzionare il codice buggy, e non è necessariamente ovvio quale implementazione sia un obiettivo migliore per un determinato progetto.


4

Wine è uno shim che intercetta le chiamate API Windows e le converte al volo nelle chiamate API Linux corrispondenti. Un emulatore o una macchina virtuale invece emula una macchina fisica. Ovviamente uno spessore è più efficiente, ma potrebbe non essere completamente in grado di imitare la funzionalità desiderata.


0

Gli emulatori virtualizzano il processore e / o il sistema operativo che normalmente esegue un'applicazione Windows creando la logica e il comportamento della piattaforma del sistema operativo / processore nell'applicazione dell'emulatore che si esegue da solo su un'altra piattaforma del sistema operativo / processore. Wine non virtualizza il comportamento del sistema operativo / processore di Windows, ma esegue l'applicazione Windows allo stesso livello di astrazione del sistema operativo Windows. Lo fa reimplementando l'API di Windows per l'esecuzione diretta sulla piattaforma del sistema operativo / processore basata su Unix. Cioè, Wine è una reimplementazione degli elementi principali del sistema operativo Windows, un insieme di DLL compilate che traducono direttamente le richieste di chiamata API Windows in codice equivalente basato su Unix che comunica direttamente con il processore fisico.

Ciò significa che a volte ci sono contesti di runtime che permetteranno a Wine + Linux di eseguire un'applicazione Windows più velocemente di Windows stesso! Un emulatore non potrebbe mai avere questa possibilità perché il suo codice sarebbe impegnato a simulare la piattaforma CPU / WinOS sulla piattaforma basata su Unix con un livello di astrazione più elevato. In questo caso, per eseguire un'applicazione Windows sono necessarie più traduzioni e interfacce. (Vedi diagramma sotto)

In breve, Wine è una reimplementazione di Windows, non un'emulazione di Windows.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.