Aside from the fact that there are many unix systems that run on many different platforms, just consider the problems that Windows software faces from this distribution modal, even though they really only have to worry about one version of windows, and one platform ( the PC ).
Even with just the PC to worry about, there are still two architectures: 32 bit and 64 bit. If you notice, the vast majority of windows software simply ignores 64 bit and only ships 32 bit software, leaving you with sub-optimal software if you have a 64 bit system. Then there are libraries. One software vendor does not want you to get strange errors trying to run their program if you don't have the proper library already installed, so they just include the library with their program ( making the download larger, even if you already have this library ). A second program does the same thing, but with a different version of the library. In the best case, program B contains a newer version of the library that is backward compatible, so if you install program B after program A, things work, but installing them in the reverse order leaves you with the older version of the library and so program B breaks. Often times though, the library vendor makes changes that are not backward compatible and does not bother changing the name of the library, so no matter which order you install the two programs in, the first one will break. This is called "dll hell".
Sadly, to avoid this, most windows software has resorted to shipping all of their libraries in their own program directory instead of a shared directory, so each program has all of its own private libraries and will never share with each other, which defeates the whole point of dlls in the first place and you end up using a lot more ram and disk space and time downloading all of the duplicate libraries.
This is why open source software is published in source form, and OS vendors have come up with package managers that sort out the dependency issues and download only the precompiled binaries that you actually need, without duplicating libraries all over the place. This also deals with the fact that there are many different unix systems that run on many different platforms.
apt
stuff?$ sudo apt-get install [name]
. The more rare software : Some must be built from source with {cmake .. && make, ./configure && make, waf, scons, etc. ~10 build options}..rpm
or.deb
or.tgz
packages. The source is also distributed for those who want to compile it themselves or examine it or modify it, or package it for one or more distros. Nobody uses.zip
for distributing binaries on linux because .zip files do not support essential information such as user, group, and permissions for the files they contain.