> you can't have your software that's compiled against the lastest version of all libraries 'just work' against all older versions of libraries.
On Windows that works just fine for the core Windows services. Which cover quite a lot of ground - from loading images and UI to network protocols support.
> the way to do the equivalent on Linux is to get a set of the headers for whatever version you want to compile against, and use those for your compile, but Ubuntu doesn't provide RHEL libraries any more thatn RHEL provides Slackware libraries.
I can package most of the third-party libraries with my application - but I can't package glibc and _everything_ depends on it. And there's no way to say "use symbols that existed in glibc x.y.z".
Compiling stuff on Windows for older versions of OS? Easy, just set WINVER and maybe a couple of compiler switches. And don't forget to package your libraries. On Mac OS X it's the same (__MAC_OS_X_VERSION_MAX_ALLOWED), except that there's also a standard bundle format.
On stock Linux distributions it's basically impossible. You have to install a parallel environment in a some kind of container.
Posted Oct 3, 2013 10:48 UTC (Thu) by khim (subscriber, #9252)
[Link]
I can package most of the third-party libraries with my application - but I can't package glibc and _everything_ depends on it. And there's no way to say "use symbols that existed in glibc x.y.z".
Actually it's possible to do: as I've pointed out earlier LSB solves this problem. What you cannot really do is to use newer version of GCC. Not because of GLibC, but because of libstdc++. Just like GLibC libstdc++ is not designed to be linked into many different modules and it's not forward-compatible. LSB solves tis problem, too - but only up to GCC 4.6 (since libstdc++ is part of GCC you need to modify GCC to solve it, you can not just modify headers and libraries).
On stock Linux distributions it's basically impossible. You have to install a parallel environment in a some kind of container.
This is valid approach, too. -mmacosx-version-min=XXX on MacOS does something like this. Problem lies not with the fact that it's impossible to do in principle, but in the fact that nobody bothers to do that in timely manner: LSB is not supported by Debian, it's totally separate thing and new version of GCC is supported by LSB not when it's released, but years later.
Why Steam on Linux matters for non-gamers
Posted Oct 3, 2013 11:08 UTC (Thu) by hummassa (subscriber, #307)
[Link]
> LSB is not supported by Debian
this is incredible BS. LSB 4.1 is supported perfectly by debian, via the installation of the (oooh, surprise) "lsb" package. even packages compiled in Fedora 12 in C++ work if you install the (surprise, again!) "lsb-cxx" package. Just "alien"ate it, install it, voila.
Why Steam on Linux matters for non-gamers
Posted Oct 3, 2013 11:46 UTC (Thu) by khim (subscriber, #9252)
[Link]
LSB is not supported by Debian
this is incredible BS. LSB 4.1 is supported perfectly by debian, via the installation of the (oooh, surprise) "lsb" package.
That's not support. That's a joke. It reminds me my first experience with Debian many years ago. I've used RedHat back then with a couple of custom PAM modules and wanted to play with Debian. And shiny new (back then) version of Debian supposedly included PAM support. Ok, fine, I've installed Debian and tried this “support”. Can you guess what happened? Right: it was possible to install PAM and get shiny new /lib/libpam.so.0 library… and that's it. You could not use it for the logon authentication, it's not used by the xlock, etc.
even packages compiled in Fedora 12 in C++ work if you install the (surprise, again!) "lsb-cxx" package.
Sure, you can use it to run some LSB-compatible software (which does not really exist) but can you develop something for Debian using LSB? How will you know which version of LSB to target to support which version of Debian? Where will you find libraries to access APIs not included in LSB (and there are many APIs not included in LSB)? LSB package, yes, it's supported by Debian. LSB development… nope.
LSB was developed as a good basis for the hypothetical “Linux distribution's SDK”, but nobody bothered to actually make one. Because it's more-or-less impossible without help from distribution makers and distribution makers are not interested.
Why Steam on Linux matters for non-gamers
Posted Oct 3, 2013 13:11 UTC (Thu) by peter-b (subscriber, #66996)
[Link]
I'm bored of your excessively frequent, verbose and unnecessarily antagonistic posting. Please desist. *plonk*
Why Steam on Linux matters for non-gamers
Posted Oct 6, 2013 12:12 UTC (Sun) by krake (subscriber, #55996)
[Link]
> LSB was developed as a good basis for the hypothetical “Linux distribution's SDK”, but nobody bothered to actually make one. Because it's more-or-less impossible without help from distribution makers and distribution makers are not interested.
The problem is not interest of distribution makers, the problem with LSB is that it codifies what RHEL ships at the time of a LSB release.
To be actual useful for both SDK and Application vendors, it would have to specify a situation that distributions would then strive to implement.
I've been to an LSB meeting once. SDK providers asked for a binary compatible update of some libraries for the standard's next(!) version, but the request was turned down because those versions would not be already be available in RHEL at the time of the standard's release.
Why Steam on Linux matters for non-gamers
Posted Oct 3, 2013 14:49 UTC (Thu) by jwakely (subscriber, #60262)
[Link]
> LSB solves tis problem, too - but only up to GCC 4.6 (since libstdc++ is part of GCC you need to modify GCC to solve it, you can not just modify headers and libraries).
Could you expand on this part please?
What changed after 4.6, and what changes can you make to "fix" it?
Why Steam on Linux matters for non-gamers
Posted Oct 3, 2013 16:36 UTC (Thu) by khim (subscriber, #9252)
[Link]
What changed after 4.6, and what changes can you make to "fix" it?
Nothing have changed after 4.6, but as I've said it's a lot of work to support newer version of gcc and Linux Foundation have only done said work for GCC 4.6, not for GCC 4.7 or 4.8
The problem with LSB is that it's tries to solve backward compatibility problem by adding some packages “on the side” which obviously does not work: it's very easy to break compatibility if you are not thinking about it and the only way to make sure it's not broken is to use it. Compare situation with Android SDK, e.g.: Google actually builds things using said SDK which means that if it's broken problems are quickly found and fixed. And if some important APIs are needed then they are added to SDK, too. Distributions don't use LSB to build anything which means that problems with LSB are very low-priority (if they have any priority at all).
Why Steam on Linux matters for non-gamers
Posted Oct 4, 2013 14:19 UTC (Fri) by jwakely (subscriber, #60262)
[Link]