Jak Wine nie jest emulatorem?


23

Jak rozumiem emulatory (w prosty sposób), tłumaczą lub zastępują wywołania funkcji programu używającego funkcji systemu X na funkcje używane przez system Y, w którym program jest uruchamiany. Projekt Wine twierdzi, że Wine Is Not an Emulator, ponieważ:

Zamiast symulować wewnętrzną logikę systemu Windows, taką jak maszyna wirtualna lub emulator, Wine tłumaczy wywołania API systemu Windows na wywołania POSIX w locie, eliminując kary wydajności i pamięci innych metod oraz umożliwiając czystą integrację aplikacji Windows na pulpicie.

Jak emulatory i maszyny wirtualne symulują wewnętrzną logikę systemu Windows na systemach innych niż Windows? Czy nie jest to tłumaczenie wywołań systemowych Windows na własne wywołania hosta? Czy różnica między emulatorami a nieemulatorami (takimi jak Wine) polega na tym, że emulatory emulują cały system operacyjny, wówczas aplikacja korzysta z interfejsów API tego systemu, nie wiedząc, że komunikuje się z emulatorem, podczas gdy nie-emulatory bezpośrednio tłumaczą wywołania aplikacji na host ( a aplikacja może tego nie wiedzieć)? Czy dodatkowy poziom pośredni jest jedyną różnicą między emulatorami i Wine?


7
Zwykle ludzie myślący komputerowo używają słowa „emulator”, mają na myśli emulator sprzętowy , oprogramowanie emulujące sprzęt. W tym sensie Wine nie jest emulatorem. Jednak w słownikowym znaczeniu tego słowa Wine emuluje Windows i w tym sensie można nazwać Wine emulatorem Windows.
Christoffer Hammarström,

1
WINE jest również nieco rozciągniętym backronymem, rodzajem humoru, który w pierwszej kolejności odwołuje się do osobowości wymaganej do stworzenia WINE.
RBerteig,

Odpowiedzi:


29

Jak emulatory i maszyny wirtualne symulują wewnętrzną logikę systemu Windows na systemach innych niż Windows? Czy nie jest to tłumaczenie wywołań systemowych Windows na własne wywołania hosta?

Nie, a przynajmniej nie w tym sensie, że robi to WINE - dosłownie tłumacząc systemowe wywołania w przestrzeni użytkownika. Emulator robi to abstrakcyjnie bardziej okrężną drogą; nie tłumaczy bezpośrednio wywołań systemowych.

Prawdziwy emulator tworzy maszynę wirtualną (np. X86-64), a nie wirtualny system operacyjny . Następnie możesz teoretycznie uruchomić dowolny system operacyjny ukierunkowany na ten styl komputera. Zwykle „emulator” obejmuje system operacyjny, ale tak naprawdę nie jest tym, co emuluje; system operacyjny, który zawiera, jest taki sam, jak działający na prawdziwej maszynie.

Emulatory są czasami używane do symulacji sprzętu innego niż komputer hosta, ale także sprzętu, który jest dokładnie taki sam w celu uruchamiania jednego systemu operacyjnego w innym.

WINO różni się od tego tym, że tak naprawdę nie jest oknem. Mógłbyś uruchomić emulator x86-64 z prawdziwą kopią okien w nim, ale to nie jest WINE. Ich twierdzenie, że jest faktycznie bardziej wydajne niż emulator, ma sens - narzut związany z tłumaczeniem wywołań systemowych jest prawdopodobnie niższy niż w przypadku uruchamiania maszyny wirtualnej. Wadą jest to, że WINO może być tylko oknami; nie można go używać z innym systemem operacyjnym, tak jak normalna maszyna wirtualna .


13

Rozważ maszyny wirtualne Java. Żadna JVM nie emuluje innych, wszystkie są implementacjami specyfikacji. Wine nie emuluje interfejsu API win32, jest to jego implementacja. Specyfikacje i rzeczywistość niekoniecznie pasują, zarówno implementacja Microsoftu, jak i implementacja Wine mają obejścia, które sprawiają, że kod błędu działa, i niekoniecznie jest oczywiste, która implementacja jest lepszym celem dla danego projektu.


4

Wine jest oszustwem, który przechwytuje wywołania API Windows i konwertuje je w locie na odpowiednie wywołania API Linux. Emulator lub maszyna wirtualna zamiast tego emuluje maszynę fizyczną. Oczywiście podkładka dystansowa jest bardziej wydajna, ale może nie być w stanie całkowicie naśladować pożądanej funkcjonalności.


0

Emulatory wirtualizują procesor i / lub system operacyjny, który zwykle uruchamia aplikację Windows, tworząc logikę i zachowanie platformy OS / procesor w aplikacji emulatora, która sama działa na innej platformie OS / procesor. Wine nie wirtualizuje zachowania systemu operacyjnego Windows / procesora, ale raczej uruchamia aplikację Windows na tym samym poziomie abstrakcji, co system operacyjny Windows. Odbywa się to poprzez ponowne wdrożenie Windows API, aby działał bezpośrednio na platformie OS / procesor opartej na Uniksie. Oznacza to, że Wine to ponowna implementacja podstawowych elementów systemu operacyjnego Windows, zestawu skompilowanych bibliotek DLL, które bezpośrednio tłumaczą żądania wywołań Windows API na równoważny kod oparty na Uniksie, który komunikuje się bezpośrednio z procesorem fizycznym.

Oznacza to, że czasami istnieją konteksty uruchomieniowe, które pozwolą Wine + Linux na uruchomienie aplikacji Windows szybciej niż sam Windows! Emulator nigdy nie miałby takiej możliwości, ponieważ jego kod byłby zajęty symulowaniem platformy CPU / WinOS na platformie Unix na wyższym poziomie abstrakcji. W takim przypadku potrzeba więcej tłumaczeń i interfejsów, aby uruchomić aplikację Windows. (Patrz schemat poniżej)

Krótko mówiąc, Wine to ponowna implementacja systemu Windows, a nie emulacja systemu Windows.

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.