I use GNU/Linux almost every day, but I don't really like the way
it handles 3rd party programs. In order for a program to work under
a Linux distribution, it has to be compiled specifically for that
distro. This is because all distributions use different versions
of shared libraries, essentially making them different operating
This is a superficial problem. Under the hood, they all use the same
protocols and kernel interfaces but they package them differently.
Therefore they look like different operating systems. This problem can
be solved easily by static linking. When you make a static binary,
the program has all the code it needs (including libc) to run.
This way, it becomes independent of the underlying distribution.
Sure, it does lose some opportunities to integrate with any specific
distribution but this is rarely a problem because Linux distributions
don't really add anything of value to the general GNU/Linux sphere.
They don't write any new code, but simply package existing code
in different ways to satisfy themselves.
I occasionally run into problems with mainstream software being
distributed with whatever Linux distro I happen to be running.
When it becomes too frustrating, I replace it with my own if I
can. Here is a list of programs which might be of general interest.
There are a couple of common properties these program have.
- They are all distributed under a BSD licence.
- They can be built as static binaries.
- Only one binary is necessary for each function. For instance,
the window manager doesn't have a separate configuration utility.
- There is no requirement to install binaries in any specific
directory. Just put the binary somewhere in $PATH and you are
ready to go.
- There is no system-wide configuration file. Configuration
files are created automatically in $XDG_CONFIG_HOME for user
- There is no resource file to be installed. Resources are
stored in the binary itself. Trying to customize a program
with different resources is a waste of your life.
- They don't use features which rely on distro-dependent libraries
such as FontConfig etc. If a font is to be specified, it's done
by a path to the font file.