[Mesa-dev] [Junk released by User action] Re: Statically linking libstdc++ and libgcc
Pierre-Loup A. Griffais
pgriffais at valvesoftware.com
Fri Mar 13 14:52:48 PDT 2015
On 03/12/2015 08:20 PM, Michel Dänzer wrote:
> On 13.03.2015 03:07, Pierre-Loup A. Griffais wrote:
>> On 03/11/2015 09:40 AM, Ian Romanick wrote:
>>> On 03/11/2015 09:31 AM, Tobias Klausmann wrote:
>>>> The problem in not forcing this to link statically is, that if a
>>>> distribution decides to not use this static option, the problem persists
>>>> on that distribution. On top every lib pulled in by steam from the
>>>> system would need to be link statically, like mesa. Instead of fixing
>>>> every lib steam pulls in (how many are there?), fix the steam runtime to
>>>
>>> Yeah, static linking is a terrible, partial solution.
>>>
>>>> a) not ship libstdc++.so and libgcc_s.so and declare older version of
>>>> these libs as not supported (thats what people do when they face the
>>>> incompatibility problem with steams versions of these libs: just delete
>>>> them from the runtime and everything is fine)
>>>
>>> Let's be 100% clear. This is NOT an option for Steam. They ship
>>> thousands of closed-source applications. These applications were built
>>> and tested against specific versions of specific libraries. Removing
>>> support for old run-times is equivalent to removing support for those
>>> applications. They can't tell their customers, "You upgraded your
>>> distro, so that game you paid money for no longer works. Tough break,
>>> kid."
>>
>> Quite true; developers build and test their games against this known set
>> of libraries through the Steam Runtime toolchain. Expecting them to
>> manage all of their dependencies (through bundling or static linking) is
>> unreasonable; all other platforms they're used to dealing with solve
>> this problem one way or another. Admittedly the current implementation
>> of the Steam runtime is only a first step towards providing a solution,
>> and some things could be done better, but this issue will stand regardless.
>>
>> The C++ runtime is a very complex beast and swapping it under an
>> application that makes heavy use of it is prone to failure. We'll keep
>> running games against the C++ runtime of the SDK version they were built
>> against, forever.
>>
>> The LLVM-enabled variants of Mesa are the only implementations where
>> this is an issue; this is actually causing affected users in the wild to
>> switch to the Catalyst driver, since it (along with all others) goes out
>> of its way to avoid this specific problem for this exact reason.
>>
>> Their only other option is to slam the whole Steam runtime off, which
>> breaks a lot of games outright because they depend on some library that
>> recent distros don't ship anymore, or moved to the new major version.
>
> In my experience, and from other reports I've seen, simply deleting
> libstdc++ / libgcc from the Steam runtime works just fine. This shows
> that a) the problem is that Steam overrides the system versions of these
> libraries with older versions, b) doing that isn't necessary, as the
> games work just fine with the newer system versions of these libraries,
> since they preserve backwards compatibility.
>
> So, a simple solution would be for Steam not to override these
> libraries[0] when the system already has the same or newer versions of
> them available. That doesn't require deviating from long established
> best practices for building and distributing software in distros.
Who would be responsible for supporting any fallout caused by running on
top of an unknown C++ runtime?
The contract right now is that we provide a runtime environment for
games to run in. If things break, we're responsible. We feel confident
providing that level of support because we're running against a set
known bits that were thoroughly tested.
The traditional distro process is awesome at what it does, but not great
for third-party software. The idea of providing stable runtime
environments for these isn't anything new and I think an increasing
number of people in the community are recognizing the need for it and
rolling out similar solutions.
The graphics stack is a particularly tricky edge-case in that end-users
fully expect to be able to upgrade it in-place to improve the existing
applications that they already purchased, unlike the rest of the runtime
these applications were built against. It also has strong ties to the
rest of the host system, where some drivers have versioned dependencies
to kernel bits, etc.
For all these reasons making sure the graphics driver libraries are as
self-contained as possible will result in a better experience for
end-users, be it Steam customers or GNOME application sandbox runtime
users or whomever else.
In a perfect world this wouldn't be needed at all; the GL libraries are
pretty much our only required window onto the host system, and something
like dlmopen() with a new linkmap would be an elegant solution to
sidestep that problem. In practice this loader path is barely
maintained, crashes more often than not, and is not supported at all by
GDB and other debugging tools.
I expect we'll get there eventually, but in the meantime I'm not sure
that the proposed workaround is horrible enough to justify the ado it's
causing.
Thanks,
- Pierre-Loup
>
> [0] Note that "these libraries" refers to the specific SONAMEs, e.g.
> libstdc++.so.6 and libgcc_s.so.1. If the system only provides different
> SONAMEs for these libraries, it should be fine for Steam to use its own
> versions of these SONAMEs.
>
>
More information about the mesa-dev
mailing list