Если вы считаете, что GIMP не ровня Photoshop, и не можете жить без офиса от Microsoft.
1. Wine
Название Wine расшифровывается как Wine Is Not an Emulator. Это своего рода прослойка между приложениями Windows и системой Linux. Он позволяет устанавливать и запускать многие популярные Windows-программы и работать с ними так, как будто это родные приложения Linux.
Чтобы установить Wine, воспользуйтесь соответствующей командой.
1. Ubuntu, Debian, Mint:
sudo dpkg --add-architecture i386
wget -nc https://dl.winehq.org/wine-builds/Release.key
sudo apt-key add Release.key
sudo add-apt-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ artful main"
sudo apt-get update
sudo apt-get install --install-recommends winehq-stable
2. Fedora:
sudo dnf install winehq-stable
3. openSUSE:
sudo zypper install wine
4. Arch, Manjaro:
sudo pacman -S wine
Когда Wine установлен, откройте его через ваше меню приложений или с помощью команды winecfg
. При первом запуске Wine может попросить установить некоторые дополнительные пакеты — позвольте ему это сделать. После этого все Windows-программы формата EXE ассоциируются в системе с Wine.
Теперь скачайте установщик нужного вам приложения Windows, найдите папку с ним в вашем файловом менеджере и откройте файл. Либо введите команду wine путь_к_приложению
.
Windows-приложение запустится и будет работать так же, как и всегда. Если вы открыли установочный файл, начнётся установка приложения — как в Windows. Если программа не требует установки, вы сможете начать работать с ней немедленно.
Не все приложения могут быть установлены и запущены в Wine, хотя количество поддерживаемых впечатляет. Полный список можно посмотреть здесь.
2. Winetricks
Wine — неплохой инструмент, однако интерфейс у него оставляет желать лучшего. Если вы намучились с этой программой, но так и не добились результата, попробуйте Winetricks. У неё приятный графический интерфейс для установки и запуска Windows-приложений, в котором куда проще разобраться новичку.
Установить Winetricks можно так:
1. Ubuntu, Debian, Mint:
sudo apt-get install winetricks
2. Fedora:
sudo dnf install winetricks
3. openSUSE:
sudo zypper install winetricks
4. Arch, Manjaro:
sudo pacman -S winetricks
Winetricks позволяет установить различные версии Microsoft Office и Photoshop, плеер foobar2000 и множество других программ. Поддерживаются и такие популярные игры, как Call of Duty, Call of Duty 4, Call of Duty 5, Biohazard и Grand Theft Auto: Vice City. Некоторые программы загружаются автоматически, для других будет предложено вставить установочный носитель. И, естественно, вы можете открывать собственноручно скачанные файлы формата EXE.
3. PlayOnLinux
PlayOnLinux — ещё один удобный инструмент для запуска Windows-приложений в Linux. Как и Winetricks, он обладает простым графическим интерфейсом. Но, в отличие от него, PlayOnLinux позволяет вам выбирать конкретную версию Wine для того или иного приложения. Это полезно, если какая-то из нужных вам программ некорректно работает с новыми версиями Wine. В целом PlayOnLinux выглядит куда симпатичнее и практичнее, чем Winetricks.
Чтобы установить PlayOnLinux, выполните в терминале одну из следующих команд:
1. Ubuntu, Debian, Mint:
sudo apt-get install playonlinux
2. Fedora:
sudo dnf install playonlinux
3. OpenSUSE:
sudo zypper install playonlinux
4. Arch, Manjaro:
sudo pacman -S playonlinux
В меню установки PlayOnLinux можно найти множество предварительно сконфигурированных приложений и игр, которые вы можете загрузить и установить парой щелчков. Кроме того, PlayOnLinux можно скармливать собственные EXE-установщики. Приложение заботливо выберет за вас версию Wine и создаст значок установленной программы на рабочем столе.
4. Crossover
Изредка бесплатные PlayOnLinux и Winetricks не справляются с установкой какого-нибудь особенно привередливого приложения. В таком случае вам может помочь Crossover. Эта программа очень проста в использовании. Вам достаточно указать, какое приложение вы хотите установить, и подсунуть Crossover установочный файл. Всё остальное будет сделано за вас.
Лицензия Crossover на год стоит 39,95 доллара, но у программы есть и бесплатная пробная версия. Рекомендуется сначала установить необходимое вам приложение в ней, чтобы убедиться, что оно работает корректно.
Crossover →
5. VirtualBox
Если ваше приложение упорно отказывается запускаться в перечисленных выше программах, можно пойти на решительные меры и установить его в виртуальной машине. Учтите, что она отнимает гораздо больше системных ресурсов, поэтому использовать её стоит в крайних случаях.
Для запуска приложения в виртуалке вам понадобится установочный образ Windows в формате ISO. Загрузите и установите VirtualBox, создайте в нём виртуальную машину, укажите ей ISO с Windows, а затем просто установите систему как обычно.
Неоспоримый плюс виртуальной машины — в ней работает полноценная операционная система, а значит, запустится абсолютно всё. Минус — прожорливость в плане системных ресурсов, да и тратиться на лицензию Windows для виртуалки накладно.
VirtualBox →
Читайте также 🧐
- 6 задач, с которыми Linux справляется лучше, чем Windows
- Как реанимировать Windows и сохранить данные с помощью live-дистрибутива Linux
- Как обмениваться файлами по воздуху между Windows, macOS, Linux, iOS и Android
Although it’s hard for us Linux fanatics to delve into the world of Windows, we all need to embrace Windows from time to time for some specific tasks. Despite all its rewards, Linux is still not a household name among regular computer users, and the chances are that most of your non-technical friends use Windows as their primary system. So, if you want to share some standard software or play the latest games, Windows is still the way to go. However, we Linux folks can’t shift to Windows permanently and overlook the flexibility Linux has been affording us over the years. Luckily, a comprehensive set of powerful Windows emulators for Linux exists to make our life more comfortable and allow us to benefit both systems concurrently.
Best Windows Emulators for Linux
We’ve selected a compelling set of robust Windows emulators for Linux that will allow you to utilize some exceptional but Windows-specific software. If you’re a die-hard gamer, stop worrying, as we’ve also outlined some great methods that will enable you to run your favorite games from your Linux machine seamlessly.
Although the title emphasizes Linux Windows emulator, think of the below picks as workarounds that let you run Windows programs in Linux instead.
1. Wine
Wine is the de-facto Windows emulator for Linux users who want to run Windows applications, software, and games in their Unix systems effortlessly. In its fourth major release, Wine allows you to run your favorite Windows-only programs without any extra hassle.
It’s very easy to install Wine on virtually every POSIX-compliant operating system, including Linux, macOS, & BSD. Moreover, Wine supports many modern-day applications out of the box, thus eliminating the need to tweak them inside your Linux environment.
Features of Wine
- Wine comes with pre-built support for the X-11 window system and allows users to stream their display on remote X terminals.
- Wine supports DirectX (up to version 11) based games and applications out of the box and Windows MultiMedia (WinMM) layers.
- You can interface Windows programs with your Linux system devices, such as sound devices, keyboards, modems, serial devices, ASPI scanners, and such, very easily.
- Wine Linux has excellent API coverage, making it a viable choice for running everyday Windows programs effortlessly.
Get Wine
2. VMware Workstation
VMware is a powerful virtualization platform enabling Linux users to run Windows applications seamlessly inside their machines. You can think of VMware as software that allows you to run an operating system inside another operating system.
This is a very popular Linux Windows emulator among Linux enthusiasts who need to run Windows-based applications regularly. Although proprietary, VMware is arguably among the best Windows emulators for Linux you can use.
Features of VMware Workstation
- VMware Workstation allows users to run multiple instances of Windows operating systems on Linux machines.
- It is paid software, but you can utilize the VMware Workstation Player, its free version, to run Windows programs.
- VMware Workstation allows your system to share up to 3 GB of shared video memory and supports OpenGL out of the box.
- This Linux Windows emulator supports DirectX 10.1, 4K resolution, Wayland protocol, SSH login, Virtual networking, and many more.
Get VMware Workstation
3. CrossOver Linux
CrossOver Linux is, without any doubt, one of the best Windows emulators for Linux you can use on any Linux machine. It is, in effect, a Microsoft Windows compatibility layer that enables Linux users to run their favorite Windows apps inside their Linux system.
CrossOver Linux is based on Wine and packs a select set of widely used Microsoft Windows applications. It integrates seamlessly well with modern GNOME and KDE-based Linux distributions.
Features of CrossOver Linux
- Installing standard Windows applications is much easier in CrossOver Linux than in other ordinary Linux Windows emulators.
- CrossOver Linux doesn’t require you to buy a Windows license like most Windows emulators for Linux require.
- Applications run from CrossOver Linux are faster because they do not depend on virtual machines.
- CrossOver Linux offers Bottles, a unique feature that allows separate Windows environments to be packaged and self-contained with user-selected programs.
Get CrossOver Linux
4. QEMU
QEMU is a robust virtual machine emulator and hardware visualizer that can run Windows programs directly inside a Linux system. It can act in different ways, and you’ll be primarily using it as a full system emulator for running a Windows system inside Linux.
You can then install applications developed for Windows in your Linux system. It is maintained very well and takes care of bugs and errors faster than most Windows emulators for Linux.
Features of QEMU
- QEMU can save the current state of installed Windows systems alongside the running apps and restore them accurately.
- Users can access and utilize their Linux system’s peripherals, including hard disks, CD-ROM drives, network cards, audio interfaces, and USB devices, directly from QEMU.
- QEMU is written in the C programming language and is faster than most Windows emulators for Linux.
- It comes out with a GNU GPL license, allowing users to tweak the emulator as required.
Get QEMU
5. VirtualBox
VirtualBox is a free hypervisor that can act as a compelling Windows emulator for Linux. A hypervisor is a virtualization platform that allows users to install and run an operating system inside from another. So, Linux users can install VirtualBox and utilize it for running Microsoft Windows applications in their Linux system.
Although many people don’t like the notion of using a virtual machine as their Linux Windows emulator, as of now, it is the best method if you want all the functionalities of a working Windows system.
Features of VirtualBox
- VirtualBox is written in C, C++, and x86 assembly language, thus offering faster performance than most contemporary Windows emulators for Linux.
- It is maintained by Oracle, which updates it very frequently and patches bugs pretty fast.
- Corporations widely use VirtualBox to power resource-intensive clouds and for testing software.
- Oracle has made the source public, and thus VirtualBox can be modified by open-source enthusiasts as per their requirements.
Get VirtualBox
6. PlayOnLinux
PlayOnLinux is an impressive graphical frontend built on top of the Wine compatibility layer for Linux. It aims to make it easier for users to run their favorite Windows applications such as video games, Microsoft Office, Microsoft Internet Explorer, and Quicken, as well as many other applications directly inside their Linux computer.
PlayOnLinux removes many of the redundancies you’d have to face otherwise when installing these and provides an easy-to-deal solution for every Linux user.
Features of PlayOnLinux
- PlayOnLinux isolates Windows environments and apps, much like CrossOver does with Bottles.
- Users can create flexible bash scripts for automating their Windows apps’ configuration in this Windows emulator for Linux.
- It comes under an open-source GNU GPL license which allows Linux users to modify the source without requiring explicit permission.
- PlayOnLinux is written in the Python programming language and is thus easy to understand and customize.
Get PlayOnLinux
7. Lutris
Lutris is an exceptionally robust and powerful open source gaming platform built for GNU/Linux. It allows users to play a compelling set of video games available only for Microsoft Windows systems.
It provides a robust interface that enables users to install, configure, and launch Windows-only games acquired from any source. It performs relatively well at playing many games than most Windows emulators for Linux.
Features of Lutris
- Lutris employs robust installation scripts curated by community members to provide an optimal experience of modern Windows games.
- This Linux Windows emulator comes with pre-built support for various games, including games for both Windows and retro gaming consoles.
- Lutris is entirely free to use and provides a top-notch gaming performance matched by only a handful of Windows emulators for Linux.
- Popular games supported by Lutris include The Elder Scrolls, League of Legends, Overwatch, The Witcher 3, Warframe, Battlefield V, and World of Warcraft.
Get Lutris
8. Q4Wine
Q4Wine is not an entirely new Windows emulator for Linux. It is, instead, a Qt4 fork of the popular Wine software. It aims to provide a handy and flexible GUI frontend for Wine, making managing the emulator easier.
If you’re having trouble installing and configuring Wine in your everyday Linux machine, you can easily opt-in for Q4Wine. It offers every functionality Wine offers and binds a compelling user interface that is easy to deal with and enables Windows applications to run flawlessly.
Features of Q4Wine
- Q4Wine allows users to run two different versions of Wine simultaneously.
- Due to its robust user interface, it is very easy to access and control multiple Wine processes with Q4wine.
- Q4wine comes with in-built support for the Wine AppDB browser and FuseISO\Embedded FuseISO mount profiles.
- Thanks to its GNU GPL license, the source can be modified easily to accommodate new features.
Get Q4Wine
9. Steam Play
Steam Play is like a breeze of fresh air for PC gamers who prefer not to switch to Windows entirely from their Linux system. Valve released Steam Play to enable Linux users to access their favorite Windows games directly from their Linux machines, and we can say they did a fair job with it. It supports most titles, but a slight lag in performance can be experienced when playing these games in Linux.
Features of Steam Play
- Users need to install the Steam Beta Client in their Linux systems to access Steam Play.
- Steam Play supports most, if not all, Steam games that can be played on major Windows systems.
- It leverages Wine under the hood to enable Linux users to run their favorite Windows-only games.
- Steam Play utilizes Vulkan to enable users to run games that require DirectX support.
Know More
10. JSLinux
JSLinux is one of the most innovative Windows emulators for Linux you can use today to power Windows applications inside your Linux machine. This Linux Windows emulator is different from others because JSLinux doesn’t require you to install a new virtualization platform. Instead, it is run directly from inside your web browser. Fabrice Bellard, the brain behind projects like QEMU and FFmpeg, wrote this mesmerizing PC/x86 emulator.
Features of JSLinux
- JSLinux is written using JavaScript and can be used to benchmark JavaScript applications or runtimes effectively.
- It can only run software available for the Windows 2000 SP4 pack in Linux browsers but provides access to the command prompt and standard Windows filesystem.
- Apart from traditional Windows apps, JSLinux can emulate devices such as PCI bus, VirtIO console, VirtIO 9P filesystem, VGA display, frame buffer, and many more.
- It allows users to connect to the internet from the emulated Windows system but limits connections to two connections.
Get JSLinux
11. Vineyard
The vineyard is a collection of open-source software and utilities that aim to make running Windows applications simpler for Linux folks. More accurately, Vineyard tries to integrate Wine with everyday Windows software like Office and Microsoft Money, and easy and effortless. It also enables Linux users to develop programs that sync seamlessly with Wine and are portable across different systems.
Features of Vineyard
- The vineyard has built-in support for CrossOver Linux and automatically detects supported Wine features.
- It allows users to run Windows applications inside their Linux system’s terminal.
- Vineyard comes with nautilus-wine, an extension for Nautilus, GNOME’s default file manager, that allows users to configure Windows executables properly.
- The vineyard-preferences configuration utility lets users separate their Wine configurations just like CrossOver Linux does with Bottles.
Get Vineyard
12. WinConn
WinConn is one of the most lightweight and straightforward Windows emulators for Linux that can run Windows apps directly on Linux machines. It aims to simplify the creation, management, and integration of remote Windows software in traditional Linux systems like Ubuntu, Mint, Arch, and Elementary. If you’re looking for a Windows emulator for Linux free of charge, WinConn might be a viable solution.
Features of WinConn
- WinConn is aimed towards network administrators and only facilitates remote Windows applications like TeamViewer and Chrome Remote Desktop.
- It allows sysadmins to access and manage local folders from remote tools and redirect local printers.
- It works with several different Windows installations, including Windows XP, Vista, 7, and Windows Server 2008.
Get WinConn
13. bochs
bochs is arguably one of the best Windows emulators for Linux when it comes to portability. It is a robust, flexible, and open source IA-32 (x86) PC emulator that allows you to install Windows applications inside your Linux machine.
bochs is very lightweight and requires minimal resources to emulate Windows-based applications. However, it is known for crashing several times when running very resource-intensive Windows applications like Microsoft Office for an extended period of time.
Features of bochs
- bochs is very lightweight and fast due to its low-overhead design and implementation in C++.
- It can emulate various Windows operating systems such as DOS, Windows 95/98, Windows 2000, XP, and Vista.
- bochs can compile and execute instructions for a range of architectures, including 386, 486, Pentium/PentiumII/PentiumIII/Pentium4, or x86-64 CPUs.
Get bochs
14. bhyve
bhyve, pronounced as “bee hive” is a hypervisor system that allows Linux users to emulate different versions of Windows operating systems and run applications available only on the Windows platform.
It can emulate a wide range of traditional Windows environments, including Windows XP, Vista, 7, 8.1, and 10. This Windows emulator for Linux can also run MS Windows Server editions.
Features of bhyve
- It is developed on top of FreeBSD and tested on various GNU Linux distributions, including RHEL, CentOS, Debian, Fedora, OpenSUSE, and Ubuntu.
- This Linux Windows emulator comes with in-built support for UEFI, OmniOS, Hyper-V, and AHCI devices.
- bhyve is open source and can be extended easily without any restrictions.
Get bhyve
15. Cedega
Cedega is an extremely powerful and robust Windows emulator for Linux, which aims specifically at enabling Linux users to play games that are only available for Windows systems.
It was formerly known as WineX and was a fork of Wine by TransGaming Technologies. Although the software is currently discontinued and no future updates are scheduled, you can still use this as a workaround when playing old-school Windows games in Linux.
Features of Cedega
- It supports pixel shaders 3.0, vertex shaders 3.0, 3D acceleration, and DirectX support for up to version 9.
- Cadega comes with in-built support for the Joystick, including remapping axes.
- Cedega features a list of popular Windows-based games, including Diablo 2, Fallout 2, Soldier of Fortune 2, and other retro games.
Get Cedega
Ending Notes
Thanks to a comprehensive list of Linux Windows emulators, it is possible to run Windows applications on Linux. However, people often get confused when choosing the best Windows emulator for Linux for various reasons. Some of them include the lack of modernized Windows emulators for Linux, legacy or old-school virtualizers that often require excess tweaking to begin with, and of course, improper documentation.
Hopefully, our guide will provide you with the essential insights necessary to find the best solution. If you need to run Windows applications almost every day or play cutting-edge games, we’d recommend dual-boot Windows alongside Linux.
Хотя нам, фанатикам Linux, сложно погрузиться в мир Windows, кажется, нам всем нужно время от времени принимать Windows для решения некоторых конкретных задач. Несмотря на все свои преимущества, Linux по-прежнему не является именем нарицательным среди обычных пользователей компьютеров, и есть вероятность, что большинство ваших нетехнических друзей используют Windows в качестве своей основной системы. Итак, если вы хотите поделиться стандартным программным обеспечением или поиграть в эти новейшие игры, Windows по-прежнему подходит. Однако мы, люди, работающие с Linux, не можем постоянно переходить на Windows и упускать из виду гибкость, которую Linux предоставляет нам на протяжении многих лет. К счастью, существует обширный набор мощных эмуляторов Windows для Linux, которые делают нашу жизнь более комфортной и позволяют нам использовать обе системы одновременно.
Лучшие эмуляторы Windows для Linux
Мы выбрали убедительный набор надежных эмуляторов Windows для Linux, которые позволят вам использовать некоторые исключительные, но специфичные для Windows программы. Если вы заядлый геймер, перестаньте беспокоиться, поскольку мы также изложили несколько отличных методов, которые позволят вам без проблем запускать свои любимые игры с вашего компьютера Linux. Хотя в названии подчеркивается эмулятор Linux Windows, представленные ниже варианты можно рассматривать как обходные пути, позволяющие запускать программы Windows в Linux.
1. Вино
Вино де-факто Windows эмулятор для Linux пользователи, которые хотят легко запускать приложения, программное обеспечение и игры Windows в своих системах Unix. В настоящее время в своем четвертом крупном выпуске Wine позволяет без лишних хлопот запускать ваши любимые программы только для Windows. Wine очень легко установить практически на любую POSIX-совместимую операционную систему, включая Linux, macOS и BSD. Более того, Wine поддерживает множество современных приложений из коробки, что избавляет от необходимости настраивать их в среде Linux.
Особенности вина
- Wine поставляется с встроенной поддержкой оконной системы X-11 и позволяет пользователям транслировать свой дисплей на удаленные X-терминалы.
- Вино поддерживает DirectX (до версии 11) игры и приложения из коробки и слои Windows MultiMedia (WinMM).
- Вы можете очень легко связывать программы Windows с вашими системными устройствами Linux, такими как звуковые устройства, клавиатуры, модемы, последовательные устройства, сканеры ASPI и т. Д.
- Wine Linux имеет отличное покрытие API, что делает его жизнеспособным выбором для легкого запуска повседневных программ Windows.
Получить вино
2. VMware Workstation
VMware — это мощная платформа виртуализации, которая позволяет пользователям Linux легко запускать приложения Windows на своих машинах Linux. Вы можете думать о VMware как о программном обеспечении, которое позволяет запускать операционную систему внутри другой операционной системы. Это очень популярный эмулятор Linux для Windows среди энтузиастов Linux, которым необходимо регулярно запускать приложения на базе Windows. Хотя VMware является частной собственностью, она, пожалуй, является одним из лучших эмуляторов Windows для Linux, которые вы можете использовать.
Особенности VMware Workstation
- VMware Workstation позволяет пользователям запускать несколько экземпляров операционных систем Windows на машинах Linux.
- Это платное программное обеспечение, но вы можете использовать бесплатную версию VMware Workstation Player для запуска программ Windows.
- VMware Workstation позволяет вашей системе совместно использовать до 3 ГБ общей видеопамяти и поддерживает OpenGL из коробки.
- Этот эмулятор Linux Windows поддерживает DirectX 10.1, разрешение 4K, Протокол Wayland, Вход по SSH, виртуальная сеть и многое другое.
Получите VMware Workstation
3. CrossOver Linux
CrossOver Linux это, без сомнения, один из лучших эмуляторов Windows для Linux, который вы можете использовать на любой машине Linux. По сути, это уровень совместимости с Microsoft Windows, который позволяет пользователям Linux запускать свои любимые приложения Windows внутри своей системы Linux. CrossOver Linux основан на Wine и содержит избранный набор широко используемых приложений Microsoft Windows. Он легко интегрируется с современным GNOME и Linux на основе KDE раздачи.
Особенности CrossOver Linux
- Установка стандартных приложений Windows в CrossOver Linux намного проще, чем в других обычных эмуляторах Linux Windows.
- CrossOver Linux не требует покупки лицензии Windows, как того требует большинство эмуляторов Windows для Linux.
- Приложения, запускаемые из CrossOver Linux, работают быстрее, потому что они не зависят от виртуальных машин.
- CrossOver Linux предлагает Bottles, уникальную функцию, которая позволяет объединять отдельные среды Windows в отдельные пакеты с выбранными пользователем программами.
Получите CrossOver Linux
4. QEMU
QEMU — это надежный эмулятор виртуальных машин и аппаратный визуализатор, который может запускать программы Windows непосредственно внутри системы Linux. Он может действовать по-разному, и в первую очередь вы будете использовать его как полноценный эмулятор системы для запуска системы Windows внутри Linux. Затем вы можете установить приложения, разработанные для Windows, в вашу систему Linux. Он очень хорошо обслуживается и устраняет ошибки быстрее, чем большинство эмуляторов Windows для Linux.
Особенности QEMU
- QEMU может сохранять текущее состояние установленных систем Windows вместе с запущенными приложениями и точно восстанавливать их.
- Пользователи могут получать доступ и использовать периферийные устройства своей системы Linux, включая жесткие диски, приводы CD-ROM, сетевые карты, аудиоинтерфейсы и устройства USB, непосредственно из QEMU.
- QEMU написан на языке программирования C и работает быстрее, чем большинство эмуляторов Windows для Linux.
- Он поставляется с лицензией GNU GPL, которая позволяет пользователям настраивать эмулятор по мере необходимости.
Получить QEMU
5. VirtualBox
VirtualBox — это бесплатный гипервизор, который может выступать в роли мощного эмулятора Windows для Linux. Гипервизор — это не что иное, как платформа виртуализации, которая позволяет пользователям устанавливать и запускать одну операционную систему внутри другой. Итак, пользователи Linux могут установить VirtualBox и использовать его для запуска приложений Microsoft Windows в своей системе Linux. Хотя многим людям не нравится идея использования виртуальной машины в качестве эмулятора Linux для Windows, на данный момент это лучший метод, если вам нужны все функции работающей системы Windows.
Особенности VirtualBox
- VirtualBox написан на C, C ++ и x86. язык ассемблера, что обеспечивает более высокую производительность, чем большинство современных эмуляторов Windows для Linux.
- Он поддерживается Oracle, который очень часто обновляет его и довольно быстро исправляет ошибки.
- Корпорации широко используют VirtualBox для поддержки ресурсоемких облаков и для тестирования программного обеспечения.
- Oracle сделала исходный код общедоступным, и, таким образом, VirtualBox может быть изменен энтузиастами открытого исходного кода в соответствии с их требованиями.
Получить VirtualBox
6. PlayOnLinux
PlayOnLinux — это впечатляющий графический интерфейс, построенный поверх уровня совместимости Wine для Linux. Он призван упростить пользователям запуск их любимых приложений Windows, таких как видеоигры, Майкрософт офис, Microsoft Internet Explorer, Quicken, а также многие другие приложения прямо внутри своего компьютера Linux. PlayOnLinux устраняет многие излишки, с которыми вам пришлось бы столкнуться при их установке, и предоставляет простое решение для каждого пользователя Linux.
Особенности PlayOnLinux
- PlayOnLinux обеспечивает изоляцию сред и приложений Windows, так же как CrossOver с Bottles.
- Пользователи могут создавать гибкие сценарии bash для автоматизации настройки своих приложений Windows в этом эмуляторе Windows для Linux.
- Он поставляется под лицензией GNU GPL с открытым исходным кодом, которая позволяет пользователям Linux изменять исходный код, не требуя явного разрешения.
- PlayOnLinux написан на Язык программирования Python и поэтому его легко понять и настроить.
Получить PlayOnLinux
7. Lutris
Лутрис — исключительно прочный и мощный игровая платформа с открытым исходным кодом, созданная для GNU / Linux. Он позволяет пользователям играть в захватывающий набор видеоигр, доступных только для систем Microsoft Windows. Он предоставляет надежный интерфейс, который позволяет пользователям устанавливать, настраивать и запускать игры только для Windows, полученные из любого источника. Он относительно хорошо работает во многих играх, чем большинство эмуляторов Windows для Linux.
Особенности Lutris
- Lutris использует надежные сценарии установки, разработанные членами сообщества для обеспечения оптимального взаимодействия с современными играми для Windows.
- Этот эмулятор Linux для Windows имеет встроенную поддержку широкого спектра игр, включая игры как для Windows, так и для игровых консолей в стиле ретро.
- Lutris полностью бесплатен в использовании и обеспечивает первоклассную игровую производительность, сопоставимую только с горсткой эмуляторов Windows для Linux.
- Популярные игры поддерживаемые Lutris, включают The Elder Scrolls, League of Legends, Overwatch, The Witcher 3, Warframe, Battlefield V и World of Warcraft.
Получите Lutris
8. Q4Wine
Q4Wine — не совсем новый эмулятор Windows для Linux. Вместо этого это форк Qt4 популярного программного обеспечения Wine. Его цель — предоставить удобный и гибкий интерфейс GUI для Wine и упростить управление эмулятором. Если у вас возникли проблемы с установкой и настройкой Wine на повседневной машине с Linux, вы можете легко подписаться на Q4Wine. Он предлагает все функции, которые предлагает Wine, и связывает привлекательный пользовательский интерфейс, с которым легко работать, и позволяет приложениям Windows работать безупречно.
Особенности Q4Wine
- Q4Wine позволяет пользователям запускать две разные версии Wine одновременно.
- Благодаря надежному пользовательскому интерфейсу Q4wine очень легко получить доступ к нескольким процессам Wine и управлять ими.
- Q4wine имеет встроенную поддержку браузера Wine AppDB и профилей монтирования FuseISO \ Embedded FuseISO.
- Исходный код можно довольно легко изменить для включения новых функций благодаря лицензии GNU GPL.
Получить Q4Wine
9. Steam Играть
Steam Play — это ветерок свежего воздуха для компьютерных геймеров, которые предпочитают не полностью переходить на Windows со своей системы Linux. Valve выпустила Steam Play, чтобы пользователи Linux могли получать доступ к своим любимым играм для Windows прямо со своих компьютеров Linux, и мы можем сказать, что они неплохо справились с этим. Он поддерживает большинство заголовков, но может наблюдаться небольшое отставание в производительности, когда играть в эти игры в Linux.
Особенности Steam Play
- Пользователям необходимо установить бета-клиент Steam в своих системах Linux, чтобы получить доступ к Steam Play.
- Steam Play поддерживает большинство, если не все игры Steam, в которые можно играть в основных системах Windows.
- Он использует Wine для того, чтобы пользователи Linux могли запускать свои любимые игры только для Windows.
- Steam Играть использует Vulkan, чтобы пользователи могли запускать игры, требующие поддержки DirectX.
Узнать больше
10. JSLinux
JSLinux — один из самых инновационных эмуляторов Windows для Linux, который вы можете использовать сегодня для поддержки приложений Windows внутри вашей Linux-машины. Этот эмулятор Linux Windows отличается от других тем, что JSLinux не требует установки новой платформы виртуализации. Вместо этого он запускается прямо из вашего веб-браузера. Фабрис Беллар, мозг, стоящий за такими проектами, как QEMU и FFmpeg, написал этот завораживающий эмулятор ПК / x86.
Особенности JSLinux
- JSLinux написан с использованием JavaScript и может использоваться для эффективного тестирования приложений или среды выполнения JavaScript.
- Он может запускать только программное обеспечение, доступное для пакета Windows 2000 SP4 в браузерах Linux, но обеспечивает доступ к командной строке и стандартной файловой системе Windows.
- Помимо традиционных приложений для Windows, JSLinux может также эмулировать такие устройства, как шина PCI, консоль VirtIO, файловая система VirtIO 9P, дисплей VGA, буфер кадра и многие другие.
- Он позволяет пользователям подключаться к Интернету из эмулируемой системы Windows, но ограничивает подключения двумя подключениями.
Получить JSLinux
11. Виноградник
Виноградник — это коллекция программного обеспечения с открытым исходным кодом и служебные программы, которые призваны упростить запуск приложений Windows для пользователей Linux. Точнее, Vineyard пытается интегрировать Wine с обычным программным обеспечением Windows, таким как Office, Microsoft Деньги, и легко и без усилий. Он также позволяет пользователям Linux разрабатывать программы, которые легко синхронизируются с Wine и переносятся в разные системы.
Особенности виноградника
- Vineyard имеет встроенную поддержку CrossOver Linux и автоматически определяет поддерживаемые функции Wine.
- Это позволяет пользователям запускать приложения Windows внутри со своих Терминал системы Linux.
- Vineyard поставляется с nautilus-wine, расширением для Nautilus, файлового менеджера GNOME по умолчанию, который позволяет пользователям правильно настраивать исполняемые файлы Windows.
- Утилита настройки виноградников позволяет пользователям разделять свои конфигурации Wine точно так же, как CrossOver Linux делает с Bottles.
Получить виноградник
12. WinConn
WinConn — один из самых легких и простых эмуляторов Windows для Linux, который может запускать приложения Windows непосредственно на машинах Linux. Он направлен на упрощение создания, управления и интеграции удаленного программного обеспечения Windows в традиционные системы Linux, такие как Ubuntu, Mint, Arch, Elementary. Если вы ищете бесплатный эмулятор Windows для Linux, WinConn может оказаться для вас жизнеспособным решением.
Особенности WinConn
- WinConn нацелен на сетевые администраторы и поддерживает только удаленные приложения Windows, такие как TeamViewer и Chrome Remote Desktop.
- Он позволяет системным администраторам получать доступ к локальным папкам и управлять ими с помощью удаленных инструментов и перенаправлять локальные принтеры.
- Он работает с несколькими различными установками Windows, включая Windows XP, Vista, 7 и Windows Server 2008.
Получите WinConn
13. Bochs
bochs, пожалуй, один из лучших эмуляторов Windows для Linux, когда дело доходит до переносимости. Это надежный, гибкий эмулятор ПК с открытым исходным кодом IA-32 (x86), который позволяет вам устанавливать приложения Windows на вашем компьютере с Linux. bochs очень легкий и требует минимальных ресурсов для эмуляции приложений на базе Windows. Однако он известен тем, что несколько раз дает сбой при запуске очень ресурсоемких приложений Windows, таких как Microsoft Office, в течение длительного периода времени.
Особенности бохов
- bochs очень легкий и быстрый из-за его низкозатратного дизайна и реализации на C ++.
- Он может эмулировать различные операционные системы Windows, такие как DOS, Windows 95/98, Windows 2000, XP и Vista.
- bochs может компилировать и выполнять инструкции для различных архитектур, включая процессоры 386, 486, Pentium / PentiumII / PentiumIII / Pentium4 или x86-64.
Получите bochs
14. бхиве
bhyve, произносимое как «пчелиный улей», — это система гипервизора, которая позволяет пользователям Linux эмулировать различные версии операционных систем Windows и запускать приложения, доступные только на платформе Windows. Он может эмулировать широкий спектр традиционных сред Windows, включая Windows XP, Vista, 7, 8.1 и 10. Этот эмулятор Windows для Linux также может запускать редакции MS Windows Server.
Особенности бхиве
- Он разработан поверх FreeBSD и протестирован в различных дистрибутивах GNU Linux, включая RHEL, CentOS, Debian, Fedora, OpenSUSE и Ubuntu.
- Этот эмулятор Linux для Windows имеет встроенную поддержку устройств UEFI, OmniOS, Hyper-V и AHCI.
- bhyve имеет открытый исходный код и может быть легко расширен без каких-либо ограничений.
Получить бхиве
15. Cedega
Cedega — чрезвычайно мощный и надежный эмулятор Windows для Linux, специально предназначенный для того, чтобы пользователи Linux могли играть в игры, доступные только для систем Windows. Ранее он назывался WineX и был форком Wine от TransGaming Technologies. Хотя программное обеспечение в настоящее время прекращено и никаких будущих обновлений не запланировано, вы все равно можете использовать это как обходной путь при игре в старые игры для Windows в Linux.
Особенности Cedega
- Он поддерживает пиксельные шейдеры 3.0, вершинные шейдеры 3.0, 3D-ускорение и поддержку DirectX до версии 9.
- Cadega имеет встроенную поддержку джойстика, включая переназначение осей.
- Cedega предлагает список популярных игр для Windows, включая Diablo 2, Fallout 2, Soldier of Fortune 2 и другие ретро-игры.
Получить Cedega
Конечные заметки
Благодаря исчерпывающему списку эмуляторов Linux для Windows можно запускать приложения Windows в Linux. Однако мы часто видим, как люди по разным причинам путаются при выборе лучшего эмулятора Windows для Linux. Некоторые из них включают отсутствие модернизированных эмуляторов Windows для Linux, устаревших или старых виртуализаторов, которые часто требуют дополнительных настроек для начала, и, конечно же, неправильной документации.
Надеюсь, наше руководство предоставило вам важную информацию, необходимую, чтобы найти лучшее решение для вас. Если вам нужно запускать приложения Windows почти каждый день или играть передовые игры, мы рекомендуем не только Linux, но и Windows с двойной загрузкой.
Wine — это свободное программное обеспечение для запуска Windows-приложений на нескольких POSIX-совместимых операционных системах, включая Linux, macOS и BSD.
Если вы любите Linux, то наверняка когда-то запускали Wine. Возможно, для какой-то «важной» программы Windows, у которой нет аналога под Линуксом, или поиграться. Забавный факт: даже Steam Deck от Valve запускает игры через оболочку на основе Wine (она называется Proton).
За последний год я намучился с отладчиком, который позволяет одновременно дебажить и Wine, и Windows-приложение в нём. Разобраться во кишочках Wine оказалось очень интересно! Я-то раньше много им пользовался, но никогда не понимал механику целиком. Можно взять файл Windows — и просто запустить его в Linux без каких-либо изменений. Если вы хотите знать, как это сделано, добро пожаловать под кат.
Дисклеймер. В статье реальность сильно упрощается, а многие детали игнорируются. Текст даёт общее представление, как работает Wine.
© «Время приключений» (1 сезон, 18 серия) — прим. пер.
Wine — не эмулятор!
Прежде чем разбираться в работе Wine, нужно сказать, чем он НЕ является. Вообще, W.I.N.E. — это рекурсивный акроним, который расшифровывается как «Wine Is Not an Emulator». Почему? Потому что есть куча отличных эмуляторов и для старых архитектур, и для современных консолей, а Wine принципиально реализован по-другому. Давайте вкратце рассмотрим, как вообще работают эмуляторы.
Представьте простую игровую приставку, которая понимает две инструкции:
push <value>
— пушит заданное значение в стекsetpxl
— достаёт три значения из стека и рисует пиксель с цветомarg1
в точке(arg2, arg3)
(вполне достаточно для визуализации классных демок, верно?)
> dump-instructions game.rom
...
# рисуем красную точку по координатам (10,10)
push 10
push 10
push 0xFF0000
setpxl
# рисуем зелёную точку по координатам (15,15)
push 15
push 15
push 0x00FF00
setpxl
Бинарный файл игры (или картридж ROM) представляет собой последовательность таких инструкций, которые аппаратное обеспечение может загрузить в память и выполнить. Нативное железо выполняет их в натуральном режиме, но как запустить старый картридж на современном ноуте? Для этого делаем эмулятор — программу, которая загружает ROM из картриджа в оперативную память и выполняет его инструкции. Это интерпретатор или виртуальная машина, если хотите. Реализация эмулятора для нашей приставки с двумя инструкциями будет довольно простой:
enum Opcode {
Push(i32),
SetPixel,
};
let program: Vec<Opcode> = read_program("game.rom");
let mut window = create_new_window(160, 144); // Виртуальный дисплей 160x144 пикселей
let mut stack = Vec::new(); // Стек для передачи аргументов
for opcode in program {
match opcode {
Opcode::Push(value) => {
stack.push(value);
}
Opcode::SetPixel => {
let color = stack.pop();
let x = stack.pop();
let y = stack.pop();
window.set_pixel(x, y, color);
}
}
}
Настоящие эмуляторы намного сложнее, но основная идея та же: поддерживать некоторый контекст (память, регистры и т.д.), обрабатывать ввод (клавиатура/мышь) и вывод (например, рисование в каком-то окне), разбирать входные данные (ROM) и выполнять инструкции одну за другой.
Разработчики Wine могли пойти по этому пути. Но есть две причины, почему они так не поступили. Во-первых, эмуляторы и виртуальные машины тормозные по своей сути — там огромный оверхед на программное выполнение каждой инструкции. Это нормально для старого железа, но не для современных программ (тем более видеоигр, которые требовательны к производительности). Во-вторых, в этом нет необходимости! Linux/macOS вполне способны запускать двоичные файлы Windows нативно, их нужно только немного подтолкнуть…
Давайте скомпилируем простую программу для Linux и Windows и сравним результат:
int foo(int x) {
return x * x;
}
int main(int argc) {
int code = foo(argc);
return code;
}
Слева — Linux, справа — Windows
Результаты заметно отличаются, но набор инструкций фактически один и тот же: push
, pop
, mov
, add
, sub
, imul
, ret
.
Если бы у нас был «эмулятор», который понимает эти инструкции, то смог бы выполнить обе программы. И такой «эмулятор» существует — это наш CPU.
Как Linux запускает бинарники
Прежде чем запускать чужеродный двоичный файл, давайте разберёмся, как запускается под Linux родной бинарник.
❯ cat app.cc
#include <stdio.h>
int main() {
printf("Hello!\n");
return 0;
}
❯ clang app.cc -o app
❯ ./app
Hello! # работает!
Довольно просто, но давайте копнём глубже. Если сделать .app
?
❯ ldd app
linux-vdso.so.1 (0x00007ffddc586000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f743fcdc000)
/lib64/ld-linux-x86-64.so.2 (0x00007f743fed3000)
❯ readelf -l app
Elf file type is DYN (Position-Independent Executable file)
Entry point 0x1050
There are 13 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040
0x00000000000002d8 0x00000000000002d8 R 0x8
INTERP 0x0000000000000318 0x0000000000000318 0x0000000000000318
0x000000000000001c 0x000000000000001c R 0x1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
...
Самое главное, что .app
— это динамически исполняемый файл. Он зависит от некоторых динамических библиотек и требует их присутствия в рантайме. Иначе не запустится. Другой интересный момент — запрос интерпретатора (requesting program interpreter
в последней строке листинга). Какой ещё интерпретатор? Я думал, что C++ — компилируемый язык, в отличие от Python…
В данном контексте интерпретатор — это «динамический загрузчик». Специальный инструмент, которая запускает исходную программу: разрешает и загружает её зависимости, а затем передаёт ей управление.
❯ ./app
Hello! # Работает!
❯ /lib64/ld-linux-x86-64.so.2 ./app
Hello! # Тоже работает!
# Домашнее задание: запустите это и попробуйте понять смысл выдачи.
❯ LD_DEBUG=all /lib64/ld-linux-x86-64.so.2 ./app
При запуске исполняемого файла ядро Linux определяет, что файл динамический и требует загрузчика. Затем оно запускает загрузчик, который выполняет всю работу. Это можно проверить, если запустить программу под отладчиком:
❯ lldb ./app
(lldb) target create "./app"
Current executable set to '/home/werat/src/cpp/app' (x86_64).
(lldb) process launch --stop-at-entry
Process 351228 stopped
* thread #1, name = 'app', stop reason = signal SIGSTOP
frame #0: 0x00007ffff7fcd050 ld-2.33.so`_start
ld-2.33.so`_start:
0x7ffff7fcd050 <+0>: movq %rsp, %rdi
0x7ffff7fcd053 <+3>: callq 0x7ffff7fcdd70 ; _dl_start at rtld.c:503:1
ld-2.33.so`_dl_start_user:
0x7ffff7fcd058 <+0>: movq %rax, %r12
0x7ffff7fcd05b <+3>: movl 0x2ec57(%rip), %eax ; _dl_skip_args
Process 351228 launched: '/home/werat/src/cpp/app' (x86_64)
Мы видим, что первая выполненная инструкция находится в библиотеке ld-2.33.so
, а не в бинарнике .app
.
Подводя итог, запуска динамически связанного исполняемого файла в Linux выглядит примерно так:
- Ядро загружает образ (≈ двоичный файл) и видит, что это динамический исполняемый файл
- Ядро загружает динамический загрузчик (
ld.so
) и передаёт ему управление - Динамический загрузчик разрешает зависимости и загружает их
- Динамический загрузчик возвращает управление исходному двоичному файлу
- Оригинальный двоичный файл начинает выполнение в
_start()
и в конечном итоге доходит доmain()
Понятно, почему исполняемый файл Windows не запускается в Linux — у него другой формат. Ядро просто не знает, что с ним делать:
❯ ./HalfLife4.exe
-bash: HalfLife4.exe: cannot execute binary file: Exec format error
Однако если пропустить шаги с первого по четвёртый и каким-то образом перескочить на пятый, то теоретически должно сработать, верно? Ведь с точки зрения операционной системы что значит «запустить» бинарный файл?
В каждом исполняемом файле есть раздел .text
со списком сериализованных инструкций CPU:
❯ objdump -drS app
app: file format elf64-x86-64
...
Disassembly of section .text:
0000000000001050 <_start>:
1050: 31 ed xor %ebp,%ebp
1052: 49 89 d1 mov %rdx,%r9
1055: 5e pop %rsi
1056: 48 89 e2 mov %rsp,%rdx
1059: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp
105d: 50 push %rax
105e: 54 push %rsp
105f: 4c 8d 05 6a 01 00 00 lea 0x16a(%rip),%r8 # 11d0 <__libc_csu_fini>
1066: 48 8d 0d 03 01 00 00 lea 0x103(%rip),%rcx # 1170 <__libc_csu_init>
106d: 48 8d 3d cc 00 00 00 lea 0xcc(%rip),%rdi # 1140 <main>
1074: ff 15 4e 2f 00 00 call *0x2f4e(%rip) # 3fc8 <__libc_start_main@GLIBC_2.2.5>
107a: f4 hlt
107b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
...
Чтобы «запустить» бинарный файл, ОС загружает его в память (в частности, раздел .text
), устанавливает указатель текущей инструкции на адрес, где находится код, и всё — исполняемый файл типа «запущен». Как сделать это для исполняемых файлов Windows?
Легко! Просто возьмём код из исполняемого файла Windows, загрузим в память, направим %rip
в нужное место — и CPU с радостью выполнит этот код! Если архитектура процессора одинаковая, то процессору вообще без разницы, откуда выполнять ассемблерные инструкции.
Hello, Wine!
По сути, Wine — это «динамический загрузчик» для исполняемых файлов Windows. Это родной двоичный файл Linux, поэтому может нормально запускаться, и он знает, как работать с EXE и DLL. То есть своего рода эквивалент ld-linux-x86-64.so.2
:
# запуск бинарника ELF
❯ /lib64/ld-linux-x86-64.so.2 ./app
# запуск бинарника PE
❯ wine64 HalfLife4.exe
Здесь wine64
загружает исполняемый файл Windows в память, анализирует его, выясняет зависимости, определяет, где находится исполняемый код (т. е. раздел .text
), и переходит в этот код.
Примечание. В действительности он переходит к чему-то вроде
ntdll.dll!RtlUserThreadStart()
, это точка входа в «пространство пользователя» в мире Windows. Потом вmainCRTStartup()
(эквивалент_start
), и в самmain()
.
На данный момент наша Linux-система выполняет код, изначально скомпилированный для Windows, и всё вроде бы работает. За исключением системных вызовов.
Системные вызовы
Системные вызовы (syscall) — вот где основные сложности. Это вызовы к функциям, которая реализованы не в бинарнике или динамических библиотеках, а в родной ОС. Набор системных вызовов представляет системный API операционной системы. В нашем случае это Windows API.
Примеры системных вызовов в Linux: read
, write
, open
, brk
, getpid
Примеры в Windows: NtReadFile
, NtCreateProcess
, NtCreateMutant
😱
Системные вызовы не являются обычными вызовами функций в коде. Открытие файла, например, должно выполняться самим ядром, поскольку именно оно следит за файловыми дескрипторами. Поэтому приложению нужен способ как бы «прервать своё выполнение» и передать управление ядру (эта операция обычно называется переключением контекста).
Набор системных функций и способы их вызова в каждой ОС разные. Например, в Linux для вызова функции read()
наш бинарник записывает в регистр %rdi
дескриптор файла, в регистр %rsi
— указатель буфера, а в %rdx
— количество байт для чтения. Однако в ядре Windows нет функции read()
! Ни один из аргументов не имеет там смысла. Бинарник Windows использует свой способ выполнения системных вызовов, который не сработает в Linux. Не будем здесь углубляться детали системных вызовов, например, вот отличная статья о реализации в Linux.
Скомпилируем ещё одну небольшую программу и сравним сгенерированный код в Linux и Windows:
#include <stdio.h>
int main() {
printf("Hello!\n");
return 0;
}
Слева — Linux, справа — Windows
На этот раз мы вызываем функцию из стандартной библиотеки, которая в конечном итоге выполняет системный вызов. На скриншоте выше версия Linux вызывает puts
, а версия Windows — printf
. Эти функции из стандартных библиотек (libc.so
в Linux, ucrtbase.dll
в Windows) для упрощения взаимодействия с ядром. Под Linux сейчас частенько собирают статически связанные бинарники, не зависимые от динамических библиотек. В этом случае реализация puts
встроена в двоичный файл, так что libc.so
не задействуется в рантайме.
Под Windows до недавнего времени «системные вызовы bcgjkmpjdfkb только вредоносные программы»[нет источника] (вероятно, это шутка автора — прим. пер.). Обычные приложения всегда зависят от kernel32.dll/kernelbase.dll/ntdll.dll
, где скрывается низкоуровневая магия тайного общения с ядром. Приложение просто вызывает функцию, а библиотеки заботятся об остальном:
источник
В этом месте вы наверное поняли, что будет дальше. 😏
Трансляция системных вызовов в рантайме
А что, если «перехватывать» системные вызовы во время выполнения программы? Например, когда приложение вызывает NtWriteFile()
, мы берём управление на себя, вызываем write()
, а потом возвращаем результат в ожидаемом формате — и возвращаем управление. Должно сработать. Быстрое решение в лоб для примера выше:
// HelloWorld.exe
lea rcx, OFFSET FLAT:`string'
call printf
↓↓
// «Фальшивый» ucrtbase.dll
mov edi, rcx // Преобразование аргументов в Linux ABI
call puts@PLT // Вызов реальной реализации Linux
↓↓
// Real libc.so
mov rdi, <stdout> // запись в STDOUT
mov rsi, edi // указатель на "Hello"
mov rdx, 5 // сколько символов писать
syscall
По идее, можно сделать собственную версию ucrtbase.dll
со специальной реализацией printf
. Вместо обращения к ядру Windows она будет следовать формату интерфейсов Linux ABI и вызывать функцию write
из библиотеки libc.so
. Однако на практике мы не можем изменять код этой библиотеки по ряду причин — это муторно и сложно, нарушает DRM, приложение может статически ссылаться на ucrtbase.dll
и т. д.
Поэтому вместо редактирования бинарника мы внедримся в промежуток между исполняемым файлом и ядром, а именно в ntdll.dll
. Это «ворота» в ядро, и Wine действительно предоставляет собственную реализацию. В последних версиях Wine решение состоит из двух частей: ntdll.dll
(библиотека PE) и ntdll.so
(библиотека ELF). Первая часть — это тоненькая прокладка, которая просто перенаправляет вызовы в ELF-аналог. А уже он содержит специальную функцию __wine_syscall_dispatcher
, которая выполняет магию преобразования текущего стека из Windows в Linux и обратно.
Поэтому в Wine системный вызов выглядит следующим образом:
Диспетчер системных вызовов — это мост между мирами Windows и Linux. Он заботится о соглашениях и стандартах для системных вызовов: выделяет пространство стека, перемещает регистры и т. д. Когда выполнение переходит к библиотеке Linux (ntdll.so
), мы можем свободно использовать любые нормальные интерфейсы Linux (например, libc
или syscall
), реально читать/записывать файлы, занимать/отпускать мьютексы и так далее.
И это всё?
Звучит почти слишком просто. Но так и есть. Во-первых, под Windows много разных API. Они плохо документированы и имеют известные (и неизвестные, ха-ха) ошибки, которые следует воспроизвести в точности. (Вспомните, как при разработке Windows 95 туда скопировали утечку памяти из SimCity, чтобы популярная игра не крашилась в новой ОС. Возможно, такие специфические вещи приходится воспроизводить под Linux для корректной работы конкретных программ — прим. пер.). Большая часть исходного кода Wine — это реализация различных Windows DLL.
Во-вторых, системные вызовы можно выполнять по-разному. Технически ничто не мешает Windows-приложению выполнить прямой системный вызов через syscall
, и в идеале это тоже должно работать (как мы уже говорили, Windows-игры делают всякие безумные вещи). В ядре Linux специальный механизм для обработки таких ситуаций, который, конечно, добавляет сложности.
В-третьих, весь этот бардак 32 vs 64 бит. Есть много старых 32-битных игр, которые никогда не перепишут на 64 бита. В Wine есть поддержка обеих платформ. И это тоже плюс к общей сложности.
В-четвертых, мы даже не упомянули wine-server
— отдельный процесс Wine, который поддерживает «состояние» ядра (открытые дескрипторы файлов, мьютексы и т. д.).
И последнее… о, так вы хотите запустить игру? А не просто hello world? Ну так это совсем другое дело! Тогда нужно разобраться с DirectX, со звуком (привет, PulseAudio, старый друг), устройствами ввода (геймпады, джойстики) и т. д. Куча работы!
Wine разрабатывался в течение многих лет и прошёл долгий путь. Сегодня вы без проблем запускаете под Linux самые последние игры, такие как Cyberpunk 2077 или Elden Ring. Чёрт возьми, иногда производительность Wine даже выше, чем у Windows! В какое замечательное время мы живём…
P. S. На всякий случай повторим дисклеймер: статья даёт только базовое представление о работе Wine. Многие детали упрощены или опущены. Так что не судите очень строго, пожалуйста.
Windows Emulators are the tools with the help of which windows-operating system-based applications can be downloaded and run on Ubuntu. Also, the most common example is Adobe Photoshop, the photo editing tool popular on Windows. Though Linux provides different best editor tools, if the user still insists on downloading Adobe photoshop, then an emulator is needed on the Linux distribution.
In this blog, the top five best windows emulators for Linux are discussed in detail with their salient features. The list of these five windows emulators is provided below:
- WineHQ
- VMWare Workstation
- Qemu
- Virtualbox
- Vineyard
Let us dig into the first emulator from the list:
WineHQ
Wine is the favorite choice of Linux users to run Windows-based applications. WineHQ translates the code of the Windows applications into the POSIX calls on the fly, which helps to run the applications on non-window operating systems.
WineHQ can be used on Linux and macOS to run Windows-based applications.
With the help of Linux, it is possible to interface windows programs with Linux operating system. WineHQ also allows its users to use X terminal to display stream applications.
Features of WIne
Some of the salient features of WineHQ are provided below:
- It is compatible with the win32 code
- Mixing of win32 and POSIX code
- It supports DirectX-based games
Install Wine on Linux
- To Install WineHQ on Debian-based distributions, use the following link.
- To install WineHQ on other Linux systems, You can visit the official website for details.
VMWare Workstation
VMWare workstation is the virtualization application for the Linux and Windows operating systems. It allows users to run multiple virtual machines on the same machine. After making a machine, it is possible to run multiple operating systems o a single machine.
Though it is a paid application, it can be downloaded for free to run Windows-based applications. About 3 GB of video memory is shared with the Vmware Workstation.
Features of VMWare Workstation
Some of the salient features of VMWare Workstation are provided below:
- It allows running multiple Kubernetes and operating systems on a single computer
- Support the latest release of windows 10
- Encrypt expiring virtual machines
Install VMWare Workstation
- To Install VMWare Workstation on Debian-based distributions, use the following link.
- For other Linux systems, read out the instructions from the official website.
Qemu KVM
Qemu KVM is also a popular emulator on Linux, allowing users to run multiple machines whose architecture is supported by Linux. Qemu can run KVM and is one of the faster emulators in Linux as it is programmed in C language. By default, Qemu comes with the GNU GPL license.
Features of Qemu KVM
Some of the salient features of QEMU KVM are provided below:
- The virtual machine can be saved with all the running applications
- X86 and SPARC architectures are supported by QEMU
- The virtual machines are allowed to interface with USB, CD-ROM, and audio speakers
Install Qemu
- To Install QemuKVM on Debian-based distributions, use the following link.
- Read the instructions on their official website for other Linux systems.
VirtualBox
VirtualBox is a robust emulator installed on Linux by running a simple command. VirtualBox is easy to use and can be used on Windows and Linux as an emulator. Oracle, the development team behind VirtualBox, ensures that the users can get the best emulator by resolving its bugs promptly.
VirtualBox is developed in the C, C++, and x86 programming languages.
Features of VirtualBox
Some of the salient features of VirtualBox are provided below:
- Guest additions are supported
- It can be run on a variety of 64-bit operating systems
- It can save the snapshot of the virtual machine
Install VirtualBox
- To Install VirtualBox on Debian-based distributions, use the following link.
- For other Linux systems, go to the official website of VirtualBox.
Vineyard
The vineyard is the collection of tools used to run Windows-based applications on Linux, which can be considered similar to Linux. It helps users to integrate easily with Wine. It detects the features of the WineHQ automatically and can support EAX Emulation.
Features of Vineyard
Some of the salient features of Vineyard are provided below:
- WineHQ features are auto-detected.
- Supports EAX.
- It can be run in a terminal.
Install Vineyard
- To Install VMWare Workstation on Debian-based distributions, use the following link.
- For other Linux distros, visit the official website of the Vineyard.
That’s all from this guide.
Conclusion
Emulators are used in Linux to run Windows and Windows-based applications. There are several emulators available on Linux. The choice of emulator depends on the user’s requirements and the user system’s support. This blog explores the top five best Windows emulators, which allow running windows-based applications on Linux.