Як Вино не емулятор?


23

Як я розумію емулятори (простим способом), вони перекладають або замінюють виклики функцій програми з використанням функцій системи X на функції, що використовуються системою Y, в якій програма запускається. Проект Wine стверджує, що вино не є емулятором, оскільки:

Замість імітації внутрішньої логіки Windows на зразок віртуальної машини чи емулятора Wine перекладає виклики API Windows у виклики POSIX на ходу, виключаючи покарання за продуктивність та пам'ять інших методів та дозволяє чітко інтегрувати додатки Windows у свій робочий стіл.

Ну як емулятори та віртуальні машини моделюють внутрішню логіку Windows на хост-системах, які не є Windows? Хіба це не шляхом перекладу системних дзвінків Windows у власні відповідні дзвінки хоста? Чи різниця між емуляторами та неемуляторами (як Wine) полягає в тому, що емулятори емулюють цілу операційну систему, тоді додаток використовує ці системні API, не знаючи, що він розмовляє з емулятором, тоді як неемулятори безпосередньо переводять виклики програми в хост ( а додаток також може цього не знати)? Чи відрізняється зайвий рівень непрямості між емуляторами та Wine?


7
Зазвичай, коли люди з розумом користуються словом "емулятор", вони мають на увазі апаратний емулятор, програмне забезпечення, яке імітує обладнання. У цьому сенсі вино не є емулятором. Однак у словниковому розумінні цього слова Wine наслідує Windows, і в цьому сенсі ви можете назвати Wine емулятором Windows.
Крістоффер Хаммарстрем

1
ВИНО - це також злегка розтягнутий заднім словом, своєрідним гумором, який звертається до особистості, необхідної для створення ВИНИ в першу чергу.
RBerteig

Відповіді:


29

Ну як емулятори та віртуальні машини моделюють внутрішню логіку Windows на хост-системах, які не є Windows? Хіба це не шляхом перекладу системних дзвінків Windows у власні відповідні дзвінки хоста?

Ні, або, принаймні, не в тому сенсі, який робить WINE - шляхом буквального перекладу система викликає один до одного в просторі користувача. Емулятор робить це абстрактно більш схематичним маршрутом; він не переводить системні виклики безпосередньо.

Справжній емулятор створює віртуальну машину (наприклад, x86-64), а не віртуальну операційну систему . Тоді теоретично можна запустити будь-яку операційну систему, орієнтовану на цей стиль машини. Зазвичай "емулятор" включає в себе операційну систему, але це насправді не те, що це емуляція; ОС, до якої вона входить, така ж, як і в реальній машині.

Емулятори іноді використовуються для імітації апаратних засобів, відмінних від хост-машини, але також апаратних засобів, які точно однакові для роботи однієї ОС всередині іншої.

ВИНО відрізняється від цього тим, що це насправді не вікна. Ви можете запустити емулятор x86-64 з реальною копією вікон всередині нього, але це не те, що WINE. Їх твердження, що він насправді є більш ефективним, ніж емулятор, має сенс - накладні витрати на просто переклад системних викликів, ймовірно, нижчі, ніж у запуску VM. Недоліком є ​​те, що ВИНА можуть бути лише вікнами; ви не можете використовувати його з будь-якою іншою ОС, як ви могли звичайною машиною вільного зв'язку .


13

Розглянемо віртуальні машини Java. Жоден JVM не емулює жоден інший, вони всі реалізації специфікації. Вино не імітує програму win32 api, це її реалізація. Характеристики та реальність не обов'язково збігаються, як впровадження Microsoft, так і впровадження Wine мають обхідні шляхи для роботи кодового коду, і не обов'язково очевидно, яка реалізація є кращою ціллю для будь-якого проекту.


4

Вино - це лайм, який перехоплює виклики API API та перетворює їх на ходу у відповідні дзвінки API API. Емулятор або віртуальна машина замість цього емулює фізичну машину. Очевидно, що обшивка є більш ефективною, але може не повністю здатна наслідувати потрібну функціональність.


0

Емулятори віртуалізують процесор та / або ОС, яка зазвичай запускає додаток Windows, створюючи логіку та поведінку платформи ОС / процесор у програмі емулятора, яка сама працює над іншою платформою ОС / процесора. Wine не віртуалізує поведінку ОС / процесора, але запускає програму Windows на тому ж рівні абстракції, що й ОС Windows. Це робиться шляхом повторної реалізації API Windows для запуску безпосередньо на платформі ОС / процесора на базі Unix. Тобто Wine - це повторна реалізація основних елементів ОС Windows, набору компільованих DLL-файлів, які безпосередньо переводять запити на виклики API API в еквівалентний код на основі Unix, який безпосередньо спілкується з фізичним процесором.

Це означає, що іноді існують контексти виконання, які дозволять Wine + Linux запускати програму Windows швидше, ніж сама Windows! Емулятор ніколи не мав такої можливості, тому що його код буде зайнятий імітацією CPU / WinOS платформи поверх платформи на базі Unix на більш високому рівні абстракції. У цьому випадку для запуску програми Windows потрібно більше перекладів та інтерфейсів. (Див. Схему нижче)

Словом, Wine - це повторна реалізація Windows, а не емуляція Windows.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.