Except that doesn't really work well for real applications. Static linking GTK means that your application doesn't use the same theme as the rest of the desktop that's running a newer GTK. Static linking sound libraries means that codec plugins don't work, and you need to statically link those too, which can be a legal nightmare. And static linking libc is a horrifically bad idea.
Linux compatibility at the ABI level is an absolute joke. Source compatibility can even be an issue now and then, because so many projects just change the damn API with every release, and distributions generally only ship the latest version of most projects (few distributions ship every 2.x release of Python for example, even though each release has a minor API and ABI breakages).
That's all fairly irrelevant though, since Linux distributions go out of their way to impose entirely artificial barriers to compatibility. Even if you make a solid portable Linux binary, there's no way to make that binary installable in a cross-platform way that doesn't rely on the user opening a shell and having wasted weeks/months/years of their life learning how to use a shell instead of spending their time doing something more important (like spending time with real people, instead of enslaving themselves to babysitting and hand-holding their "time saving" computational apparatus).
Until Linux distributions either agree on a common package manager (and standardize package names, virtual provides, etc.) or agree on shipping a second cross-platform installation tool (there are a ton of these, some of which I believe can even integrate with RPM/DPKG, but if these tools are not installed on the system then installing packages still requires shell magic to install the damn installation tool).
The various framework developers don't put a lot of effort into testing binary compatibility I believe, and that's largely because few people ask for binary compatibility, because binary compatibility is useless on an OS where getting the binaries installed is a nightmare. In turn, companies don't bother trying to make universal binaries because they know it's entirely pointless, and companies that flat out _can't_ release source just don't bother with Linux... which is why a great deal of us still have Windows installations around. The only thing stopping a great deal of those applications being ported to Linux is the fact that they'd be absolutely impossible to install on Linux.
Take a modern game for example. Even assuming the game source was released, you can't package those things in an RPM. They come on DVDs packed to the brim with textures, sounds, musics, meshes, maps, scripts, videos, and so on. Are we supposed to install a single 4.4GB RPM? And then every time there's a minor update to a few models, we're supposed to download a new 4.4GB RPM because there's no standard delta-RPM mechanism shared by all the RPM distros? That doesn't even include Debian/Ubuntu of course.
There needs to be a cross-platform way of installing software -- and I don't even care if it's a graphical frontend to a compilation script to make the GPL fans happy, so long as it can figure out how to install dependencies on its own -- including a way of updating that software in a realistic fashion given all of today's applications' needs, binary compatibility isn't worth testing and developing for on Linux. It's there mostly to make a nice bullet point for a few enterprise distros that don't really need it, and that's it.
In turn, Linux is still just an "appliance" OS and anybody who needs to do more than run a web browser and email client and word processor (which is a far, far greater percentage of users than the Linux desktop advocates continually claim -- I can't name a single person, even my 80+ year old grandparents, who limit themselves to just those three things) simply can't use Linux because the repositories don't include the software they want (be it Bejeweled 2 or their local geneaology club's favorite software package) and there's no possible way they could ever figure out how to install that software even if there was a Linux version.
Linux's future in the mass consumer market, assuming these things don't change (and I'm 100% convinced that they never will), is going to be handhelds and other appliance-like devices... assuming Linux developers can ever manage to beat the popularity of Apple's competing devices, anyway. Which, as of yet and for the forseeable future, they can't. Android and Pre have nothing on the iPhone's sales. And if you care about Linux from an Open Source/Free Software perspective, those Linux devices don't even matter to you because they rely on proprietary software to get full functionality!
I can't stress it enough though. Software installation is Linux's Achilles Heel. Until that's fixed, Linux is a just niche nerd OS in the desktop space.
Small problem for Linux ? Sure. Big problem for Linux user? Of course.
Posted Jul 9, 2009 15:48 UTC (Thu) by marcH (subscriber, #57642)
[Link]
> anybody who needs to do more than run a web browser and email client and word processor (which is a far, far greater percentage of users than the Linux desktop advocates continually claim [...]) simply can't use Linux because the repositories don't include the software they want
So a typical Linux repository holds only web browsers, email clients and word processors, that is all? I agree with most of your (very good) post, except for this exaggeration above.
Performing such automated re-compilation and packaging is possibly easier than ensuring portability across multiple Windows versions.
Small problem for Linux ? Sure. Big problem for Linux user? Of course.
Posted Jul 16, 2009 19:15 UTC (Thu) by oak (guest, #2786)
[Link]
> Are we supposed to install a single 4.4GB RPM? And then every time
there's a minor update to a few models, we're supposed to download a new
4.4GB RPM because there's no standard delta-RPM mechanism shared by all
the RPM distros?
Any competent packager would of course split the thing into suitable
packages.
In case of a game and related data files, the game itself would be in one
package and all the huge data files could be split e.g. so that there's
one level/scenerio/campain per additional package (depending how huge they
are).
I think this suits nicely to the model how shareware & ID software worked
earlier. You get (open sourced) game and some single player tutorial/demo
level as package(s) (maybe included into the distributor's repository) and
based on how much user likes this, s/he can then buy the full game. When
the demo level is finished, user would see something like: "Demo ended,
buy the full game? [enter <publisher>'s show]" which would open Browser
to the shop.
The non-code level data could be packages in publisher's own repo which
provides them in general packaging formats (RPM/DEB/tar.gz). As data files
don't have dependencies, these can be installed to any distro version.
Only game binary package needs to be recompiled & separate for each
distros' distro versions and that could be done by the distros themselves
if the game source is open and this is agreed with the publisher.
I'm not sure how one could get copy protection to this. DRM doesn't work
very well and isn't approved by anybody. Maybe this kind of games should
have some kind of network element where user needs to log in with his/her
game registration?
Static linking
Posted Jul 29, 2009 3:44 UTC (Wed) by jeff@uclinux.org (subscriber, #8024)
[Link]
"Are we supposed to install a single 4.4GB RPM?" [when installing a static linked distribution-
portable game]
Well, game? Maybe 400M. Other things, sure. Doesn't make it right, but the incompatibility
problem is really quite serious, and disk space is cheap. Just for example... Download Xilinx
WebPack 11.1:
Jeff$ ls -l Xilinx_11.1_WebPack_SFD.tar
-rw-r--r-- 1 jeff users 2868316160 Apr 30 13:39 Xilinx_11.1_WebPack_SFD.tar
It's on that order of magnitude even with compressed installer files inside the tar. Mostly static
linked. Yes, I think for serious programs, this is a serious option. These programs have to work
today, next month, next year... if they achieve that, we'll see. If I need to distribute tools
binaries, --enable-static --disable-shared.
I think Bionic libc is a stellar library for a cell phone. I have never built any embedded system
with glibc, if you're doing that, you're not making the right engineering choices.