3 min read

Run Windows Apps Natively on Linux

We've all been there. You're happily running Fedora, everything's great, and then your workplace mandates Office 365, or you need MATLAB with toolboxes that only behave on Windows, or some vendor ships a configuration utility that's Windows-only. You stare at the screen and think "do I really need a whole Windows partition for this?"

I've tried multiple workarounds over the years; Wine, Bottles, full VMs with virt-manager, even dual-booting. Recently two projects genuinely changed how I handle this: dockur/windows and WinBoat.

Windows in a Docker Container

The dockur/windows project spins up a full Windows installation using QEMU/KVM, wrapped in Docker's container lifecycle. You write a docker-compose.yml, run docker compose up -d, go make coffee, and come back to a fully installed Windows accessible via your browser on port 8006 or through RDP. The whole install is unattended.

The VERSION environment variable lets you pick from a wide range:

You can also point it at a custom ISO URL or mount a local .iso handy if you have an LTSC image through volume licensing.

Why the Edition Matters

Not all Windows editions behave the same inside a container. The difference in bloat is staggering:

Win 11 Pro Win 11 Enterprise Win 11 LTSC IoT Ent. LTSC Server 2022/2025
Start menu ads Yes Controllable via GPO None None None
Pre-installed junk Some Minimal None None None
Microsoft Store Yes Removable via policy Not included Not included Not included
Copilot / Widgets Yes Manageable No No No
Telemetry Configurable Configurable Minimal Minimal Minimal
Remote Desktop host Yes Yes Yes Yes Yes
Group Policy Yes Yes Yes Yes Yes
Local account default Yes Yes Yes Yes Yes
Feature updates Semi-annual Annual None (5yr) None (10yr) None
Support lifecycle 24 months 36 months 5 years 10 years 10 years

If you want Windows to sit in a container, run your apps, and not bother you, LTSC is the move. No ads, no Store, no Copilot, no surprise feature updates. The 11l tag gives you that at 4.7 GB.

WinBoat: The Missing Piece

Dockur/windows gives you a full Windows VM in a container, connect via RDP and get the whole desktop. It works, but it still feels like a VM.

WinBoat builds on dockur/windows and adds RemoteApp via FreeRDP. Individual apps get composited as native OS-level windows on your Linux desktop. You click "Word" in WinBoat's launcher and Word opens as its own window alongside your Linux apps. No full desktop session, no context switching.

Your Linux Desktop
├── WinBoat (Electron UI)
│   └── Docker/Podman Container
│       └── QEMU/KVM → Windows VM
│           └── WinBoat Guest Server (Go)
└── FreeRDP → Individual app windows on your desktop

Why I Use It

Office 365 is the big one. Web versions are fine for quick edits, but having the full version of OneNote is really nice, especially when traveling and wanting to use it offline. Wine can't handle Office 365's constant updates and cloud SSO. CrossOver gets closer but breaks regularly.

Installing WinBoat on Fedora

WinBoat ships an .rpm, so Fedora is straightforward:

1. KVM — verify virtualization is enabled in BIOS, then:

sudo dnf install @virtualization
ls /dev/kvm  # should exist

2. Docker Engine (not Docker Desktop — WinBoat doesn't support it):

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER

Alternatively, WinBoat v0.9.0+ supports Podman, which ships natively with Fedora.

3. FreeRDP 3.x:

sudo dnf install freerdp
freerdp3 --version  # confirm 3.x

4. WinBoat:

sudo dnf install ./winboat-*.rpm
# or AppImage: chmod +x winboat-*.AppImage && ./winboat-*.AppImage

5. Configure — launch WinBoat, pick your Windows version (11l for LTSC if you have licensing, Pro otherwise), allocate resources, and let it install. Once Windows is up, install Office 365 or whatever you need. Apps show up in WinBoat's launcher as individual RemoteApp entries.

Wine vs. Proton vs. WinBoat

Wine Proton (Steam) WinBoat
Approach API translation Wine + Valve patches + DXVK Full Windows VM + RemoteApp
Needs Windows license No No Yes (or evaluation)
App compatibility ~60-70% ~95% of Steam games ~100% — real Windows
Office 365 Broken Not its job Full support
MATLAB (full toolbox support) Partial No Full support
GPU acceleration Yes Yes No (planned)
Resource overhead Minimal Minimal Significant (full VM)
Disk space ~1-2 GB Per-game 32 GB+
Host isolation Partial Partial Full — containerized
USB passthrough Limited No Yes (experimental)
Filesystem sharing Native Steam library Home dir mounted
Clipboard Yes N/A Yes, via RDP

Bottom Line

For any Windows-only productivity app that Wine doesn't run well, Office 365, MATLAB toolboxes, Adobe Creative Suite, vendor config utilities, WinBoat fills a gap I've been working around for years. It's not lightweight (you're running a full VM), there's no GPU acceleration yet, and it's still in beta. But the RemoteApp compositing makes it feel nothing like a VM in practice. Word is just a window. MATLAB is just a window.

If you've been duct-taping Wine prefixes together or spinning up virt-manager just to open a spreadsheet, give WinBoat a shot. Pair it with an LTSC image for the cleanest experience.

-- ms
-- ms
Measuring the internet...