The Steam Deck has grown into a certified smash success.
With multiple millions of units sold, the device has changed the way we think about PC gaming, spawned numerous clones, and secured a future for handheld gaming devices. With the backing of a multibillion-dollar corporation, that might not come as much of a surprise.
But there’s an untold story behind what has made the Steam Deck tick — a kernel of engineering passion that unlocked the puzzle of making Linux gaming work at this scale. A big chunk of it started with one independent developer — a man and his love for a game called Nier: Automata — and a community ready to take Linux gaming to the next level.
Humble origins
During the Steam Autumn sale last year, I decided to pick up Nier: Automata. The 2017 genre-breaking,action-adventure game is on Digital Trends’ list of the best games of all time, and though I had played it a bit on PlayStation 4, I never bought it on PC. As I typically do when buying a game on Steam, I looked up some information about how it ran on Steam Deck and I came across this Reddit thread.
The game ran great, which is something I’ve learned as I slowly crawl my way through for 30-minute session a few times a week, but it was the first comment on this thread that started an obsession: “Nier: Automata is 80% of the reason Linux gaming is as good as it is now, maybe 90%. Look into the history of DXVK. Long story short, one man’s love for 2B is the reason we have any of these incredible DirectX translation layers today.”
There’s a lot to unpack there for the uninitiated, but when I came across that comment, I was hooked. Because the commenter was right — Linux gaming has gone through a radical transformation these past few years. In the past, DirectX had been the main hurdle to overcome. The vast majority of PC games use Microsoft’s DirectX Application Programming Interface (API), which as you might suspect, only works on Windows. Games send instructions to the API, which gets work ready for your hardware. Given that most games were designed to work with DirectX, it meant you couldn’t play them on Linux — at least not natively.
For many years, the primary workaround was a compatibility layer known as Wine, but supported games were still very hit-or-miss. That’s due to how Wine worked at the time for gaming. It would take DirectX instructions and translate them to the OpenGL API. It worked for older or less demanding games, but there was a massive performance hit for modern titles leveraging more complex API instructions.
It really wasn’t until a cross-platform API called Vulkan came out in 2016 that things really started to take a turn for Linux gaming. Created by the same consortium that built OpenGL, Vulkan was designed to give programmers much more control over the GPU — similar to something like DirectX 12. With games getting increasingly complex, a low-level API like Vulkan was the key to unlocking performance parity when translating DirectX instructions.
Valve had supported Linux efforts for years, but Vulkan marked a turning point. Around the time Vulkan released, Valve started working on its own effort to bolster Linux gaming called Proton, a compatibility layer that’s integrated directly into Steam. And just like that — you can draw the line straight from Vulkan and Proton to the Steam Deck. “Vulkan is definitely an important piece of the puzzle,” one Valve developer, Pierre-Loup Griffais, explained to me over email.
But Valve didn’t do it alone. In fact, based on the company’s own commitment to the open-source philosophy, Proton bundles together a few open-source translation layers into a single package. The whole thing is built on the back of Wine, but for games, it uses VKD3D for DirectX 12 and Zink for OpenGL. There’s a key piece of technology that’s come to take on the bulk of games, though.
It started with DirectX 11, but now even includes DirectX 10 and DirectX 9. The name of the project is DXVK, which is self-described as a “Vulkan-based translation layer for Direct3D 9/10/11, which allows running 3D applications on Linux using Wine.”
It’s seen countless contributors since its creation, but it started very small. A German developer named Philip Rebohle was the mastermind, and according to him, it started as a passion project.
How Nier changed everything
“I started the project for real around the time I got out of university and started looking for a job, but it wasn’t really meant to be much more than a hobby project at first,” Rebohle told me. “Still, initial development was fast, and I shared my progress with a small Discord community, which in turn forwarded some of the more significant milestones to Phoronix.”
Phoronix, if you’re unfamiliar, is a website dedicated to Linux hardware news and reviews. Remember that name.
According to an interview with GamingOnLinux in 2018, Rebohle “always had an interest in graphics programming,” but mostly tinkered with hobby projects that, in Rebohle’s own words, “never really evolved into anything useful.” DXVK started due to some frustrations with the reality of gaming on Linux, but also because Rebohle “really wanted to get one specific game to work.” That game was Nier: Automata.
Rebohle described himself as “a bit of a fanboy when it comes to Nier” on the GamingOnLinux forums in early 2018, days after the initial release of DXVK. It wasn’t just that Rebohle cared about this game, though. In speaking with the developer, it was clear that Nier: Automata presented a unique challenge.
“Nier is the game that got me into learning — and debugging — the D3D11 API in the first place, initially because it did not even work on Windows on my RX 480 due to an AMD driver bug,” Rebohle told me.
Nier: Automata is a fairly simple DirectX 11 game, allowing Rebohle to get the title running on Linux without too much hassle. The PC port also had major issues on Windows, not the least of which was the AMD driver bug Rebohle mentioned. Above all, though, “it’s just a damn good game,” as Rebohle said.
“When it eventually started running on Linux using Wine’s OpenGL-based D3D translation, it was kind of slow and not rendering properly, so I did some more serious debugging there and learned quite a lot in the process. Having played around with Vulkan before, the idea for DXVK was born some time during this process,” Rebohle said.
Development started in late 2017, but by January 2018, Rebohle and a group of contributors had already gotten Nier: Automata up and running on Linux. Phoronix shared the news, and shortly after, Rebohle landed a contract with Valve to work full-time on its open-source projects translating Windows APIs to Vulkan. “Didn’t take long after that article was published for someone from Valve to reach out and ask if I wanted to work on this full-time as a contractor,” Rebohle told me.
The developer is still working with Valve today, mainly contributing to the DirectX 12 translation layer known as VKD3D-Proton.
Rebohle started DXVK and remains the lead developer, but it’s important to highlight the other developers who have contributed to the project. The GitHub project currently lists 137 contributors, and it’s fair to say that the project wouldn’t be where it is today without the community effort that went into it. Still, it may have never started if it wasn’t for Nier: Automata.
“It’s honestly hard to say,” as Rebohle put it to me.
What makes the Steam Deck special
“Holy shit. Please excuse the language, but honestly, I’m physically shaking right now. I don’t quite know how to process this.”
That was the response from Liam Dawe, editor-in-chief of GamingOnLinux, writing in a news post about the original release of Proton back in 2018. Reading through the over 500 comments on the post, you can feel the excitement and nervousness building as the realization is setting in: this niche community was about to go mainstream.
Just four years later, the Steam Deck would launch, putting Linux gaming on the map forever.
Although Valve could’ve built a Steam Deck without Proton, it’s hard to imagine it would have been successful. How do I know? Well, one piece of evidence is the failure of Steam Machines. Valve released Steam Machines in 2015, which were built to be affordable, console-like gaming PCs that ran on Valve’s own Linux-based SteamOS. Half a year after releasing, Valve had sold less than half a million Steam Machines, with some calling the device “dead in the water.”
There are many possible explanations for the failure, but according to Valve, one of its problems was attempting to adopt Linux gaming before it was really ready. In an interview with IGN, Valve designer Scott Dalton said: “There was always kind of this classic chicken-and-egg problem with the Steam Machine. That led us down this path of Proton, where now there’s all these games that actually run.”
In developing the Steam Deck, Valve couldn’t sit idly and hope that more native Linux ports started popping up, and it couldn’t demand that developers create games specifically for its platform. Valve saw how that could fail through its Steam Machines experience. It needed a backlog of games to support the Steam Deck, and the only reasonable way to achieve that backlog was with a robust compatibility layer for Linux.
It’s clear that Proton needed to work for the Steam Deck to be successful, too. Valve originally released Proton in August 2018, three-and-a-half years before the Steam Deck released. You can play thousands of games through Proton now, but at the time, Valve only listed a small number of supported titles, including Doom, Final Fantasy VI, Star Wars: Battlefront 2, and of course, Nier: Automata.
Since then, thousands of developers have contributed to either Proton or one of the various foundations it’s built upon, but there’s no denying DXVK is a critical part of the Proton we have today. It’s used for DirectX 11, DirectX 10, and DirectX 9 games, and even with DirectX 12 being the latest version, those three APIs still make up the lion’s share of games you’ll find on Steam.
The Steam Deck isn’t the only hardware DXVK has impacted, either. Intel is leveraging DXVK for DirectX 9 games on its Arc GPUs by translating the dated DirectX 9 instructions to the more modern Vulkan API.
Rebohle’s unexpected contribution in DXVK has become a permanent fixture of the game development world — a beautiful picture of the strength of open-source development.
Linux gaming has a secure future
As fascinating a story as DXVK’s origins is, that’s not to say the Steam Deck could have never come to fruition on its own. Valve’s Griffais tells me that that it had other projects in the works to get DirectX 11 working, and if DXVK didn’t show up, “one of these other DirectX 11 over Vulkan projects would have been prioritized instead.”
Valve clearly already had Proton in the works before DXVK, and likely its plans for the Steam Deck. But would it have worked? Would support be as good as it is today? How much longer would it have taken? What impact would that have had on the Steam Deck as a whole? There’s an alternate reality where DXVK is never part of Proton, sure, but that’s not what happened. DXVK has evolved into a foundational component of Proton, and therefore the Steam Deck, and Nier: Automata played a key role in that.
“DXVK is quite important to Proton,” as Griffais puts it, and Valve has “no plans to move away from DXVK for Proton.”
The result is that Linux gaming is in a much different place today than it was in early 2018. The future has never seemed so bright. It started with one developer’s love of Nier: Automata, but the effort has grown into something so much bigger since. In the end, that’s what makes open-source development so special. You never know whose fingerprints will end up in the final product and help shape the future of technology.