At this point game devs should just discontinue the native version if they aren't going to properly support it and just make sure the game runs flawlessly on Proton.
At this point game devs should just discontinue the native version if they aren't going to properly support it and just make sure the game runs flawlessly on Proton.
500 comments https://news.ycombinator.com/item?id=32471624
The syscall abi has been stable for decades, and any game that included glibc or compiled with musl keeps running just fine?
https://github.com/ValveSoftware/steam-runtime
https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/b...
Edit: Valve actually have some very interesting documents about their compatibility environments:
- https://github.com/ValveSoftware/steam-runtime/blob/master/d...
- https://gitlab.steamos.cloud/steamrt/steamrt/-/blob/steamrt/...
- https://gitlab.steamos.cloud/steamrt/steamrt/-/blob/steamrt/...
- https://gitlab.steamos.cloud/steamrt/steamrt/-/blob/steamrt/...
https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/b...
I hope they'll drop 32-bit support in the runtime with the next major version. More and more distributions are dropping it or are thinking about it. Any new game should really use 64.
The games by Loki Software are still running great for me. It's a matter of skill and discipline. SDL, OpenGL and alike are very stable.
The problems start when developers start to use lots of small third-party libraries and depend on particular versions of them, but IIRC on Windows it's also solved by simply shipping all the libs with the game.
Another option is to dynamically link against an old glibc version, the Zig toolchain makes that easy also for C/C++ projects.
There are many issues with libraries breaking backwards compatibility on Linux (like pretty much all GUI ones) but glibc, X11, OpenGL (and to some extent SDL - it used to not be like that, but in recent years they made "SDL1->SDL2" wrappers and there is or will be a "SDL2->SDL3" wrapper too) are fine. I'm not sure about Vulkan but i'd guess that is fine too.
There's probably an obscure linker trick to force an older glibc version number, but if that's the case it really should be the default since the C stdlib is supposed to be ABI backward compatible anyway.
As palata mentioned the "trick" is to build using the oldest version you plan to target. You can use a Docker image with, say, Debian (which has official docker images going back to Squeeze released in 2011) to build the binary and release that.
AFAIK there are some tools that allow you to fudge symbols, etc to allow you to use whatever you have on your system but these feel like brittle solutions and the easiest one is to just build on an older/stable release. It isn't like it takes more than a second to make a VM or docker image anyway :-P.
a) glibc will drop older versioned symbols over time making your binary not work at all
b) glibc owns ld.so and is not afraid to make incompatible changes, which is why running Sid Meyer's Alpha Centauri linux port requires that you dig out not just libc, but the entire dynamic linking stack and know how to bypass default executable interpreter in ELF files.
I wanted to port my semi-minimal 3D ECS game engine ~(10k lines) to a minimal distro, so I decided on Alpine after figuring Arch is actually very bloated on comparison.
I had to recompile even the single-executable command line prebuild system (premake5) for musl. Musl is a more minimal version of libc.
Got it to work fine after that, building a few components from source and getting a few like sdl from the distribution's repos. (also had to of course install relevant driver bits to get opengl working as the distro is truly minimal)
https://www.forbes.com/sites/jasonevangelho/2024/08/21/linux...
The same, as I understand it, cannot be said about the Linux-native API. SteamOS may have stabilized it somewhat, but there's a reason why the readme on their site for this basically says "it may run on Linux proper, but we're not supporting it except on Steam Deck"
Also, Valve has recently insituted changes about how native titles work forcing existing native titles onto the scout 1.0 runtime and giving developers the ability to pick newer stable targets.
https://store.steampowered.com/news/collection/steam/?emclan...
> Native titles will execute in 'Steam for Linux runtime 1.0 (scout)' by default, instead of the legacy runtime environment. This behavior is consistent with Steam Deck and promotes better compatibility across all Linux desktop distributions. Note that this new feature can be turned off globally with "-compat-force-slr off" on the Steam client command line.
Its also the case that the original version of this that was bouncing around in the 2010s was more of a gaint shell script hack and it was possible for games to depend upon the host system in way which could break over time. Today it is utilising stuff in the flatpak ecosystem:
https://ftp.belnet.be/mirror/FOSDEM/video/2020/UD2.208/conta...
Sometimes if there are issues with the native linux release you can quickly swap over to the windows/proton version and see if that fixes issues.
Valve are absolute heroes in trying to create stable targets for linux gaming whether that be running windows games via proton or having a stable container target for native support.
I haven't had to boot into windows for nearly a year at this point and yet still playing new games on release without much issue (occasionally had to force to use a newer version of proton).
The only games I cannot run are competitive multiplayer games that do intrusive kernel level anti-cheat, but fortunately I don't play those games. https://areweanticheatyet.com/