Software obsolescence is also something that should be taken into account, especially on the server side. How many perfectly working NT machines are now endangered simply because Microsoft has decided that NT is no longer supported?
I've noticed that servers in particular tend to be installed and left running. With something like Linux, that "left running" may mean that it never goes down. Since the OS doesn't crash, applications starting and stopping or even crashing doesn't effect it, and live files can be backed up (unlike Windows).
I recently worked on a rather beefy e-commerce server running RedHat 7.3. The boot partition had been corrupted (don't ask me how!) and it had the original CDs, so it was back up and running in about 20 minutes. That's about 40 minutes of hard downtime since it was installed when RH7.3 was new. There was no reason at all to change to a newer version, and present day software runs on it just fine.
Compare this to weekly theraputic reboots for Windows servers in order to balance the application "integration" into the core OS that Microsoft seems so proud of. Taking down the online e-commerce applications in order to back up the databases, or for that matter every database. Microsoft deciding that something like NT is no longer supported, and of course you don't have source to even consider paying a developer to fix something found later.
Windows has support costs even when there aren't stupid user tricks, cracks, viruses, &etc.