In 2010, we announced Steam Play: a way for Steam users to access Windows, Mac and Linux versions of Steam games with a single purchase. More than 3000 of the games that have been added to Steam after that point have included Linux support, with more titles being added every day. Since then, we’ve continued to look for ways to make more titles easily accessible to Linux users.
So, two years ago, we started an effort to improve the quality and performance of Windows compatibility solutions for Steam games. A lot of our work has been in the form of supporting Wine[www.winehq.org] and other existing compatibility projects. We have also been integrating these tools into the Steam client to provide the same simple plug-and-play experience offered by regular Linux games.
Our goal for this work is to let Linux Steam users enjoy easy access to a larger back catalog. We think it will also allow future developers to easily leverage their work from other platforms to target Linux. This would give them the option of focusing on areas that would make a meaningful experience difference for all users instead, such as supporting Vulkan[www.khronos.org].
As a result of this work, today we are releasing the Beta of a new and improved version of Steam Play to all Linux users! It includes a modified distribution of Wine, called Proton, to provide compatibility with Windows game titles. Here are some of the improvements it brings to the table:
- Windows games with no Linux version currently available can now be installed and run directly from the Linux Steam client, complete with native Steamworks and OpenVR support.
- DirectX 11 and 12 implementations are now based on Vulkan, resulting in improved game compatibility and reduced performance impact.
- Fullscreen support has been improved: fullscreen games will be seamlessly stretched to the desired display without interfering with the native monitor resolution or requiring the use of a virtual desktop.
- Improved game controller support: games will automatically recognize all controllers supported by Steam. Expect more out-of-the-box controller compatibility than even the original version of the game.
- Performance for multi-threaded games has been greatly improved compared to vanilla Wine.
This goes hand-in-hand with an ongoing testing effort of the entire Steam catalog, in order to identify games that currently work great in this compatibility environment, and find and address issues for the ones that don’t. The initial set of supported games that we are enabling with this initial Beta release is as follows:
We will be enabling more titles in the near future as testing results and development efforts progress; in the meantime, enthusiast users are also able to try playing non-whitelisted games using an override switch in the Steam client. Going forward, users can vote for their favorite games to be considered for Steam Play using platform wishlisting.
Steam Play whitelisted games will not be offered for purchase or marked as supported on Linux on the Store during the initial Beta period.
Proton, the tool that Steam Play uses to provide Windows compatibility, contains a custom version of Wine as well as additional libraries developed alongside it. It’s fully open-source and available right now on GitHub[github.com]!
If you’re familiar with building open source projects, you can even make your own local builds of Proton; the Steam client has support for using those to run games in lieu of the built-in version. Join the discussion in the issue tracker and share your patches and testing results with the rest of the community!
Q: What do I need to get started?
Not much; here’s what to keep in mind:
Q: What is Proton exactly? How does it differ from normal Wine? Who worked on it?
Proton is a tool distribution based on a modified version of Wine. The included improvements to Wine have been designed and funded by Valve, in a joint development effort with CodeWeavers. Here are some examples of what we’ve been working on together since 2016:
- vkd3d[source.winehq.org], the Direct3D 12 implementation based on Vulkan
- The OpenVR and Steamworks native API bridges
- Many wined3d performance and functionality fixes for Direct3D 9 and Direct3D 11
- Overhauled fullscreen and gamepad support
- The “esync[github.com]” patchset, for multi-threaded performance improvements
Modifications to Wine are submitted upstream if they’re compatible with the goals and requirements of the larger Wine project; as a result, Wine users have been benefiting from parts of this work for over a year now. The rest is available as part of our source code repository for Proton and its modules.
In addition to that, we’ve been supporting the development of DXVK[github.com], the Direct3D 11 implementation based on Vulkan; the nature of this support includes:
- Employing the DXVK developer in our open-source graphics group since February 2018
- Providing direct support from our open-source graphics group to fix Mesa driver issues affecting DXVK, and provide prototype implementations of brand new Vulkan features to improve DXVK functionality
- Working with our partners over at Khronos, NVIDIA, Intel and AMD to coordinate Vulkan feature and driver support
Q: What is the performance like?
A performance difference is to be expected for games where graphics API translation is required, but there is no fundamental reason for a Vulkan title to run any slower.
Q: Are there any games that will never work with Proton?
It’s likely that some games using complex DRM or anti-cheat systems will be difficult, or even impossible to support.
Q: When will additional game titles marked as compatible with the new Steam Play?
We’ll whitelist new batches of games as testing progresses, with no set cadence. New games will be added to the system without requiring a Steam Client update.
Q: Can I try a game with Proton even if it’s not marked as compatible?
Yes; head to the Steam Play options of your Steam Client and you’ll be able to enable it for all games.
Q: Any plans for macOS support?
While Wine and Proton work on macOS, there are no plans to support the new Steam Play functionality on macOS at the moment.
Q: I’m a developer; if my game is already supporting Linux, does this change anything?
Probably not; if you’ve already ported your common code or are using an engine that supports Linux, keep doing what you’re doing, you’re good to go.
Q: I’m a developer; I wasn’t planning on targeting Linux, how can I best leverage the new Steam Play?
We recommend you target Vulkan natively in order to offer the best possible performance on all platforms, or at least offer it as an option if possible. It’s also a good idea to avoid any invasive third-party DRM middleware, as they sometimes prevent compatibility features from working as intended.
Q: I’m a developer; my game got whitelisted in Steam Play; does this mean I have to support an additional platform?
No; if a game was whitelisted as a result of our testing, we’ve assessed the experience to be identical (save for an expected moderate performance impact). Users playing through Steam Play experiencing Linux-specific issues should be directed to Steam for support. Keep in mind users were most likely already playing your game using Wine; you just have better visibility into it now.
—-
If you have any questions that aren’t answered above, head to the Steam Community and get a conversation started!
– Pierre-Loup