blr at robertsr.us
Sun Sep 23 15:02:11 MDT 2007
On Sun, 2007-09-23 at 10:30 -0600, Brian Hawkins wrote:
> I really like Linux. The OS is fast and very stable. There is one little
> aspect of Linux however that I just loath. This little aspect is the way
> that software is installed on the computer.
> I had an experience with Postgres that exemplifies the problem. I'm running
> FC6 and I needed Postgres 8.2 for some testing I was doing. The YUM
> repository only lets me install 8.1. Frustrated I downloaded the RPM from
> Postgres and tried to install it that way. The package manager told me
> there was a conflict with an older client library on my system. I tried to
> remove the older library only to find it was tied to a dozen or so programs
> including SVN - which I really cannot do without. Needless to say I was
> thwarted at every turn.
Look at "installonlypkgs" in yum.conf. Usually having multiple versions
of a library installed is not a problem. Having multiple -dev versions
and making sure you compile against the correct one can cause headaches.
> I know I could have overridden the dependency checks or I could have
> upgraded my OS. Now there is an option - "What are you doing tonight?", "Oh
> I'm upgrading my OS how about you?". Oh sounds like a hot date night to me.
Or just have 2 versions of the client installed. Sometimes all you need
to do is "yum install --enablerepo development postgresql-server ...."
to get the latest version on an older fedora once you've told yum to
install the new package, not upgrade to it.
> OK I've ranted long enough, here is my solution. Change the package manager
> to install everything under one directory. For example if I were to install
> Postgres on my system it would create a directory /programs/postgres82/ and
> put the program there. In the program directory it would create a /usr /var
> /bin or whatever it needed for the application to install. The package
> manager would also install whatever dependencies it required in the same
> location. Think of it as doing a chroot before installing the program and
> it's dependencies. I Then change the loader to look in the local program
> directory for libraries before it goes to the system wide directories.
> Now I know I may end up with multiple copies of a library but, big deal. I
> have half a terrabyte of space on my computer, it can handle it. This
> solution would let me install multiple copies of an application as well as
> multiple versions of the same application. I could also just update one
> application without the need to upgrade my OS.
The previously mentioned package managers that already do this pretty
much suck, in my experience. It sounds like a good idea, but in
reality, it doesn't solve the problem.
You still have a kernel. Some libraries (especially libc) just don't
work with other kernels. Plus there are kernel-related things that crop
up. If your program accesses USB, do you assume udev? You can't just
install it if the kernel isn't built for it.
> I once saw a scholarly paper written to try and solve the dependency
> problems that persist in Linux distributions. You know if the problem is
> that complex maybe the solution is not to solve the problem but get rid of
I like the windows solution. When your os gets updated automatically,
you just keep trying to update drivers until they work again. That's
But seriously, there's no such thing as a universal binary. Java and C#
come close, but with C/C++, there are so many compiler and linker
options that make libraries and applications incompatible, that
virtualization of the OS or the language is really the best way to go.
Either use a byte-compiled language or
[k]qemu/xen/kvm/VirtualBox/UML/Vserver/OpenVZ/??? if you don't want to
build from source.
More information about the PLUG