So different systems switch between different methods as their prieceved value of the different usecases change which upsets people who see the values of the tradeoffs differently.
If you have the perfect solution I'm all ears.
I experienced this lately when my Rust-compiled binary used too modern a libc version for the aging Docker container environment we used for deployment, which forced me to use another Docker container for local development -- which obviously isn't ideal and removes the 100% reproduceability promise.
First is pre internet, because updates cost money, and because pre internet security issues weren't common.
Second is now, change one thing every day, always run the latest code, automated testing to make the latest code always work. Also means don't need a security branch and a feature branch.
People hate change, and linux people have the ability to say no and do their own thing.
Python has easy_install, pip, anaconda and wheel; virtualenv to isolate packages. Node has npm and yarn (is it resolved?). Ruby gem defines version in code, bundler in Gemfile, Gemfile.lock; vendor/, rvm gemset, BUNDLE_PATH to isolate packages. Even developers can't find right answer.
Because it matters?
Package management is the main differentiator, I love pacman, I love PKGBUILD and makepkg.
Ubuntu is more stable in theory, but I've encountered broken packages (like hex editors with an incorrect hard-coded temp path, causing it to be unable to overwrite files).
$ pacman -Qi glibc
Depends On : linux-api-headers>=4.10 tzdata filesystem
1. This version is not present in Arch Linux Archive anymore [3], search for package page [4], View Changes, search for corresponding PKGBUILD revision [5], makepkg. It is much easier if package is not that old and can be found in /var/cache/pacman/pkg/ or archive.2. install with `pacman -U linux-4.15.8-1-x86_64.pkg.tar.xz`
3. skip package from being upgraded with /etc/pacman.conf IgnorePkg [6]
I had problems both with Ubuntu and Arch Linux updates. At least I can fix Arch Linux issues, Ubuntu felt broken.
[1] http://sergeykish.com/linux-poulsbo-emgd
[2] https://wiki.archlinux.org/index.php/Downgrading_packages
[3] https://archive.archlinux.org/packages/l/linux/
[4] https://www.archlinux.org/packages/core/x86_64/linux/
[5] https://github.com/archlinux/svntogit-packages/commits/packa...
[6] https://wiki.archlinux.org/index.php/Pacman#Skip_package_fro...
Ukku worked well for me to get newer kernels without issue, but kvm/virtualbox were totally borked, just as my hardware support was stable.
The forth model - multiple versions of dependencies live on the same system, environment constructed for each application. Deduplication works.
Bundled model has its values (just like vm) but it really shines with inadequate package management. If you don't like the bundled model switch to Arch Linux or NixOS.