It’s only been a couple of months since I first gave Linux a serious shot on one of my PCs, and since then, I’ve quickly grown into a big fan of it. These days, I would rather spend more time in Linux than on Windows, but of course, there are some things that make this impossible. Missing apps like Adobe Lightroom is a significant problem, and for many people, the same sentiment applies to something like Microsoft Office.
Enter WinApps, a project I recently heard about from a friend. The purpose of WinApps is kind of akin to using GUI Linux on Windows through WSL, but reversed. With it, you can run Windows apps on Linux as if they were naturally part of the operating system. It’s a fantastic idea that could mean you don’t ever need to use Windows again, though it’s going to take some work.
How does WinApps work?
The power of VMs
Running Windows on Linux is, of course, not a new concept thanks to virtual machines, but what stands out about WinApps is how it takes that basic technology and adapts to provide a much more seamless experience. Typically, a virtual machine will make it so that you have to launch and view the entire operating system to interface with it, but WinApps can make each of your apps launch independently in the Linux desktop environment.
For this, it uses Docker, Podman, or libvirt to virtualize a Windows install, and then, it relies on FreeRDP to provide a remote desktop connection to the virtual machine. Then, WinApps itself can provide links to installed apps within your VM so that they appear in the application launcher on your Linux host. Thanks to FreeRDP, when you launch on of these apps, the remote desktop session only captures the application window, and makes it resizeable within your Linux desktop, as if it was running natively.
As I already mentioned, this is a very similar approach to how Linux apps run on Windows through WSL, though there are some limitations, such as not being able to easily pass through an integrated GPU to the guest OS. You can pass through a discrete GPU depending on the virtualization backend you’re using, though.
FreeRDP works best on Linux desktops using the X11 windowing system, which means you may experience a few more bugs if you’re using the more modern Wayland. The friend who told me about WinApps says he’s interested in creating a solution for better performance on Wayland, though, so hopefully we get some developments on that front.
Setting up WinApps
It takes a bit of time
Getting started with WinApps isn’t the easiest process, but it also won’t feel too daunting if you’re used to working in Linux, particularly with the terminal. You can find detailed instructions on the project’s GitHub page, but here’s a basic rundown. First, you’ll need to install your preferred virtualization engine (I went with Docker) and create the Windows virtual machine inside it. Then, after testing FreeRDP, you can install any apps you’d want to use inside the Windows machine.
Once you have your Windows apps installed, you can install WinApps on the Linux host, and this allows you to register your preferred apps to appear in the Linux app launcher. I did notice that some apps may not appear on the list when installing WinApps, though thankfully, you can also manually run apps that aren’t registered during the WinApps setup by using the terminal command, replacing the text in quotes with the path to the appropriate file inside Windows:
winapps manual "Path/to/Exe/file.exe"
The biggest issue I had during setup was the fact that Docker commands required me to use sudo, but the command for downloading and installing WinApps didn’t work if I preceded it with sudo. I didn’t see this on the official guidance, but I soon learned that I needed to add my Linux user account to the Docker group. The command for that is as follows:
sudo usermod -aG docker $USER
Once you have that set, WinApps should install, and you can go ahead and add your Windows apps to your Linux app launcher.
Does it actually work?
Yes… with some caveats
I primarily wanted to test WinApps with things I can’t use on Linux, and my first thoughts went to Adobe Photoshop and Lightroom. Both of these apps are officially listed as supported by WinApps, and well, they function. Adobe Lightroom works the best of the two. I could use it pretty much without major issues. I loaded up a RAW photo and applied automatic lighting corrections, which performed well enough for day-to-day use. Because I didn’t have a discrete GPU I could pass through, the AI-powered Denoise feature ran extremely slowly and took a few minutes to process a single image. However, manual noise reduction is still available and works fine. While it’s not as easy, I’d still rather use it here than something like Darktable or RawTherapee since Lightroom usually gets me better end results.
Photoshop didn’t go as well, unfortunately. Something about the way Photoshop operates results in a few bugs that break the flow. Sometimes, the UI will just freeze and stop responding, but you can briefly fix it by using the task switcher in Linux to switch to another window and back. Forcing the UI to refresh seems to fix the issues, but they’re very frequent with Photoshop, so the workflow is impacted a good bit.
Microsoft Office is also listed as officially supported, but since I don’t currently have a license for it, I went with WPS Office instead, which is my go-to suite these days. This, too, worked mostly fine, and it would be completely usable for writing documents or making presentations. The “New” button is broken, but you could still create new documents by going to the appropriate section of the Home tab.
What I’ve found is that resizing app windows, and especially maximizing/windowing them, can often make the UI unresponsive, similar to what happens when using certain features in Photoshop. For the most part, once you have your apps in the size you want, this shouldn’t be an issue, but it can be a bit frustrating when you’re not expecting it and you just want to get things done. But the use case for this shouldn’t be for you to be juggling a lot of Windows apps or anything, it’s meant to be a solution for the occasional app that doesn’t exist on Linux. Another annoying quirk is that, if you’ve already opened a Windows app, opening another one can sometimes result in the existing app disappearing, but attempting to launch the second app again will bring them both back on screen. Both apps will also have the same label on the dock, since they’re still technically just a Windows VM.
Despite the fact that WinApps is expected to work more reliably under X11, I didn’t have a ton more issues using it under Wayland. Photoshop seemed to become even less stable, but it wasn’t great either way.
It won’t be for everyone
But for the right person, it’s an amazing idea
More and more, I’ve been finding myself uninterested in using Windows when I can avoid it, and a solution like WinApps sounds like it could be a dream come true, at least in concept. Running Windows apps within Linux with decent performance is all I really need to stop using Windows as a standalone OS, and that’s exactly what WinApps is aiming for. The execution isn’t quite perfect, but if you mostly work with Microsoft Office, you’re probably completely fine.
However, not everyone is going to fit that description. An app like Lightroom can run quite well on a modern laptop with an integrated GPU, but with the virtualization used in Docker, you’re leaving a lot of performance on the table, and certain workloads may not be feasible. Something similar can be said for DaVinci Resolve. The Linux version of Resolve requires a discrete GPU, and on Windows, you can use an integrated GPU, but because the virtualization doesn’t pass through that integrated GPU, actually editing video becomes basically impossible.
If you only have a very small need for Windows-based tools, then WinApps can bridge that gap, and maybe there will be some virtualization improvements in the future that make it even better. As it stands, though, Windows on Linux is still not a full replacement for a proper Windows install. But it’s great to picture a feature where that might be the case.