Join us on our own very special Reddit on /r/Linuxers.

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
We do often include affiliate links to earn us some pennies. We are currently affiliated with GOG and Humble Store. See more here.
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
123 comments
Page: «4/13»
  Go to:

minidou 17 Aug
QuoteBut irrelevant when compared to the importance of not breaking user space.

Nothing got broken. A two decade of depcrecation function got removed, but nothing broken. Or do we just expect everything to be forever maintained ?

Quoting: TheSHEEEPAlso, so what if they did that 20 years ago?
Somehow, EAC and a bunch of others still ended up using that function. Probably looked something up online, copied the function, it worked and that's it. Or had auto-complete suggest something, or whatever.
You can't expect programmers to double-check every single function they use for possible deprecation, that's absurd.

I don't expect anyone to check, I expect a CI or a quality gate to stop them from shipping.

Quoting: TheSHEEEPDeprecation warnings in compilations get overlooked.
That's not good, you can call it bad practice or whatever makes you feel good about yourself, but in practice, it happens. A lot. And that's the reality that has to be dealt with, not some kind utopia in which programmers have eradicated bad practice...

I'll call it bad practice, or just not being up to 2022 standards.
landeel 17 Aug
glibc compatibility has been a pain for a while.
I have released 2 games on Steam with native Linux ports.
I'm always afraid of doing a dist-upgrade, because it's very likely the compiled binaries won't run on the previous distro version.
It's absurd, but targeting win32 is more stable.
There should be a way to have multiple working glibc versions.
TheSHEEEP 17 Aug
View PC info
  • Supporter Plus
Quoting: minidouNothing got broken. A two decade of depcrecation function got removed, but nothing broken.
Really?
Well, then I guess this is all just a bunch of fake news.

Quoting: minidouOr do we just expect everything to be forever maintained ?
As long as people use it? Optimally, yes.
Ever heard of COBOL?

Quoting: minidouI don't expect anyone to check, I expect a CI or a quality gate to stop them from shipping.
Oh, you sweet little summer child...

Quoting: minidouI'll call it bad practice, or just not being up to 2022 standards.
Welcome to the real world.
Where libraries have to deal with not being used correctly without breaking the software that is using them incorrectly...
Where ages-old code has to be kept around or otherwise "bad things happen(tm)".

And where most people don't have the luxury of time to make everything work perfectly, and so mistakes happen.
ShabbyX 17 Aug
Quoting: TheSHEEEPMemory is not an issue anymore nowadays outside of very specific environments.

This is absolutely not true. 16KB is 4 pages of memory, saving that on every .so is huge! It's not just that you have the memory laying around, there are other costs too. There's the cost of loading the objects from disk, maintaining the struct page entries in the kernel etc.

There is a reason Linux is _fast_. With your approach, Linux would have been bloatware like the rest of them.

Quoting: TheSHEEEPThis is just one library.
Imagine if all libraries took this approach.

There is something called semantic versioning: https://en.m.wikipedia.org/wiki/Software_versioning#Semantic_versioning

It's made exactly so that libraries *can* break ABI if they have to, without the world imploding. glibc made a breaking change, and no matter how small, they should have made an incompatible version change. Yes that would still be inconvenient, but at least it's detectable and fixable. Imagine if python3 did all its backward incompatible things but still called itself python2.

Also, I don't understand at all how anyone could be defending win32 here. win32 is a piece of hot garbage. No one likes is, no one wants it, not even Microsoft. Is anyone suggesting we should stick with some shitty API for another 1000 years because ABIs should never change?

No, software changes, it's the nature of it (soft is in its name!). And ABIs break when they need to. But you have versions just so you can deal with this.


Last edited by ShabbyX on 18 August 2022 at 3:40 am UTC
People seem to forget what Arch, Tumbleweed and other bleeding edge rolling distros are. With bleeding edge you have to expect that API and ABIs are removed after a certain time of deprecation. If you want stability for many years use a regular release LTS distribution like Leap or RockyLinux/CentOS. It's not like Microsoft didn't break anything between Windows 7/10/11.
TheSHEEEP 17 Aug
View PC info
  • Supporter Plus
Quoting: ShabbyXThere is a reason Linux is _fast_.
Linux was fast before DT_HASH got removed.
I very seriously doubt the improvement gained by that is even noticeable for most people.

I'm not saying you can be generally messy with memory, unaware of alignment, etc.
But this one change was not some incredible performance boost that would've made a breaking change "worthwhile".

Quoting: ShabbyXWith your approach, Linux would have been bloatware like the rest of them.
With my approach, Linux would be as fast as it is, while also much less prone to breaking and much more attractive to people not liking their stuff break every now and again.

I don't mind it so much myself, it's generally easy to fix, too.
But that's not the mindset of most people.

Quoting: ShabbyXIt's made exactly so that libraries *can* break ABI if they have to, without the world imploding. glibc made a breaking change, and no matter how small, they should have made an incompatible version change. Yes that would still be inconvenient, but at least it's detectable and fixable. Imagine if python3 did all it's backward incompatible things but still called itself python2.
You are right, but we talking about what glibc DID do, not what they SHOULD have done.
And this isn't the first time something like that happened, either, outside of major version changes.

Of course I am assuming that major versions break things, that's just normal.
pgr 17 Aug
Quoting: ShabbyXThis is absolutely not true. 16KB is 4 pages of memory, saving that on every .so is huge! It's not just that you have the memroy laying around, there are other costs too. There's the cost of loading the objects from disk, maintaing the struct page entries in the kernel etc.
Everything has worked fine so far even with this extra cost, so I doubt the (real world) effect is huge. What kind of improvement this change makes for desktop use case?

Quoting: ShabbyXThere is a reason Linux is _fast_. With your approach, Linux would have been bloatware like the rest of them.
How come Linux is the fastest kernel there is when it absolutely follows that "bloatware" practice?
Eike 17 Aug
View PC info
  • Supporter Plus
Quoting: pgr
Quoting: ShabbyXThis is absolutely not true. 16KB is 4 pages of memory, saving that on every .so is huge! It's not just that you have the memroy laying around, there are other costs too. There's the cost of loading the objects from disk, maintaing the struct page entries in the kernel etc.
Everything has worked fine so far even with this extra cost, so I doubt the (real world) effect is huge.

Many small changes can sum up to a huge effect, though.

Quoting: pgrWhat kind of improvement this change makes for desktop use case?

Glibc is not only targeted at desktop use case.
CyborgZeta 17 Aug
Quoting: orzo
Quoting: ZlopezEven Linus Torvalds said: "Never break user space!"
Here is his full speech (+/- 6 minutes), including rant on glibc. It's eight years old now.

https://youtu.be/5PmHRSeA2c8?t=333
I've seen this video before. It's certainly aged well.
Gamewitch 17 Aug
Quoting: TheSHEEEPAlso, so what if they did that 20 years ago?
Somehow, EAC and a bunch of others still ended up using that function. Probably looked something up online, copied the function, it worked and that's it. Or had auto-complete suggest something, or whatever.
You can't expect programmers to double-check every single function they use for possible deprecation, that's absurd.

Oh that's easy to explain the DT_GNU_HASH function isn't as well documented according to what several devs have said. To the point where I've seen several point out some aspects of it are basically only documented via the mailing list and that's just bad look no matter how you slice it when talking bout something as core as a C library.
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 with no article paywalls. We also don't have tons of adverts, there's also no tracking and we respect your privacy. Just 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!
Login / Register

Or login with...
Sign in with Steam Sign in with Twitter Sign in with Google
Social logins require cookies to stay logged in.