When you install any version of Windows on a computer, one conspicuous software tool is missing: a compiler. The software deployment model for Windows based systems is solely deployment of executable programs. In addition to the flexibility considerations mentioned in Section 1: Linux Is Open Source, this implies that software is 'compatible' with the lowest common denominator for the target audience of the software. This lowest common denominator could be Windows version, CPU type, memory configuration, video/graphics capability, etc. For example, a user running an Athlon XP or Pentium 4 processor is generally forced to use software compiled for a Pentium (or maybe Pentium II). This in turn implies the user cannot upgrade to new and improved libraries and re-compile for better performance (one MS solution to this particular issue is the COM model such as used with DirectX; while reasonable for a graphics library, no one would argue this is extremely complicated approach for simple programs).
To provide a point of contrast, consider the installation of software one obtains from the Internet. To install software obtained from the Internet, one would perform the following steps:
Linux, on the other hand, generally ships and gets installed with a compiler. Many software packages for Linux are therefore available as binary packages or as source code. Users wanting basic features and 'one-click' installation get it; those wishing more flexibility, or higher performance, can compile the code themselves, optimized for their machines. It should be pointed out that software installation on Linux systems is one of those cases many people often criticize; personally, I find package installation as easy as that on Windows. Command line tools such as rpm or apt-get are straightforward, but for those wishing GUI tools, rpmdrake and KPackage are two examples that work well. Further, with KDE and Konqueror, 'one-click' on a .rpm file will begin the installation process much like clicking a setup.exe file in Windows. Installation of binary software using rpm on Linux can be done using the following steps (compare to those for Windows, 4):
I should also emphasize that compiling from source is not hard in many instances. I find myself often preferring to install from source since a generally better performing program results. Also, custom compilation allows the user to compile with certain features enabled or disabled; if there is a feature of a specific application that you know you will never use, you can compile without it, thus creating a smaller and possibly faster application. With modern compilation tools, compiling from source is typically characterized by the following steps:
A key step here is Step 4, configuration. At this step, the Makefile is generated that contains commands for the compiler. Here, one can fine-tune the compilation process, specifying compiler optimization flags, compile in features (or disable features you know you will never need, which is also useful), etc. Some details of your system are probed and compiler settings adjusted accordingly. The cost of compiling your own, custom version of the software you download is relatively small and is far outweighed by the benefits you gain.
In summary, with software for Windows, you get what you get. Software vendors cannot assume that you have a compiler (if they want to supply source code, which is often not the case anyway), so 'must' supply an executable program. So that they do not have to maintain many, many copies of the same program, they compile for the lowest end system in their target market. Linux, on the other hand, provides the user with the option to use pre-compiled binaries or to compile from source. This is much more powerful and fits the needs of a far broader spectrum of users.