Linux is more user-friendly than ever, but there are still a large number of irreplaceable Windows apps that don’t run on Linux at all. With one open-source program, I solved that problem for 90% of the Windows app I need on a regular basis. This is how.
How can you run Windows apps on Linux?
Most Windows programs don’t run on Linux, and those that do usually have special versions that are compiled specifically for Linux. Unfortunately, Proton—Steam’s amazing compatibility layer—doesn’t work with everything either. Unless it is a game, you’re probably out of luck.
That is where WinApps comes in. WinApps brings together an efficient virtual machine, remote desktop protocol (RDP), and a mod for the Linux user interface. Together, they allow you to run specific applications on a Windows virtual machine, then integrates them so they look like a native application on Linux.
How fast are Windows apps when run with WinApps?
In my testing, I found that latency was pretty much negligible, and that most apps’ performance was pretty much identical to running the app natively.
Of course, some of the apps I’ve tried, like Photoshop, can be pretty demanding. However, I’m not a trained graphics artist pushing Photoshop to its limit. By creating massive canvases and trying to manipulate them in real time, I was able to make the app lag, but that would happen on my laptop—which is a bit older—anyway.
Because the VM sits idle in the background, every app I’ve tested launched as quickly with WinApps as they would if they were running natively on Linux.
Setting up WinApps on Linux
Running Photoshop on Linux relies on a virtual machine under the hood. WinApp supports three different virtual machines, but I’d recommend sticking to Docker or Podman for simplicity. I opted for Podman, since I already had it installed on my system. I’m also using Kubuntu, which is Debian-based.
This is the Linux distro I recommend to every Windows user
Switching to Linux is not a painful process anymore.
To install Podman and Podman Compose, open up the Terminal and run the following commands:
sudo apt -y install podman
sudo apt -y install podman-compose
sudo apt install -y curl dialog freerdp3-x11 git iproute2 libnotify-bin netcat-openbsd
These commands install Podman, Podman Compose, plus some additional things that will be needed later. If you’re using a distro based on something other than Debian, you’ll need to follow the specific Podman instructions for your distro.
Once that is done, we need to create two folders that will be relevant later. Run the following commands:
mkdir ~/winapps
mkdir ~/.config/winapps
Once you’ve created those two folders, you need to create two files that will tell WinApps and the virtual machine what they’re doing.
First, you need to create a compose.yaml file, which tells the virtual machine what it is doing. The WinApps instructions have an example compose.yaml handy. Because I’m using Podman rather than Docker, I had to uncomment lines 48 and 49.
You can also change the amount of RAM and number of CPU cores the virtual machine will have with this file, too. I left it alone, since my laptop doesn’t have a ton of spare resources.
I pasted the whole thing into Kate to modify it, then saved it to the first WinApps folder I created.
Next, you need to create a configuration file for WinApps itself. Again, there is an example file on the WinApps GitHub.
For the most part, I left it alone, though I did change WAFLAVOR=”docker” to WAFLAVOR=”podman” because I’m using Podman. If you’re using Docker, just leave it alone.
I used Vi to do this with the following command:
sudo vi ~./config/winapps/winapps.conf
Then I pasted in the contents of the configuration file linked above.
With that done, I ran podman-compose –file ~/winapps/compose.yaml up to boot the virtual machine, then connected to 127.0.0.1:8006 in my browser to finish up any remaining installation steps, then closed out the terminal window and my browser.
With that done, there are only two more steps: test the connection using RDP, then install WinApps.
Since I used Podman for my virtual machine, I ran the following command. If you used Docker, there will be a slightly different command you need to use.
podman unshare --rootless-netns xfreerdp3 /u:"MyWindowsUser" /p:"MyWindowsPassword" /v:127.0.0.1 /cert:tofu
Fill in the username and password with whatever you used in compose.yaml.
You’ll see a Windows window open, which you can manipulate just like any regular Windows operating system. I installed my apps at this step, but you can always come back later by running that command again.
Once that is done, just run:
bash <(curl https://raw.githubusercontent.com/winapps-org/winapps/main/setup.sh)
The setup will guide you through selecting apps that are available on your Windows machine. Then you can pin them to your taskbar, desktop, or Start Menu.
If you need to add more apps later, just run the setup application again.
The vast majority of games on Steam are now playable on Linux thanks to Proton, with the notable exception of a few games with difficult anti-cheat. Now that I have WinApps on Linux, I’m more tempted than ever to cut Windows out of my life completely.
