We do often include affiliate links to earn us some pennies. See more here.

Recently it was noticed that users on more bleeding-edge Linux distributions that updated saw Easy Anti-Cheat no longer working on Linux, the culprit was glibc and now a Valve developer has spoken out about it.

Writing in a small thread on Twitter, Valve developer Pierre-Loup Griffais said:

Unfortunate that upstream glibc discussion on DT_HASH isn't coming out strongly in favor of prioritizing compatibility with pre-existing applications. Every such instance contributes to damaging the idea of desktop Linux as a viable target for third-party developers.

Our thoughts on the topic from this prior compatibility issue in BlueZ apply more than ever: https://github.com/bluez/bluez/commit/35a2c50437cca4d26ac6537ce3a964bb509c9b62#commitcomment-56028543
It is unfortunately yet another entry in a growing list over the years.

We understand that working with a focus on compatibility requires more resources and more engineering trade-offs, but strongly believe it is nonetheless the way to go. We are very interested in helping with any underlying resource constraints.

This prompted CodeWeavers (who work on Wine and with Valve on Proton) developer Arek Hiler to write a blog post titled "Win32 Is The Only Stable ABI on Linux" and their ending statement is something people should think on:

I think this whole situation shows why creating native games for Linux is challenging. It’s hard to blame developers for targeting Windows and relying on Wine + friends. It’s just much more stable and much less likely to break and stay broken.

Hiler certainly isn't the only one to think like that, with another CodeWeavers developer Andrew Eikum mentioning on Hacker News some time ago:

As a long-time Linux dev (see my profile), I have also found this to be true. Linux userland APIs are unstable and change all the time. Some transitions that come to mind that have affected me personally: ALSA->pulse; libudev->libudev2->systemd; gstreamer 0.10->1.0. All of those changes required modifications to my software, and the backwards-compat tools that are provided are buggy and insufficient. Meanwhile, you can still write and run winmm[1] applications on Windows 10, and they will work in almost all cases. It's simply the case that the win32 API is more stable than Linux userland APIs, so it's entirely plausible that games will run better in Wine, which shares that stable ABI, than they will on Linux, especially as time goes on and Linux userland shifts yet again.

[1] winmm dates to the Windows 3.x days!

Situations like this can be pretty messy and this is not a case of open source versus secret closed source anti-cheat stuff either, since the glibc issue affected a Native Linux game (Shovel Knight) and Linux software libstrangle. No doubt there are other things yet to be discovered that were broken by the change.

It is of course also a case that Linux distributions need to ensure they do quality assurance testing, especially for gaming which can end up showing up issues quite easily and that bleeding-edge distributions can and clearly do end up breaking things by pulling new software in so quickly.

Article taken from GamingOnLinux.com.
43 Likes
About the author -
author picture
I am the owner of GamingOnLinux. After discovering Linux back in the days of Mandrake in 2003, I constantly came back to check on the progress of Linux until Ubuntu appeared on the scene and it helped me to really love it. You can reach me easily by emailing GamingOnLinux directly.
See more from me
The comments on this article are closed.
117 comments
Page: «9/12»
  Go to:

Klaas Aug 18, 2022
Quoting: BlackBloodRumMy point was that people (such as yourself) often believed that enterprise level distros were pointless even for servers (…)
That's really insulting and bordering on defamation. Please don't put words in my mouth that I'd never say.

Quoting: CyborgZetaBut wouldn't running games, and programs/applications in general, inside containers fix this kind of issue? Isn't that one of the goals of Flatpak?

You wouldn't be able to use things like the nvidia graphics driver anymore unless you'd include a matching version as well. And then you'd have to fix the kernel.


Last edited by Klaas on 18 August 2022 at 12:03 am UTC
TheRiddick Aug 18, 2022
All multiplayer games have anti-cheat software. So really, do we want linux to be the single player only game platform?
Zagorim Aug 18, 2022
Quoting: GuestThere's an easy solution, ban the use of EAC in GNU+Linux native games.
Oh, wait...

Except that Shovel Knight is a native linux game that doesn't use EAC and it's still broken by the glibc update.
I think the glibc devs need to be more careful about the kind of updates they push and the impact they can have.
slaapliedje Aug 18, 2022
Quoting: Zagorim
Quoting: GuestThere's an easy solution, ban the use of EAC in GNU+Linux native games.
Oh, wait...

Except that Shovel Knight is a native linux game that doesn't use EAC and it's still broken by the glibc update.
I think the glibc devs need to be more careful about the kind of updates they push and the impact they can have.
https://www.phoronix.com/forums/forum/software/linux-gaming/1340528-glibc-2-36-dropping-dt_hash-has-been-breaking-easy-anti-cheat-games-with-steam-play

So according to this article and comments...
The superior method for for which broke (DT_HASH) is to use DT_GNU_HASH. Which has been around for 16 years...

Just to be fair to Linux and all the 'no stable ABI!' This is the GNU library, and isn't controlled at all by the Linux kernel, though clearly just as important.

