1

I'm a Windows user and I need to also use Linux distros heavily for work. Installing software has been so difficult with all dependency missing/version not upgraded/OS distro version unmatch.

Not that I don't appreciate the good stuff about Linux. I just want to know the reason. How is Windows handling this? Is it because Windows fat installer bundle all dependencies with it?

To be specific, let's take Ubuntu and apt. Everytime the OS upgrades, e.g. precise to trusty, dependencies break. And the workaround many times is just to keep using the old version. Of course the devs should test and make sure it's compatible with new OS version, and mark as so on repository.

  • 1
    Generally yes; the typical Windows program installation includes .DLL files (analogous to .so files in Linux) which are libraries the program uses. Folks are not allowed to distribute the Visual C++ libraries themselves as part of another package, which is why MS provides the VC++ Redistributable Libraries package to send alongside software that requires them. – DopeGhoti Feb 23 '16 at 18:01
  • 9
    Hmm. Any halfway reasonable Linux distributions should be able to resolve dependencies just fine. What distribution are you using? – Faheem Mitha Feb 23 '16 at 18:04
  • 1
    I'm voting to close this question as off-topic because the direct question is about Windows packaging; and because there's not a specific UNIX/Linux packaging/dependency question to answer. – Jeff Schaller Feb 24 '16 at 1:08
  • "Everytime the OS upgrades, e.g. precise to trusty, dependencies break" No, they don't. – muru Feb 24 '16 at 9:47
6

The short answer is that Windows installers usually include all the necessary libraries as DLL's, which are usually installed into the same directory as the app, and are usually only useable by that one app. This means if you have two or three Windows products which use the same source library (for example, a compression library, or a GUI element), they'll all have the same DLL's installed, potentially at different versions.

That leads to bloat, and can lead to security vulnerabilities as patches may not be applied consistently to all the installed copies of the same library.

Some shared libraries do exist (obviously. the OS supplied libraries are included), in which case you need to ensure you have them installed and there's no simple built-in Windows solution to this (it's often handled by the installers themselves).

Modern Linux distributions come with package managers which should handle dependencies for any applications in the distribution's repository. That is most of the work of packaging a distribution (along with customising elements to provide consistency). For example, apt handles dependencies in Debian so you don't need to worry, as along as you're installing from the Debian repository.

If you're downloading and installing your own packages or compiling from source, then yes, you'll need to manage dependencies yourself.

| improve this answer | |
  • 2
    Actually, apt handles dependencies, not dpkg. – Faheem Mitha Feb 23 '16 at 19:00
  • Windows installers can use assemblies which allow libraries to be shared. (But that just reduces the installed size, in the ideal case; each installer has to include its dependencies.) – Stephen Kitt Feb 23 '16 at 19:07
  • 1
    "That is most of the work of packaging a distribution": arguably for some distributions at least most of the work is ensuring license compliance... – Stephen Kitt Feb 23 '16 at 19:12
  • 1
    That's more about picking which packages to include, I was trying to infer the the work of doing the packaging is often about ensuring library consistency, etc. – EightBitTony Feb 23 '16 at 19:13
  • Could you elaborate a bit. E.g., I was trying to install Skype on Ubuntu 15.10. It doesn't work. Apparently it was meant only for 12.04 and that's why it failed. By doing some poking and configuration, it eventually got installed. What went wrong with dependency management, in this particular case? – Boyang Feb 26 '16 at 4:27

Not the answer you're looking for? Browse other questions tagged or ask your own question.