Different app depends on different version of the underlying softwares.
On different ranges of versions. Usually something like “1.2 or newer”. With few exceptions that break ABI every year(looking at you, Boost) or 11 times a month(it is rust, who would have guessed). If everything was as hard as you described, then there is no way for me to play UT2004 back from, you guessed it, 2004. But I did, and all I needed just to install few 32-bit version of libraries and run it with OSS(very old audio api) emulation.
however it would cause dependency hell.
No, task of package manager is to solve dependency hell
universal packaging format
We had 2 universal packaging formats, now we have 5 universal packaging formats and two container types.
where each app is packaged with all of its dependencies.
Which in case of UT2004 means packaged with all exploits back from 2004.
On different ranges of versions. Usually something like “1.2 or newer”. With few exceptions that break ABI every year(looking at you, Boost) or 11 times a month(it is rust, who would have guessed). If everything was as hard as you described, then there is no way for me to play UT2004 back from, you guessed it, 2004. But I did, and all I needed just to install few 32-bit version of libraries and run it with OSS(very old audio api) emulation.
No, task of package manager is to solve dependency hell
We had 2 universal packaging formats, now we have 5 universal packaging formats and two container types.
Which in case of UT2004 means packaged with all exploits back from 2004.