James Antill - Post a comment
Jun. 20th, 2007
A big problem is cascading dependencies, where upgrading app A pulls in an upgrade to library B which is not reliably backwards-compatible, so you have to upgrade app C to a version compiled against the new B - but you didn't want C to change.
The solution to this is to allow multiple parallel installations of packages, so that the two versions of B are not forced to conflict. This is useful for applications as well as libraries. If I can install the new version of A alongside the old version, then it's really easy to revert the upgrade - I just have to change a PATH or a symlink and restart it. I can also test the upgraded A (at least a little bit) before committing to running it. Package deinstallation then becomes a garbage collection job, instead of being crucial for the correctness of the package management tool.
OpenPKG sort-of does this, but it does so by allowing multiple installations of the package manager, so it's rather coarse-grained which means you lose sharing between apps whose version dependencies you want to decouple.
Nix claims to do exactly what I want, but I have not investigated it in detail...