Before I tell you that reason, here is a simple task: write a program that sends an email to all users of a given system (actually a server). I give you the template message, where I mark user's full name with some sequence, say %FULL_NAME%.
The text starts with
Remember, you don't have any IDE's or compilers on the system, only the minimal server installation. VB is okay, then show me that program in VB.
On UNIX the answer is a shell command that uses only the standard UNIX Userland. Any UNIX system administrator can write such command in just 1-2 minutes, because it's simple. I can also show you a simple HTTP server written using only standard tools on UNIX, and no C code. Not possible on Windows.
Even though Microsoft is trying hard to make various components of the system interoperable, things only get more and more complicated. IE with its layers is fine, in fact I liked its design, but I'm afraid it's the only thing Microsoft can be proud of so far. The rest is debris of mostly unusable programming interfaces, each of which were used only once in some [Microsoft proprietary] application, and will eventually replaced with some new interface or technology. Isn't COM going to be replaced with .NET, for example?
In contrary, the components of UNIX are highly interoperable because of simplicity of the fundamentals: everything on UNIX is plain text, possibly with some predefined syntax, and every program is a stream processor. Nobody would ever invent anything simpler AND more flexible (and thus powerful) than plain text that passes through a chain of stream processors.
And that's one of the million reasons why, in particular, Windows servers keep losing their market share over the past years: what system administrators actually want is the simplest thing (a server) that works and gives them a possibility to automate any administration task.
UNIX is the simplest thing that works. Windows is the most complicated thing that sucks. Of course simpler things that suck are possible, but Windows is the king of complexity and uselessness.
(In fact, the complexity of API's and many other weird things like the "DLL Hell" are actually coming from IBM... But that's a different story. Let them open their own Channel9, and I'll show them... )
Before I tell you that reason, here is a simple task: write a program that sends an email to all users of a given system (actually a server). I give you the template message, where I mark user's full name with some sequence, say %FULL_NAME%. The text starts with