How to Run Windows Apps on Linux: Wine, Bottles & a VM (2026)

You can run Windows apps on Linux three ways: with a compatibility layer like Wine, with a graphical front-end such as Bottles, or by installing a real copy of Windows inside a virtual machine. If you only need one or two specific programs, a compatibility layer usually takes about fifteen minutes to set up and a virtual machine takes closer to an hour.

The catch is that none of these options is universal. A virtual machine runs everything a real Windows PC runs, but it eats memory and storage. Wine and Bottles stay out of the way on your desktop, but a translation layer only works when the app was written in a way Wine can handle.

This guide walks through both routes so you can pick one and finish it today. Nothing here needs a second operating system on the same drive, and nothing needs a Windows licence until you reach the virtual machine section.

What You Need

Before downloading anything, gather four things. The first is a supported Linux distribution with an up-to-date kernel, since the virtual machine path needs hardware acceleration built into the kernel.

The second is administrator access on that machine, which is what lets you install Wine, Bottles, or a hypervisor package.

The third is the Windows software itself: an installer file such as an .exe or .msi, or a folder of portable files. Download it from the vendor rather than from a third-party archive site, because a tampered installer running through Wine can still reach your home directory.

The fourth is a backup of your documents folder. Wine and Bottles both keep their data in a plain directory you can point anywhere, so a clean prefix costs you nothing to recreate.

Then make the one decision that shapes everything else. If the app is a utility, a game, or an older desktop program, start with Bottles or plain Wine. If the app needs real drivers, hardware dongles, plug-ins from a specific vendor, or a Windows service that has to start at boot, plan on a virtual machine instead.

Forum users on r/linux and r/linux4noobs say this out loud more than any other piece of advice: check compatibility first, because an hour spent confirming an app works is cheaper than an evening of debugging DLLs.

Step-by-Step: How to Run Windows Apps on Linux

Step-by-Step: How to Run Windows Apps on Linux

1. Check Whether the App Can Run Natively or Through Wine

Start by asking whether a native Linux version already exists. LibreOffice handles most word processor and spreadsheet work, Krita and GIMP cover image editing, and a browser handles most legacy web apps. If a native option covers 90 percent of what you need, it costs nothing to try first.

For genuine Windows software, check the Wine Application Database at winehq.org. Search the app name, then read the rating and the most recent report rather than the oldest one. A Platinum or Gold rating with recent reports from the current version is a good sign. A Garbage rating or no entry at all means you are starting blind, so expect work.

Note the exact version number you are about to install and search for that too. Compatibility changes between releases, and a fix for version 6 often does not apply to version 7.

At the same time, be honest about the app category. Games with Easy Anti-Cheat or BattlEye, most DRM-launched titles, and professional plug-ins that ship their own kernel driver are known trouble spots. If that describes your app, skip ahead to step 5.

2. Install Wine or Bottles for Lightweight Compatibility

On Ubuntu or Linux Mint, the packaged Wine is often old but good enough to start. Install it with the i386 architecture enabled:

sudo dpkg --add-architecture i386
sudo apt update && sudo apt install wine wine32 wine64 winbind

On Fedora the equivalent command is sudo dnf install wine wine-core winbind. On openSUSE, use sudo zypper install wine winbind. Each distro also carries a newer build, and WineHQ keeps its own repository if you need current releases.

Install Bottles when you want Windows environments managed for you. Bottles is a graphical front-end for Wine that creates isolated containers, downloads extra components, and keeps each app’s settings separate so one broken install cannot wreck the others.

flatpak install flathub com.usebottles.bottles

The Flatpak route is self-contained and updates on its own schedule. A native package from your distro integrates better with your theme and file manager, so pick that instead when your distribution offers a recent enough version.

3. Create a Windows Prefix and Run the Installer

A prefix, also called a bottle, is a self-contained fake Windows installation living in one folder. Inside it you will find a drive_c directory with Program Files, a registry and a set of fake Windows DLLs. That isolation is the whole point: you can delete a broken prefix and build a new one without touching anything else.

In Bottles, click Create, name the bottle, pick a runner, and let the Components panel pull in the dependencies your app needs. Then drop the installer onto the bottle window or use Run Executable and point it at the .exe file. When it finishes, the app shows up as a desktop entry.

