What does it take?
Linux gaming is something that has improved a lot over the years but, even after all this time, hasn't gotten up to par with Windows.
There are three hurdles to getting Linux gaming to be viable:
- Ease of use
- Compatibility
- Performance
Ease of use is important. People do not want to spend hours troubleshooting issues with things like drivers, kernels, software, and whatnot. They want to play games. On Windows, you generally only need to update Windows and install your graphics drivers. Everything else pretty much just works. On Linux, sometimes you need to do that, sometimes you don't, and sometimes you need to install or update more software, such as Mesa. Installing the latest kernel is important for drivers, which many of the "stable" distros people keep recommending, such as Ubuntu, hold back software kernels and may require a more manual approach.
Being able to install the latest of something easily is one reason why I use Arch Linux which, if you can get past the... um... "infamous" command-line installation (it's really not bad!), is one of the best distros for Linux gaming. After all, with Linux gaming not being exactly stable, you really do not want old software (which is often broken or more broken in some way). Getting the latest software on Ubuntu requires bypassing the whole "stable distro" thing with PPAs, anyway.
Perhaps the main hurdle of Linux gaming is Windows game compatibility. Most games are made for Windows, while most games are not made for Linux. In order to run Windows games on Linux, you need to either recompile them or use Wine or Proton. The two main options for graphics APIs are OpenGL and Vulkan. Windows, on the other hand, has a plethora of Direct3D based games. Therefore, you need to wrap them to OpenGL or Vulkan or reimplement the APIs.
Wrapping Direct3D calls to OpenGL or Vulkan can either sometimes hurt performance, as seen in some benchmarks, since there is a bit of CPU overhead involved in doing that. Also, OpenGL performance is atrocious on Linux, so wrapping to OpenGL adds even more performance loss on top of that.
Native Direct3D support has been done, such as with Gallium Nine providing native Direct3D 9, but the problem is that Nvidia cards do not support it due to their stubbornness to continue making closed source drivers (to the inconvenience of many Linux users). AMD, on the other hand, is not top dog in performance, so most people do not buy AMD GPUs. I remember when Linus Torvalds notoriously cursed out Nvidia, and honestly, I feel it was warranted due to how much they hold back Linux gaming as whole.
Only playing native Linux games
If you want to just run Linux games, well... sure. You can do that. At the time of writing this, 7749 Steam games claim to natively run on Linux and 47753 Steam games run on Windows. That's still plenty of games, but taking a look at the top 50 games on Steam's search, only nine of them (18%) run on Linux natively:
Native Linux games
- Counter-Strike: Global Offensive
- Total War: WARHAMMER II
- Sid Meier’s Civilization® VI
- War Thunder
- Stellaris
- ARK: Survival Evolved
- Tabletop Simulator
- Cities: Skylines
- Crusader Kings III
Windows and macOS exclusive games
- Divinity: Original Sin 2 - Definitive Edition
- Baldur's Gate 3
- Empire of Sin
- Rust
Windows exclusive games
- Destiny 2
- Phasmophobia
- DOOM Eternal
- Red Dead Redemption 2
- Dead by Daylight
- Tom Clancy's Rainbow Six® Siege
- Hades
- Apex Legends™
- Halo: The Master Chief Collection
- The Sims™ 4
- Among Us
- STAR WARS™: Squadrons
- Sea of Thieves
- Monster Hunter: World
- Borderlands 3
- Grand Theft Auto V
- The Elder Scrolls® Online
- STAR WARS Jedi: Fallen Order™
- Raft
- The Outer Worlds
- Assassin's Creed® Odyssey
- Fallout 76
- DARK SOULS™ III
- Half-Life: Alyx
- The Elder Scrolls V: Skyrim Special Edition
- Control Ultimate Edition
- Satisfactory
- Fall Guys: Ultimate Knockout
- The Witcher® 3: Wild Hunt
- Sekiro™: Shadows Die Twice (GOTY Edition)
- Deep Rock Galactic
- Black Desert Online
- Planet Zoo
- Fallout 4
- Warframe
- Squad
- Metro Exodus
Mind you, there are tons of really good games available for Linux from Steam that aren't even listed here, but you are also missing out on plenty of good games, too, and the "no tux, no bucks" philosophy only goes so far here.
Separate Linux and Windows PCs
I have two desktop computers: an Arch Linux machine and a Windows 10 machine. The Arch Linux machine is for when I want to do work. It's what I write my code on, check e-mails, browse the web, and so on. The Windows 10 machine is for playing games and running Windows applications. This setup works well for me. I don't have to dual boot, and pretty much everything works.
As ideal as it is, having two machines is costly, and I had to save up for quite a long time to get both. Most people only use one desktop PC, so they can either only use one OS or the other, use VMs, or dual boot.
Dual booting
Dual booting is inconvenient, and it's an inefficient usage of my time. Having to restart my PC, closing or hibernating all of my programs, every time I want to switch operating systems is a chore. It's so inconvenient that I end up staying on one OS, Windows 10, and hating it.
If I exclusively use Windows 10, then I am less productive. Windows 10's default command line (PowerShell) is absolutely terrible, and WSL, which has Bash, is far from being a perfect solution. I get that most people don't use command line for things, but I personally find extremely simple GUIs that do extremely simple things to be clunky and limiting, while being able to tell my computer to do things is just so efficient.
But I tried dual booting and it did not work for me. I think this meme perfectly describes the dual booting process for me:
KVM on Linux
Virtual machines are probably the best way to run Windows games on one machine without dual booting, as all programs are compatible. However, there are a few things you need:
- A dedicated, separate GPU for the host (if you want things to be seamless)
- Plenty of RAM and CPU cores so the host OS and guest OS do not get starved of resources. 32 GB of RAM and an 8 core CPU are fine, since, at the time of writing this, gaming performance does not generally improve significantly past 6 cores, thus you can reserve six cores for the guest VM
- If you want to use an Nvidia or AMD GPU and not on a professional card (i.e. Quadro, Radeon Pro), you'll need to trick the drivers into thinking you're not on a virtual machine, since these vendors want you to use the more expensive professional cards
For most games, this setup is fine! You don't need to dual boot, and starting Windows 10 is as simple as starting up a program... since that's exactly what you're doing!
However, there is a rather artificial limitation to this: anti-cheat. Some anti-cheat providers such as BattlEye and Valve Anti-Cheat will detect virtual machines and prevent them from playing on some or all games. In a Tweet, BattlEye stated the following:
in EFT over 90% of recently active VM users were found to be abusing their VMs to cheat
I really do not buy this. How do they know over 90% were abusing their VMs to cheat? And why not just detect and ban those people and not the less than 10% who are actually playing their games legitimately?
But regardless, using a VM limits your game selection due to anti-cheat, even if said games would work perfectly fine.
You can try to bypass these detections, but if you do so, that's now grounds for them to ban you for cheating, should you screw up.
Wine on Linux
As stated before, most games are Windows based, so you have to use Wine/Proton to run them.
Wine has made some fairly big improvements over the past few years in regards to compatibility. More games and applications are running with little to no issues. However, it's pretty far from perfect.
One program I use is HxD. This is the best Windows-based hex editor you can use. Sadly, it is closed source, so I am not able to simply recompile it for Linux, but Linux hex editors are either too broken or they lack the features HxD has, meaning I'm stuck with this if I want to do hex editing on Linux.
HxD runs, and all of its main features work fine. I can do file comparison, data inspection, checksums, etc. - the stuff I do usually with this tool. But there is one critical feature that does not work (as of Wine 5.22), and it has nothing to do with hex editing: rearranging the actual tabs.
HxD explodes if you rearrange the tabs on Wine.
Guess what happens on Windows when you rearrange the tabs?
Yep, the tabs actually get rearranged, and nothing breaks. If a small part of a rather simple tool - a hex editor - completely breaks everything on Wine, you can probably imagine that games can break in more spectacular ways.
Anti-cheat
A lot of games insist on using anti-cheat. Games that use EAC, BattlEye, Warden, and so on often do not fully work on Wine, and some anti-cheat solutions will even ban you for trying to run them on Wine.
Work has been done on getting anti-cheat software to work on Wine, but honestly, I doubt a Wine/Proton that correctly runs anti-cheat will be realized any time soon. After all, anti-cheat developers want to make sure they can detect cheating, and I don't imagine Wine will make it easy to detect cheating from outside Wine.
You know what? Cheaters suck. Screw 'em all.
The verdict
Right now, gaming on a Linux PC is a pick your poison deal. Your choices are:
-
Dual booting Windows 10 - Sure, this is the most compatible way, but rebooting completely sucks, and so does running Windows 10 on bare metal
-
Only running native Linux games (AKA "no tux no bucks") - Okay, you get fewer games, but they usually work at least
-
Running Windows games in a VM - If you have the hardware, sure, and while pretty much all games work, some overzealous anti-cheat software will stop you from playing online
-
Running Windows games in Wine - Well, anti-cheat and some DRM won't work, you'll almost always get worse performance, and some games will probably break because Wine is great, but there are quite a few games that work fine, and you don't have to buy a license for Windows 10
The best way to run PC games, compatibility-wise, is to just own a Windows 10 based PC, so I imagine this is why most people will pass up using Linux. That's fine. I completely understand that, and honestly, even as a Linux user, I cannot recommend desktop Linux in its current state for simply gaming.
All-in-all, gaming on Linux, while viable, is still far from being close to the level of performance and compatibility of Windows. If not being able to play many of the latest Windows games on Linux while having the same performance (or better) bothers you, don't play on Linux.
There are also several announcements intended to improve Linux gaming compatibility, such as with Collabora wanting to extend the Linux kernel to emulate Windows syscalls, so we'll have to see where we are next year, and I may just write another article then.
Edits
- 2021-02-27: Reformatted list for better overall readability as well as better gemtext compatibility