It's been an exciting twelve months here at CodeWeavers. One year ago, Valve publicly announced and launched the product we had been developing together
privately for over two years. This is Proton, an enhancement to
their Steam Play initiative. Proton's slot in Steam Play is to allow Linux
gamers to play Windows-exclusive games, using the Wine technology that we've
spent decades developing.
Proton's launch day was exciting. The launch window that Valve set was after our Minnesota-based office closed, but we stayed after hours. We spun up a chat room with our contacts at Valve, ordered some pizzas to the office for dinner, loaded up all sorts of Steam-related news sites, web forums, and chat rooms, and waited for Valve to push the button. We were excited to see the reaction, yes, but we were also ready to react immediately to any emergency issues that users found as our work made its way into the real world.
But to our relief, the launch went incredibly smoothly. Nothing caught fire. Proton worked for most users. We feared we would hear, "everything is broken!" but instead we heard, "wow, this works really well!". One of my favorite reactions to the announcement came from Liam over at GamingOnLinux.com:
“Holy #@%$. Please excuse the language, but honestly, I'm physically shaking
right now. I don't quite know how to process this.”
—GamingOnLinux.com - Valve officially confirm a new version of 'Steam Play' which includes a modified version of Wine
Since then we've gone on to make a ton of improvements to Proton. Here's some of the highlights from the past year that stand out to me.
- Four major Wine version upgrades.
- Extensive improvements to window management quirks, including contributing fixes and bug reports to the window managers themselves. Think alt-tab, window movement, fullscreen switching, mouse and keyboard focus, and so on.
- A ton of work on improving gamepad support, including input mappings and rumble support.
- Continued tracking the latest Steamworks and OpenVR SDK releases.
- Implemented a VM-based build system to allow users to make custom Proton builds more easily.
- Supported the development of and integrated FAudio, an open-source XAudio2 implementation, to improve our audio support for newer games.
- Began shipping wine-mono, our open-source replacement for Microsoft .NET, and have continued to make improvements to it.
- Tons of work to support non-English locales and languages.
Of course there are a ton of other improvements I didn't list here. Things that allow individual games to start working, small improvements for certain Linux distros, quality of life tweaks for users and developers, and some heavy lifting projects that have yet to pay off. And the sub-projects we depend on, like DXVK and SDL, have seen their own massive improvements over the past year.
Beyond our own work, we have also seen an amazing community spring up around Proton and Steam Play. There are a number of chat rooms dedicated to Proton, and Proton is now a fixture in Reddit r/linux_gaming discussions. One of the shining jewels of the community is the ProtonDB, where users can report their own experiences with running games in Proton.
The amount of effort and excitement around Steam Play over the past year really reflects how much energy we have on tap in the Linux gaming community. Steam Play allows Linux gamers to play tons of games with no extra effort. And it allows developers who may not have planned to develop for Linux to gain sales and an audience in the Linux market. Proton is one piece in the much larger picture of allowing the Linux platform to be competitive with, and even surpass, other platforms.
What's in store for Proton in the near future? I don't want to make any radical promises, so I will keep this realistic. On the short term roadmap, we're integrating vkd3d to support Direct3D 12 applications; we have some exciting improvements for controller support coming down the pipe; we are taking a serious look at performance and considering our options for making improvements without breaking everything that is already working; and we have some major plans for wine-mono. There's more going on, of course, but the timelines on those features are more nebulous.
Finally I'll close out this blog post with some stats. Everybody likes stats.
There have been 409 changes to the Proton project itself since release, not including any of the sub-projects. That's more than one change per day, on average.1
Between Wine 3.7, which the first release of Proton was based on, and Wine 4.11, which the latest release of Proton is based on, there have been 7,998 changes to Wine.2
The number of Proton-specific changes has been fairly stable. Proton 3.7 had 295 changes to Wine; Proton 3.16 had 391; Proton 4.2 had 374; and so far Proton 4.11 has 321. This means most of our improvements are going upstream to the Wine project, so all Wine users can benefit.3,4,5,6
According to an analysis of user-submitted ProtonDB reports by BoilingSteam.com, reports of Very Good game quality from the original Proton release has improved from about 30% to over 50%.
Thanks for reading, and thanks for playing.
1 proton.git$ git log --pretty=oneline proton-3.7-20180821..proton-4.11-2 | wc -l
2 wine.git$ git log --pretty=oneline wine-3.7..wine-4.11 | wc -l
3 wine.git$ git log --pretty=oneline wine-3.7..origin/proton_3.7 | wc -l
4 wine.git$ git log --pretty=oneline wine-3.16..origin/proton_3.16 | wc -l
5 wine.git$ git log --pretty=oneline wine-4.2..origin/proton_4.2 | wc -l
4 wine.git$ git log --pretty=oneline wine-4.11..origin/proton_4.11 | wc -l
About Andrew Eikum
Andrew was a former Wine developer at CodeWeavers from 2009 to 2022. He worked on all parts of Wine, but specifically supported Wine's audio. He was also a developer on many of CodeWeavers's PortJumps.