With plain Wine, the same idea comes from winecfg. Running the installer directly with wine setup.exe creates a default prefix in your home directory. Use Winetricks to make a named one: WINEPREFIX=~/prefixes/office wineboot --init, then run the installer inside it.

Many apps insist on a particular Windows version. Set that before installing, not after. Older installers often refuse to run when the prefix reports Windows 11, and forcing Windows 7 or 10 through the prefix settings is the usual fix.

4. Install Fonts, Runtimes, and Other Dependencies

Most launch failures come down to a missing component rather than a broken app. The usual suspects are 32-bit libraries, the Visual C++ redistributables, .NET Framework or .NET runtimes, and fonts.

Winetricks installs these with verbs such as winetricks corefonts, winetricks vcrun2019, winetricks dotnet48 and winetricks dxvk. Use it only for the component you actually need, since each verb adds files to the prefix.

Prefer the vendor’s own redistributable downloaded from the official site. Random DLL sites are a bad idea in a compatibility layer because you are giving an unfamiliar binary deep access to your prefix.

If an app installs but renders blank text or broken layout, install fonts next. Missing typefaces are the single most common cause of empty documents and grey boxes, and they are quick to fix.

5. Use a Virtual Machine When Compatibility Is Not Enough

A virtual machine gives the app a genuine Windows installation with its own drivers, services and registry. The cost is memory and disk space, plus a small performance tax from virtualization.

For an ordinary office or development workload, give the guest 4 GB of RAM and 2 CPU cores, and put it on an SSD rather than a spinning drive. Anything heavier, such as video editing or a full desktop creative suite, wants 8 GB or more of guest memory and a fixed-size disk rather than a dynamically expanding one.

VirtualBox, QEMU with KVM, and the Quickemu wrapper around QEMU all work. All of them support snapshots, so take one the moment Windows finishes installing. That single snapshot saves you from reinstalling after every failed experiment.

Install the VirtIO drivers inside the guest for disk and network performance, and add Guest Additions or similar tools to enable clipboard sharing, better display scaling, and shared folders. For Windows 11 you also need to enable TPM emulation, since the OS refuses to install without it.

You need a valid Windows licence for the guest. Bring your own licence or use an evaluation image if your situation allows it, because the licence terms, not the technical setup, are the part people get wrong here.

6. Test the App and Troubleshoot the First Launch

Run through the same checklist every time, because the same test catches most problems early. Open the app from the desktop entry rather than the installer, then save a file, print or export one, open a second document, and quit.

Next check the network, since licensed apps phone home on first run, and play a sound or watch a video if the app uses multimedia. If you use USB hardware, plug it in now rather than at the moment you need it.

Finally, uninstall the app and confirm your files are still there. A prefix that survives a clean uninstall is a prefix you can trust for the long haul.

When something breaks, look in this order: the app’s own log, the Wine or Bottles logs in the prefix, and the kernel journal if audio or graphics misbehave. That order tells you whether the fault sits in the app, in a missing dependency, or in a driver layer.

Common Mistakes

The 32-bit libraries are missing. This is the first error most people hit on a 64-bit system, and it shows up as an app that refuses to start or a 32-bit program with no window at all. Enable i386 support, install the 32-bit packages, and try again. It is the single most common fix in the whole process.

The prefix reports the wrong Windows version. An installer that behaves oddly is often reacting to a Windows 11 prefix when it expects Windows 7 or 10. Change the version in the prefix settings before installing anything else.

The window opens blank or black. Usually a graphics driver issue rather than a broken app. Try toggling DXVK in the runner settings, and in a virtual machine confirm the guest is using VirtIO or a proper graphics driver instead of a generic fallback.

No sound, or a delay before audio plays. Audio in a compatibility layer depends on PulseAudio or PipeWire being reachable from the prefix. Check that the sound server is running, and in a virtual machine install the guest’s audio driver instead of leaving it on the emulated default.

The game refuses to launch. This is usually anti-cheat. Easy Anti-Cheat and BattlEye titles block compatibility layers by design, and the error is not a bug you can fix. Move to a virtual machine, though note that some titles ban virtualised environments too.

Activation fails. Online activation can fail when the prefix has no working network stack or when the vendor’s installer needs .NET. Fix networking first, then install the runtime. If activation still refuses, a virtual machine with a licensed copy is the cleaner path.

