In theory I think that different stacks (LAMP, Java, and Microsoft were the big contenders at the time) are similar enough in capabilities. There are a million pros and cons to each stack. But I strongly believe that how WELL you know your stack is MUCH more important than WHICH stack you use.
In other words, an experienced Java team will FAR outperform if they can use Java, and an experienced Windows team will FAR outperform if they can use Windows, and the skills of the team are much more significant than the variations between otherwise very very similar platforms. (See also http://www.joelonsoftware.com/items/2006/09/01.html).
So, when we started, Jeff was really good at Microsoft technology, so he was able to produce better code faster using Microsoft technology than if he had to learn Ruby or Python or whatever. And that was BY FAR the dominant decision point for us.
Also, the cost of Windows licenses is virtually insignificant. It's just a non-issue. Not just because of BizSpark (which we took advantage of), but because compiled C# code on Windows servers is so damn efficient you don't need very many servers. Our stack of ten web servers is SHOCKINGLY overprovisioned. They run at insanely low loads now.
Everyone should keep this in mind when they worry about server architecture - SO runs off 12 servers. As long as an app doesn't do anything crazy, it's going to scale very easily throughout the first few years. 1 server should be enough for almost anyone. 1 database, and a few frontend web app servers will take you to millions of views per day.
Unlike user software, most web apps get faster every year, and the stacks tend to get faster (due to better interpreters) not slower (due to silly 3D effects on the desktop).
pg loves to say that people who pay for server software are crazy. That might still be true for Google these days, but not for most people. You don't need many servers, and Windows is no longer slow.