WinBoat: How to Run Windows Applications in Linux
WinBoat is a slick wrapper around a real Windows VM. It uses Docker to spin up a headless QEMU/KVM Windows image (from the dockur/windows project) and then shows each Windows window on your Linux desktop via FreeRDP RemoteApp. It works, but it’s beta, not magic—and it inherits all the trade-offs of RDP + a VM. (GitHub).
Check out the “You Can Now Run Any Windows App On Linux…” video on WinBoat by @SomeOrdinaryGamers for more information.
About the SomeOrdinaryGamers video: The demo fairly shows WinBoat’s strengths—seamless window integration from a real Windows VM—and honestly notes lag/GPU limits. The title “run any Windows app” is aspirational. If you need kernel-mode drivers, anti-cheat, or GPU-heavy workflows, WinBoat’s RDP path won’t cut it; use Wine/Proton (when compatible) or a VM with GPU passthrough. WinBoat is best for Office-class apps where convenience beats raw performance.
Tiny checklist beside his steps:
- âś… KVM/SVM enabled; âś… Docker + Compose v2; âś… FreeRDP 3.x
- ⚠️ No GPU accel by default → expect UI latency
- ⚠️ Windows license + updates/AV
- đź”’ Treat the guest as a real Windows machine
How Reliable is WinBoat?
-
Maturity: The project openly labels itself “Work in Progress / beta”. Latest tagged release is v0.8.x; there are ongoing issues and active development. Good momentum (stars, contributors), but this is pre-1.0 software. Expect rough edges. (GitHub)
-
What’s solid: The building blocks are proven: QEMU/KVM for virtualization, FreeRDP for remoting, and dockur/windows as the containerized Windows VM base. Those components are widely used and well-tested in their own right. WinBoat’s value is packaging and automation on top. (GitHub)
-
Known limitations:
- No GPU acceleration by default; RemoteApp over RDP can feel laggy for graphics-heavy UIs. (WinBoat itself highlights VM + RDP integration, not GPU passthrough.)
- USB passthrough and some “seamless” features are experimental.
- It requires KVM on the host and FreeRDP 3.x client side; some distros/configs will need tinkering. (GitHub)
Why Does WinBoat Need Docker?
Because WinBoat isn’t translating Windows APIs (that’s what Wine/Proton do). It runs a full Windows VM and wants a repeatable, self-contained way to ship, configure, and start that VM + helper services. Docker/Compose provides:
- Dependency encapsulation (QEMU, firmware, VM image plumbing) without polluting your host.
- Lifecycle management (start/stop on demand, log collection).
- A consistent packaged environment that’s identical across distros (they explicitly require Docker/Compose v2 and even note what’s unsupported like Podman/Rootless). (GitHub)
Think of Docker here as an orchestrator for QEMU/KVM + a small guest agent in Windows; FreeRDP connects into that VM to present apps as native-looking windows. (GitHub)
When is WinBoat the Best Option?
-
Good fit: Office apps, light productivity, simple creative tools where latency isn’t critical and “seamless window” UX matters more than raw performance. (Exactly the use cases shown in the video.)
-
Use something else:
- Heavy GPU / low-latency work (Premiere/After Effects, gaming): do GPU passthrough to a dedicated VM or just dual-boot. RDP + no GPU accel will feel bad.
- Single Windows app, no full VM: try Wine/Bottles/Proton first; they’re lighter if your app is compatible.
- Enterprise-style “seamless” via RDP but without Docker: look at WinApps (same RemoteApp concept, different packaging), though it’s also community-driven.
Practical WinBoat “Gotchas”
- Prereqs: KVM enabled in BIOS, Docker + Compose v2, FreeRDP 3.x; they even call out that Docker Desktop/rootless/Podman are unsupported. (GitHub)
- Security: Treat the Windows VM as a real Windows box (patch it, AV, don’t type secrets into shady apps). Docker here isn’t a security boundary; the VM is.
- Files & peripherals: Home dir mount works; USB passthrough is there but experimental—expect some trial-and-error.
Bottom line
WinBoat is a promising, fast-moving beta that makes the “Windows-in-a-VM but feels native” workflow much easier. It’s not a replacement for GPU-accelerated workloads, and you’ll still do some sysadmin work to meet its prerequisites. If your goal is “use a couple of must-have Windows apps on Linux without babysitting a full desktop VM window,” it’s worth trying—just go in eyes open. (GitHub)
Can we Run Linux Software on Windows
Is it feasible to run Linux software on Windows? Short version: Windows runs Linux apps really well now. You’ve got four good paths, each with different trade-offs.
Windows Apps that Run Linux
1) WSL2 (Windows Subsystem for Linux) — best default
- Real Linux kernel in a lightweight VM, tight Windows integration.
- GUI apps work out of the box on Win11 via WSLg (Wayland/X11 over a built-in RDP compositor). Copy/paste, audio, and GPU acceleration are supported.
- systemd is supported, so services and modern distros behave normally.
- Great for dev: Docker Desktop uses the WSL2 backend, so Linux containers feel native.
When to use: day-to-day dev, CLI tools, most GUI apps, containers.
Gotchas: avoid heavy I/O on /mnt/c—work inside the Linux filesystem (\\wsl$...) for speed. Some niche kernel modules/drivers still aren’t supported.
2) Full VM (Hyper-V, VMware, VirtualBox) — maximum isolation/compat
- You’re running a normal Linux distro with full kernel control. GPU passthrough and odd drivers are more feasible. Microsoft documents broad Linux support under Hyper-V. (Microsoft Learn) When to use: you need a “real machine”: special networking, kernel tweaks, secure sandboxes. Cost: more RAM/CPU, more friction moving files/integration.
3) POSIX layers on Windows (MSYS2, Cygwin) — quick Unixy tools
- MSYS2 gives you
pacman, bash, and lots of native Windows ports; great for building with MinGW. - Cygwin provides a big GNU userland via a POSIX emulation DLL. When to use: you just need grep/sed/make or to compile Windows binaries with a Unixy toolchain. Limit: it’s not Linux; many Linux-only packages and daemons won’t work.
4) Containers (Linux) on Windows
- With Docker Desktop + WSL2 backend, you run real Linux containers; nice for services (Postgres, Redis, etc.) without a full VM you manage yourself.
Which should you pick?
- General development (Node, Python, Rust, Go, PostgreSQL, Redis, etc.): WSL2.
- Linux GUI apps (IDE, editors, light tools): WSL2 + WSLg (works out of the box on Win11).
- Kernel/driver work, exotic networking, strict isolation: full VM. (Microsoft Learn)
- Porting/compiling native Windows apps with GNU tools: MSYS2 (first) or Cygwin.
- Microservices/dev databases: Docker Desktop (WSL2 backend).
Practical tips (from painful experience)
- On WSL2, keep your project in the Linux side (
/home/...or\\wsl$\<distro>\home\...). File I/O is much faster than working in/mnt/c. - If you need systemd services (Docker inside WSL, PostgreSQL as a service, etc.), make sure systemd is enabled for your distro; it’s supported now.
- For GUI on Windows 10 (no WSLg), you can still run X11 apps using a third-party X server (VcXsrv/Xming). On Win11, prefer WSLg—it’s integrated and uses RDP/Wayland.
- If you’re container-heavy, let Docker Desktop manage the WSL2 distro; don’t fight it with extra VMs unless you need strict isolation.
Run Linux Software on Windows
Short version: there are three big ways to run Windows software on Linux, each with different trade-offs. Pick the right tool by matching what your app needs (graphics/anti-cheat/drivers/Office-style GUI) and how much you want to tinker.
These are your best options:
- Wine (+ friends) — “translation” layer, no Windows license
- What it is: re-implements the Windows APIs so .exe/.msi run without Windows. It’s fast when it works, but anything that needs a Windows kernel driver (low-level DRM, some USB dongles, anti-cheat) won’t. (Reddit)
- Proton (Valve’s Wine build) adds gaming glue: DXVK (D3D9/10/11→Vulkan), vkd3d-proton (D3D12→Vulkan), patches, and per-game shims. Steam uses it, but you can also use Proton outside Steam. Compatibility is tracked by the community at ProtonDB. Anti-cheat is still developer-opt-in (EAC/BattlEye), so some multiplayer titles remain a no-go. (docs.usebottles.com)
- DXVK and vkd3d-proton are the key pieces that map DirectX to Vulkan; you’ll want up-to-date Vulkan drivers. (ProtonDB)
- Quality-of-life launchers:
- Bottles — per-app “bottles”, sane defaults, sandboxing, easy Winetricks; nice for productivity apps. (GitHub)
- Lutris / Heroic — game launchers that automate runner selection, environment, and tweaks (can use Wine or Proton). (GitHub)
- CrossOver — commercial Wine with support and polished recipes; worth it if you want fewer knobs. (GitHub)
- PlayOnLinux — older, still around; templates for apps but less active than Bottles/Lutris. (Linux Mint Forums)
- Virtualization (KVM/QEMU, VMware, VirtualBox) — real Windows in a VM
- What it is: you install Windows in a VM and display apps on your Linux desktop. Maximum compatibility (it is Windows), but you need a Windows license and performance is gated by RDP/Spice unless you do GPU passthrough. Tools like WinApps (and newer WinBoat) wrap RDP to make Windows apps feel “native” on Linux. Expect some UI latency for graphics-heavy apps without a passed-through GPU. (GitHub)
- If you need true performance (Premiere, 3D, some DAWs), do VFIO GPU passthrough so the VM owns a GPU; this can be near-native but requires hardware/firmware support and setup time. Projects like Looking Glass then share the VM’s display back to Linux. (Reddit)
- Edge/odd options
- BoxedWine (CPU emu + Wine) for very old x86 apps on non-x86 machines; slow but occasionally useful. (Boxed Wine)
What to keep in mind (the “mental model”)
- API vs OS: Wine/Proton re-implement APIs; they don’t ship a Windows kernel. Apps that ship kernel drivers or require anti-cheat that hooks the kernel usually won’t work unless the game vendor explicitly supports Proton. (X (formerly Twitter))
- Graphics translation is the magic: DXVK/vkd3d-proton translate DirectX calls to Vulkan in real time. That means your Vulkan driver (Mesa/NVIDIA) version matters as much as Wine/Proton versions. (ProtonDB)
- Per-app sandboxes help: separate Wine prefixes (“bottles”) keep DLLs, registries, and tweaks isolated so one app can’t wreck another. Bottles/Lutris automate this well. (GitHub)
- Community data is gold: check WineHQ AppDB and ProtonDB before you waste time—people post exact tweaks, versions, and known regressions. (Reddit)
Common gotchas (and workarounds)
- Anti-cheat / kernel drivers: Many multiplayer games still fail because EAC/BattlEye must be enabled by the developer. Verify on ProtonDB before buying. (CodeWeavers)
- DRM’d launchers: Some game launchers or enterprise DRM drivers don’t play nicely. Often solved by using a known-good Proton/Wine version via Lutris/Heroic or using the Steam version instead. (GitHub)
- .NET / VC++ runtimes: Many apps need them installed inside the prefix; Bottles, Lutris, CrossOver provide recipes, but mismatched versions can break things. (GitHub)
- Printers/scanners & USB dongles: User-mode apps are fine; kernel-mode drivers are not. If your workflow depends on a proprietary USB driver, you’re usually better off in a VM (or with GPU passthrough if performance matters). (GitHub)
- Performance regressions: Old Wine/Proton or old GPU drivers can tank FPS or break titles after updates. Keep Proton/Wine, DXVK, Mesa/NVIDIA current—and pin working versions for critical apps. (docs.usebottles.com)
- Security: Wine runs Windows executables natively—Windows malware often does run. Use separate prefixes, avoid running installers as root, and consider sandboxing (Flatpak/Bottles isolation). If you need strong isolation, use a VM. (GitHub)
- High-DPI/IME/locale oddities: Scaling, fonts, and input methods sometimes need manual tweaks in the prefix; community recipes usually document fixes. (Reddit)
Practical Windows Emulator Picks in Linux
- Games first: Steam with Proton (plus Proton-GE if needed) and ProtonDB for guidance. Use Lutris/Heroic for non-Steam titles. (docs.usebottles.com)
- Office & general apps: Try CrossOver or Bottles for a smoother setup and per-app sandboxes. If compatibility is flaky, use a Windows VM or WinApps/WinBoat RDP integration. (GitHub)
- Heavy pro apps (Premiere/After Effects/DAWs with drivers): Prefer a VM with GPU passthrough; otherwise latency and missing drivers will bite you. (Reddit)
Conclusion
There isn’t a single “best” way to run Windows software on Linux—there’s a right tool for each job:
- If the app has a Linux build, use it. It’s the only truly native and maintenance-free path.
- Try Wine/Proton first for mainstream desktop apps and many games. Use Bottles/Lutris/CrossOver to isolate prefixes, install needed runtimes, and pin working versions. Check ProtonDB/WineHQ before you fiddle for hours.
- Use WinBoat/WinApps when you want “native-looking” Windows windows on your Linux desktop and can tolerate RDP latency (Office, light creative tools). Remember: it’s a real Windows VM—patch it, back it up, and treat it like Windows.
- Use a full VM (KVM/VirtualBox/VMware) for maximum compatibility or when kernel drivers/USB dongles/DRM are involved. For heavy GPU workloads or production DAWs, GPU passthrough (VFIO) is the only way to get near-native performance.
- Security and hygiene matter: don’t run random EXEs; sandbox Wine prefixes; keep GPU/Mesa/NVIDIA drivers and DXVK/vkd3d current; snapshot VMs before big changes.
Reverse direction? Windows runs Linux apps best via WSL2 (with WSLg for GUI) or a full VM when you need kernel control.
Rule of thumb:
- Native > 2) Wine/Proton (with a launcher) > 3) Seamless VM (WinBoat/WinApps) > 4) Full VM with GPU passthrough (for performance-critical work).
Pick the simplest option that meets your performance and compatibility needs, and don’t be afraid to switch tiers when requirements change.