The launcher or script will not run. An unsigned executable downloaded from the internet is blocked by the desktop security layer. Make the file executable from the file manager’s permissions tab, and only for files you trust.

Windows apps can reach more of your files than you expected. A prefix has full access to your home directory by default. Keep documents in a separate directory, run untrusted installers in a dedicated prefix, and delete that prefix afterwards.

Tips for Choosing Between Wine, Bottles, and a Virtual Machine

The decision gets easier once you sort apps by what they need rather than by what they are called. Office documents, older utilities, note-taking apps and most games from the last decade go through Bottles or Wine. Creative suites and audio software are hit or miss but often work with the right runner, so test before deciding.

Legacy business software, anything with a licensing dongle, vendor plug-ins, and games with anti-cheat belong in a virtual machine. So does any app you depend on for work, because the failure cost is much higher than the setup time.

A couple of practical rules make the rest easier. Test your must-have app before you commit to a switch, and test it with a real file, not an empty one. Several users writing from r/linux made the same observation about migrating from Windows: one stubborn program is the only thing keeping them on the other operating system, so solve that program first.

On hardware, keep the guest on SSD storage and stay at or below half your total RAM for the Windows side. For security, remember that a compatibility layer is not a sandbox in the strict sense: prefix isolation keeps configurations apart, but a Windows executable still runs with your user’s permissions. A virtual machine is the better boundary when the installer comes from somewhere unfamiliar.

On licensing, Wine and Bottles need no Windows licence, while a virtual machine running a full Windows installation does. Office activation through a compatibility layer can be fussy, so check what your subscription allows before you migrate.

Frequently Asked Questions

Yes. Wine is an open-source compatibility layer, and using it is legal on Linux. You need a legitimate copy of the Windows application, the same way you would on any other machine. What you cannot do is use Wine to bypass activation or licensing in the software. Running Office through Wine is fine as long as your Microsoft account or licence key activates normally.

Can I use Wine to run Windows exe files on Linux?

That is exactly what Wine does. Point it at an .exe or .msi installer, and it translates Windows API calls into Linux system calls so the program runs without Windows installed. In practice you create an isolated prefix first, install dependencies such as the Visual C++ runtimes, and check the Wine Application Database for reports on your specific app version.

Which Linux distribution is best for running Windows apps on Linux?

Any current distribution with an up-to-date kernel works, so the choice matters less than people expect. Ubuntu, Linux Mint, Fedora and openSUSE all package Wine and Bottles cleanly. What does matter is kernel age for virtualisation support and whether your graphics drivers are current. If you already have a working desktop, stay on it rather than switching distributions for this.

Can I use Microsoft Office and Adobe apps on Linux?

Usually, with caveats. Office runs in many cases, though activation and font rendering need attention. Adobe apps vary widely by version, and some plug-ins ship their own drivers that a compatibility layer cannot load. Test the exact version you rely on before migrating, and keep a virtual machine ready if a critical plug-in refuses to install.

Do anti-cheat games work through Wine or Proton?

Most do not. Easy Anti-Cheat and BattlEye actively block compatibility layers, and their refusal is deliberate rather than a bug. Proton handles the large majority of ordinary Steam games well, but any title using those anti-cheat systems will refuse to launch. A virtual machine sometimes works, though several publishers also detect and ban virtualised environments.

Is there an alternative to Wine on Linux?

Yes, and they fit different needs. Bottles is a graphical front-end that manages Wine prefixes and dependencies for you. CrossOver is a commercial option with vendor-backed testing. Proton is Valve’s Wine build for gaming. For full Windows applications, virtual machines such as VirtualBox or QEMU with KVM are the alternative, and container-based tools such as WinApps and WinBoat are worth watching.

Conclusion

Start with a compatibility check. Search your app in the Wine Application Database, read the newest reports, and if it looks workable, create a disposable prefix in Bottles and run the installer inside it. Fifteen minutes of setup will tell you more than an hour of reading.

If the app needs real drivers, vendor plug-ins, a licence dongle, or anti-cheat support, stop fiddling and build a virtual machine instead. Give it 4 GB of RAM on SSD storage, take a snapshot after Windows installs, and add shared folders so your files stay in one place. Whatever route you take, keep a backup of your documents and expect the first launch to need a fix, which is normal.

Leave a Comment