Managing dependencies properly is tricky, especially when you consider both the libraries used in your applications and the ones that are provided by your OS.
In this talk, I'll explain how this was done manually, with configuration management systems, layer based systems (such as docker), and graph based systems, such as nixos, Chef's habitat.sh and Google's bazel.
UPDATE: Recorded video: http://bofh.nikhef.nl/events/FOSDEM/2017/UA2.220/layervsdependency.mp4