See JoelOnIsDotNetInnovative if you want to know what JoelSpolsky thinks.
Please reserve objectivity here.
and now for a counterpoint...
MicrosoftDotNet is innovative, and depending on where you stand, that may or may not be relevant.
Innovation isn't directly relevant to business value or even technical value. But it can help.
MicrosoftDotNet is not innovative in the broad sense - it's not the second coming of electricity; it's not ColdFusion, ferpetesake. But it is innovative in a number of areas, and innovative in the way it combines features and capabilities into the package. For example:
- MetaData in the intermediate language - MSIL is designed to support the inclusion of metadata into the "ByteCode", or as MS calls it, the intermediate language. This is distinct from previous p-code, including Java bytecode. Java uses a combination of /** */ and @tag comments to include additional information about classes and methods, but this information (apart from the @deprecated) is not built into the byte code. Such metadata allows the inclusion of version info, author info, documentation, and other attributes into the compiled classes. Very flexible. Flexible, but not innovative. Innovative does not mean "better than the way Java does it".
- everything is an object - there is no dichotomy between primitives and objects. Everything is an object. No "Integer.valueOf(X).intValue()" nonsense, as in Java. nothing innovative about everything being an object
- multi-language - developers can take advantage of a managed runtime without being restricted to a single language. This includes a common cross-language type system, which allows, for example, a class defined in VB to be extended in Perl, and then consumed in Java. (all running on the CLR, of course). It is only multi-language if your language smells a lot like C#. Any language wanting to operate this way is strongly constrained in what it can do - you are stuck with the object system and primitives, for example. It could be very much better, but as it is, not very innovative. [Not good enough for you doesn't mean non-innovative. And in actual practice, many languages seem to run well under .NET. This is not a totally new idea, but I certainly would call the actual implementation of it innovative]
- I think the only truly innovative idea in .NET, is the idea of a single unified type system, to be shared across all languages. Everything else in the framework has been done before, as far as I know. The JVM is multilingual, but it doesn't have a unified type system that all languages share, and that's what makes interoperability work.
- versioning - per assembly. This is not handled well in other environments, including COM, CORBA, or Java. In .NET, multiple versions of an assembly can be loaded into the same process at one time. this addresses a long-standing flaw in the OLE/COM approach. about time.
- security - role-based and evidence-based security. On the latter, one can authorize execution of code based on (a) the currently authenticated user, (b) the author of the code, and (c) the classes the code consumes. So that, userA may be prohibited from accessing the IO modules, and network code from authorB might be prohibited from running.
- GC - multiple mode garbage collection, optimized for either single-CPU (client) or multi-CPU (server) environments. This is not innovative.
Doubtless there are other systems that implement these individual features, but .NET combines them into a single package. Ok, so it's innovative.
Repackaging existing stuff is not innovative, introducing new ideas is innovation; I think the unified type system may qualify for that, but not the rest.
Another take: it is an innovation for Microsoft-oriented developers. We can finally ditch MFC, ATL, C++, and VB in favor of a pretty nice object-oriented platform. Other vendors and technologies may do it better, but this is definitely new and a welcome change for those who need to create Windows apps in a Microsoft-supported way.
Yet another take: who cares whether it is innovative? I find it comforting that .NET is built on top of well-understood ideas and that it "steals" the best ideas from other products. I don't want something innovative - I want something that works.
"it is an innovation for Microsoft-oriented developers. We can finally ditch...."
It reminds me of a phrase (or praise?) seen on the net when the first NT is released, to encourage other Windows users to try NT: "It sucks less."
For those of us who have no choice but to develop for windows it sucks less is certainly a motivating factor.
Sufficient incremental advances, taken as a whole, constitute innovation.
Nearly all progress is incremental. Everything builds on what preceded it.
Sticking to some sort of epiphany-based definition of "innovation" is useless.
-- arlied