How does Proton work?
I got my Steam Deck 3 days ago and I just started exploring it. Given that I already have a large library of games on Epic Games, one of the first thing I did was installing the Heroic launcher. It worked well for some of the games (and not for others... like Hyper Light Drifter ;_; if someone knows how to configure it please help me). What I'm not understanding is: why do I need to have different proton versions installed for each game? Eg: one game requires GE 7.32 (what's GE by the way???), another game version 7.45, another one 7.20 etc etc etc... Why? I already had the latest version (8.0) of proton installed on my Steam Deck, shouldn't it be enough to run all other games being the latest version? 🫤
You don't usually need different versions of proton for most games. Games will be identified as working on a specific version of proton, but you can usually run them on the newest version without issue.
The two exceptions to this are:
If a game won't run on the newest version of proton, you may need to go back to an older version. This doesn't happen very often, but it is a concern.
GE proton is a special variety of proton that has extra media codecs and some game specific hot fixes built in. The media codecs can't be included in regular proton for legal reasons. If cutscenes in a game don't work it can be a missing media codec. This isn't usually an issue for steam games, valve is able to use fix the video cutscenes by distributing shader cache files. But for a 3rd party launcher like heroic, many games will require GE-proton.
Ideally, any change to any codebase would be a strict upgrade that's always better for everything.
But in practice, it just doesn't work that way. There's a lot of software out there that needs specific versions of specific libraries in order to not break, because even a straight bug fix can break software that was built and tested while that bug existed, if it was touched by that bugged behavior and the developers didn't know it was a bug. There are a lot of code bases that just rely on way too many dependencies to be able to actually read and comprehend the specification for every dependency they have. In theory that's not ideal, and leaning on a lot of external dependencies can break stuff in a lot of ways as they change, but it's how it is.
It's worse in some ways for games, because they take more shortcuts in the name of optimization, and in a lot of times are helped by graphics drivers to avoid breaking. Nvidia game ready drivers are a good example. There are games that have serious issues if you use a driver earlier than that, because nvidia will do hacky shit to fix the hacky shit the devs did and make it work.
At it's very basic, the only thing preventing Windows software from running on Linux is the order in which commands are called to start the program. What WINE (and Proton) do is reconfigure the order of command calls. Of course, it's much more complicated than that because of proprietary third-party software like DLLs, DirectX, and .NET redistributables. The difficulty is increased by nearly all of these being closed source, and so, developers just have to make educated guesses at what's going on behind the scenes much of the time.
As for getting games working specifically with WINE and Proton, it's nearly always better to run the game through a terminal window so you can see the logs output in real time. A lot of times, I find a big log at the start saying something like "{LIBRARY NAME} not found" or something along those lines, and simply installing the missing library through your package manager usually fixes the error. For example if it said "libssl errror" then try typing "sudo apt search libssl" and usually there will be a library literally called that letter for letter and install that, or try installing the closest candidate like maybe libssl3 or libssl-dev.
So, the way to actually launch games through a terminal window is this. Substitute your actual steam path for {your steam path} in the following examples. Then you'd type
~/{your steam path}/steamapps/common/{the name of the proton version you want to run}/proton run ~/{the path to the .exe you want to run}/{the .exe you want to run}.exe
.It's as simple as that. You might immediately get an error saying KeyError: 'STEAM_COMPAT_CLIENT_INSTALL_PATH' or KeyError: 'STEAM_COMPAT_DATA_PATH'.
For STEAM_COMPAT_CLIENT_INSTALL_PATH, simply add or update the environment variable for that key by typing
export STEAM_COMPAT_CLIENT_INSTALL_PATH=~/{your steam path}/compatibilitytools.d
and for STEAM_COMPAT_DATA_PATH typeexport STEAM_COMPAT_DATA_PATH=~/{your steam path}/steamapps/compatdata
@Stefh so a quick follow-up. I actually have this game and tinkered with it this morning to get it working. Here are the steps to get it working:
Click the Settings icon on Hyper Light Drifter (the 3 stacked slider bars icon) then click on WINETRICKS. Once Winetricks loads, click OK, select Install a Window DLL or component, then scroll to d3dcompiler_ with versions 42, 43, 46, and 47. Try installing any of them, I used the latest version, 47. But if you get an error, go back and try a different version. You can confirm that it was installed by going back into Winetricks and the version you installed should now be checked.
That should be it. It should work now. If that doesn't work, let me know and I'll try to help you out.
Alternatively, if you're more comfortable with command line stuff, go to the prefix folder for Hyper Light Drifter and run:
winetricks d3dcompiler_47
or try changing the version number to 42, 43, or 46 if that doesn't work.ALSO! I just want to point out that this actually isn't an issue with proton specifically. There are many Windows users complaining of this exact same issue.
Thank you! I made it working after installing 47, 46 and finally 43! Thank you 🥰
Yay! Happy to help! Enjoy!
GE is Glorious Eggroll, a FOSS contributor to proton that put his own tweaks.
You can force a specific Proton version on each game, though I’m not sure (off the top of my head at least) if that would help with not installing duplicates. Iirc best practice for using Wine for games is to have separate installations to avoid having conflicting dependencies, though I’m not sure if Steam does that.
Also, GE is short for Glorious Eggroll, which is the name of the dev who creates custom Proton distributions. People refer to these distributions simply as Proton GE or just GE. Ref: https://github.com/GloriousEggroll/proton-ge-custom
Steam makes Wine prefixes for every game so they don't interfere with eachother. (I think most if not all launchers do)
To answer OP: each new version of Wine and especially Proton introduces changes to fix one or more games that can potentially break other games. That's why if a specific Proton version has been known to work for a game, your best bet is to use that version for that game. But as always with Wine on Linux though, YMMV, so trying out several versions to see which one works best is a good idea. However I've found that most games work well with the latest GE.
Why is your account marked as a bot?
??? Am I? Never noticed that. Imma go check my settings
Edit: Not sure why that box was ticked. Guess I did that by mistake.
Maybe you're a bot but only your subconscious knows it.
This coming from a guy named "Dandroid"
Beep boop. I am a human.
I mean, if we think of how we sometimes respond to people in a mechanical, maybe even programmed way (e.g. “How are you?” with “Doing fine (though I’m actually not). How’re you doing?”), you ain’t wrong about it.
You can select it yourself on registration in some instances. Probably running some automation from that acc.
As a Windows user, I think the easiest software we can compare it to is NET Framework redistributables - your PC would need that to run some programs, otherwise it won't understand them. Just like how Linux needs Wine (Proton) to understand and run Windows software. People kinda answered everything else
Proton updates can sometimes unintentionally break or introduce bugs and glitches for certain games in which case you can force the use of an older version of proton where the game works best.
Most of the time though the latest version works fine. GE refers to a custom version of proton with community patches applied to faster than official proton releases.
I have used my Steam Deck for roughly two weeks now so I might be wrong but personally the latest Proton version running games through Steam works perfectly fine.