So this isn't a case of the glibc devs needing to bw careful. They literally just changed the default compile flags to no longer include both methods, because they figured (clearly incorrectly) that people had all shifted to the much more optimized method. Which they have had 16 years to do.

Also sounds like Arch Linux at least has already changed their compile flags and people are testing 2.36-2 which seems to fix the EAC issues (and presumably games like Shovel Knight).

Edit: more technical details here.
https://flapenguin.me/elf-dt-gnu-hash

Sounds to me like some things could end up with massive performance boosts, if it was using the better prelinking!


Last edited by slaapliedje on 18 August 2022 at 9:11 am UTC
EagleDelta Aug 18, 2022
Quoting: BlackBloodRumIt's all on usage case. For a server, stable is better.

What is the definition of "stable" here? For things like RHEL, CentOS, Debian Stable, SLES, sometimes even Ubuntu Server "stable" generally means very, very old versions of software that many times is no longer maintained by the upstream developers. In many cases when I was a SysAdmin, that meant we had to install external YUM or APT repos to install the software that the project or company "supported" because what was included in the distribution was no longer supported by the community or the company behind the FOSS project and as such, support was entirely on us to manage.

As for enterprise, the advent of patterns like containerization (Docker, containerd, Flatpak, etc) has enabled the ability to have a stable OS with newer (or older) libraries running inside the application "container". However, in the case of glibc, I'm not sure that's an option. Especially on Desktops. glibc is so core to the OS that the container would have to ship GFX drivers as well that are built on the shipped glibc version separate from the host OS and anything else that entails.

When it comes to core system functionality, compatibility will always win out from the non-technical customers/users. There's a reason Microsoft has not successfully moved away from win32 yet, despite the amount of times they've wanted to and tried.
someusername71 Aug 18, 2022
QuoteMeanwhile, you can still write and run winmm[1] applications on Windows 10, and they will work in almost all cases

For some reason it's impossible to reply to the hackernews thread where this originally came from. Anyway, to that I would reply: Then please, write software with WINMM.

In an open-source setting (project), when a system library changes behavior (such as in the bluez case), downstream code can be adapted. Conversely, because adaptation is possible, such library changes are not seen as big a blocker as otherwise. It's a "good vicious circle", and it means that such systems need little, if any, layers of compatibility/emulation, which should benefit performance. Closed-source binaries just don't fit into that ethos, and (for lim time->\infinity), all closed-source binaries will need some emulation *anyway* for one reason or another, so there's little incentive for open-source projects to bend around for a closed executable just so it can run without compat layers for a few months.

So by all means, do write all closed software for WINMM.
F.Ultra Aug 18, 2022
View PC info
  • Supporter
Quoting: Beamboom
Quoting: F.UltraNew releases of WINE/Proton breaks games that worked with the older version from time to time so yes they are wrong in that WIN32 is the only stable ABI on Linux since it clearly isn't stable.

It's not a either/or, binary reality discussed here. It's not a question if this or that ever breaks at all, ever.

So how am I then to interpret CodeWeavers "WIN32 is the only stable ABI on Linux" when it have broken more times for me on my Linux system than glibc have ever done, yet this change by glibc triggers CodeWeavers to make that tweet?!
JordanPlayz158 Aug 18, 2022
Quoting: minidouI fail to see how glibc devs could be blamed for removing a function deprecated for 17 years (though I can agree a major version bump should have been called for). Do videogame devs need that much nursing ? EAC linux lib is a recent piece of software, how many deprecated dependencies do they use ?
Quoting: TermyI tend to agree with the criticism about unstable APIs for many cases - but in this case, i really blame Epic for using a function deprecated for almost two decades in a recent piece of software.
From everything I've read from other people, it wasn't obvious that the function was depreciated. You shouldn't need to search up, "is x function depreciated glibc" for every function you use, it should be immediately obvious (like most languages I know have comments or a depreciation tag), some say that all distros somehow knew about this but you shouldn't need to be familiar with linux development or need to be in the right communities to know about a depreciated function.
F.Ultra Aug 18, 2022
View PC info
  • Supporter
Quoting: KlaasBackporting security fixes can lead to a lot of trouble if something is missed. Remember the Debian OpenSSL bug a few years ago?

That had nothing to do with backporting, it was the Debian maintainer thinking that he could improve the entropy of the OpenSSL PRNG with a quick hack of his own.
F.Ultra Aug 18, 2022
View PC info
  • Supporter
Quoting: Zagorim
Quoting: GuestThere's an easy solution, ban the use of EAC in GNU+Linux native games.
Oh, wait...

Except that Shovel Knight is a native linux game that doesn't use EAC and it's still broken by the glibc update.
I think the glibc devs need to be more careful about the kind of updates they push and the impact they can have.

The question is why ShovelKnight have the same problem, very very few applications (and none of them games) should ever have the reason the read the ELF data manually. Everyone else should use the libc provided dlopen() function to open shared dynamic libraries.

Does ShovelKnight use some EAC like middleware?
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
The comments on this article are closed.