Как я понимаю, эмуляторы (простым способом) переводят или заменяют вызовы функций программы с использованием функций системы X на функции, используемые системой Y, в которой выполняется программа. Винный проект утверждает, что Wine не является эмулятором, потому что:
Вместо того, чтобы имитировать внутреннюю логику Windows, такую как виртуальная машина или эмулятор, Wine переводит вызовы Windows API в вызовы POSIX на лету, устраняя потери производительности и памяти других методов и позволяя аккуратно интегрировать приложения Windows в рабочий стол.
Итак, как эмуляторы и виртуальные машины имитируют внутреннюю логику Windows на хост-системах, отличных от Windows? Разве это не путем перевода системных вызовов Windows в соответствующие вызовы хоста? Разница между эмуляторами и не-эмуляторами (такими как Wine) заключается в том, что эмуляторы эмулируют целую операционную систему, тогда приложение использует системные API-интерфейсы, не зная, что общается с эмулятором, в то время как не-эмуляторы напрямую переводят вызовы приложения в хост ( а приложение тоже может этого не знать)? Разве дополнительный уровень косвенности отличается только между эмуляторами и Wine?
Ответы:
Нет, или, по крайней мере, не в том смысле, в котором это делает WINE - буквально переводя системные вызовы один на один в пространстве пользователя. Эмулятор делает это абстрактно через более сложный маршрут; он не переводит системные вызовы напрямую.
Настоящий эмулятор создает виртуальную машину (например, x86-64), а не виртуальную операционную систему . Затем теоретически можно запустить любую операционную систему, ориентированную на этот стиль машины. Обычно «эмулятор» включает в себя операционную систему, но на самом деле это не то, что он эмулирует; ОС, которую он включает, такая же, как и на реальной машине.
Эмуляторы иногда используются для имитации оборудования, отличного от хост-компьютера, но также и оборудования, которое является точно таким же для запуска одной ОС внутри другой.
WINE отличается от этого тем, что на самом деле это не окна. Вы можете запустить эмулятор x86-64 с реальной копией окон внутри него, но это не то, что WINE. Их утверждение, что на самом деле он эффективнее, чем эмулятор, имеет смысл - издержки только на перевод системных вызовов, вероятно, ниже, чем на запуск виртуальной машины. Недостатком является то, что ВИНО может быть только окнами; вы не можете использовать его с какой-либо другой ОС, как с обычной виртуальной машиной .
источник
Рассмотрим виртуальные машины Java. Никакая JVM не эмулирует какую-либо другую, все они являются реализациями спецификации. Wine не эмулирует API Win32, это его реализация. Спецификации и реальность не обязательно совпадают, и у реализации Microsoft, и у Wine есть обходные пути, чтобы заставить глючный код работать, и не обязательно очевидно, какая реализация является лучшей целью для любого данного проекта.
источник
Wine - это оболочка, которая перехватывает вызовы API Windows и на лету преобразует их в соответствующие вызовы API Linux. Вместо этого эмулятор или виртуальная машина эмулирует физическую машину. Очевидно, что прокладка более эффективна, но может не полностью имитировать желаемую функциональность.
источник
Эмуляторы виртуализируют процессор и / или ОС, которые обычно запускают приложение Windows, создавая логику и поведение платформы ОС / процессора в приложении эмулятора, которое само работает поверх другой платформы ОС / процессора. Wine не виртуализирует поведение ОС / процессора Windows, а скорее запускает приложение Windows на том же уровне абстракции, что и ОС Windows. Это достигается путем повторной реализации Windows API для запуска непосредственно на платформе ОС / процессора на базе Unix. То есть Wine представляет собой повторную реализацию основных элементов ОС Windows, набора скомпилированных библиотек DLL, которые непосредственно переводят запросы вызовов Windows API в эквивалентный код на основе Unix, который напрямую взаимодействует с физическим процессором.
Это означает, что иногда существуют контексты времени выполнения, которые позволяют Wine + Linux запускать приложение Windows быстрее, чем сама Windows! Эмулятор никогда не мог бы иметь такую возможность, потому что его код был бы занят, имитируя платформу CPU / WinOS поверх платформы на основе Unix на более высоком уровне абстракции. В этом случае требуется больше переводов и интерфейсов для запуска приложения Windows. (См. Схему ниже)
Короче говоря, Wine - это повторная реализация Windows, а не эмуляция Windows.
источник