|
|
Subscribe / Log in / New account

Why Steam on Linux matters for non-gamers

Why Steam on Linux matters for non-gamers

Posted Oct 3, 2013 3:21 UTC (Thu) by dlang (guest, #313)
In reply to: Why Steam on Linux matters for non-gamers by Cyberax
Parent article: Why Steam on Linux matters for non-gamers

>> you can't compile a program with the latest Windows 8 APIs and run it on older versions of Windows either.

> Actually, you can do it just fine. As long as you don't use the API in question.

while this is technically true, when you compile on a new system, you pull in new versions of libraries (or at least library headers), and so you are going to end up using new versions of the various APIs unless you go to a lot of effort to avoid it (much more effort than just compiling on an older system)


to post comments

Why Steam on Linux matters for non-gamers

Posted Oct 3, 2013 3:34 UTC (Thu) by Cyberax (✭ supporter ✭, #52523) [Link] (11 responses)

>unless you go to a lot of effort to avoid it (much more effort than just compiling on an older system)
Let me quote this incredible effort to limit APIs to the ones supported by WinXP:

>#define WINVER 0x0501
>#include <windows.h>

And that's it. Really.

Now, how can I do this with Ubuntu 13.04? I'd really like my programs compiled against the system glibc work on RHEL6.

Why Steam on Linux matters for non-gamers

Posted Oct 3, 2013 3:42 UTC (Thu) by dlang (guest, #313) [Link] (9 responses)

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 you may be able to do that for some microsoft controlled libraries because they control everything.

but if you use any third party libraries, you can't just set WINVER and count on it working, because the library version isn't tied to the windows version.

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.

remember that most of the APIs for RHEL were frozen well before 6.0 was released in 2010, so what you are asking for is even harder than saying that you want something compiled against the 13.04 libraries to work against Ubuntu 10,10 (or more likely 10.04) libraries.

If you want everything for an ecosystem to be controlled by one entity, go get yourself a Mac.

Why Steam on Linux matters for non-gamers

Posted Oct 3, 2013 4:00 UTC (Thu) by Cyberax (✭ supporter ✭, #52523) [Link] (8 responses)

> 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.

Why Steam on Linux matters for non-gamers

Posted Oct 3, 2013 10:48 UTC (Thu) by khim (subscriber, #9252) [Link] (7 responses)

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] (3 responses)

> 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] (2 responses)

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 (guest, #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 (guest, #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] (2 responses)

> 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] (1 responses)

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]

Gotcha. Thanks.

Why Steam on Linux matters for non-gamers

Posted Oct 4, 2013 10:40 UTC (Fri) by nix (subscriber, #2304) [Link]

In theory this could be done; the need for it was identified many years ago, at about the time glibc started using symbol versioning... but it would mean delicate changes to, among other things, GNU ld (and these days gold). Nobody did the work.


Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds