With .NET, all the choices are provided by Microsoft
Excuse the headline. I got a comment in a previous blog post, along those lines, and I had to respond.
No matter how many times that statement is made, it still isn't true.
Just to consider a couple areas:
On IDEs, Visual Studio is the "choice" provided by Microsoft, but have you considered: SharpDevelop - Not provided by Microsoft. Borland C# Builder?
On open source frameworks and projects. A while back I listed about 10 projects just in the area of source code control and project tools. Number of those provided by Microsoft? zero.
On databases, just look at the history of this blog and you will see entries about Oracle, DB2, Sybase, Firebird, MySQL, and other open source DBs too.
I will not claim that .NET gives you more choices in the underlying OS as compared to Java. Multi-OS is a core Java goal. .NET is a part of Windows. By definition, Java has "more choices". If you think multi-OS trumps every other dimension, then you're right, Java provides more choices.
I am also not going to claim that .NET has as many, or more, open-source projects as compared to Java. I don't know where I saw it, but somewhere I saw a stat that said, Java has now reached parity with C++ in the number of sourceforge projects. Java is 10+ years old, and has a lead here.
Ok, so what are you saying?
What I am saying is, the blanket statement that ".NET means elimination of choice", or ".NET means all the choices are provided by Microsoft," is wrong.
In general, multi OS does not trump every other issue. Most people, most companies, do not want "multi OS". They want a system that works. They have an operating system, or maybe they don't. But #1, they want an app that does the job, whatever it might be. The core goal is not "get an app that does the job on 10 operating systems". It is "get an app that does the job. (and I don't really care about the OS)"
In some cases, multi-OS may be of value. But in many, it is not. More often than not, these days the requirement is "I need to connect to X, Y, and Z", not "I need this app to run on operating system A, B, and C". In other words, Interop is the key demand, not multi-OS portability.