Microsoft's .Net was announced circa 2001 to great confusion. Nobody, not even from Microsoft, knew exactly what was to be covered by the marketing term. Microsoft, being such a large corporation, has a habit of trying several things at once and continuing with the ones that gain traction. I think of it as the "throw them at the wall and see what sticks" strategy.
What is .Net?
So now in 2008, what is .Net?
Now it is more usually known as .NET Framework.
First and foremost it is a programming environment. It is a garbage-collected, modern, object-oriented bytecode that runs on a virtual machine, and has security and networking in mind. It has several language front-ends that can interoperate closely.
It is a general purpose platform – versions of .Net run on desktops and web servers, and also on handhelds, in databases and as a browser plugin. That is, on Microsoft Windows desktops, on Microsoft IIS web servers, on Windows CE handhelds, in Microsoft SQL Server databases. Only the "Silverlight" browser plug-in build is somewhat cross-platform, running in browsers such as Firefox and Safari and on Apple Mac machines, and on Linux under mono.
.Net is in fact an ECMA
specification: (Standard ECMA-334
for C# and Standard ECMA-335
for the Common Language Infrastructure.
There's an independent Linux implementation called mono, developed by Miguel de Icaza and Novell. Mono is tolerated and encouraged, but not actively supported by Microsoft.
The .Net platform has three parts:
The Common language Runtime – the virtual machine that runs the bytecode.
The extensive Framework Class Libraries.
The compilers, IDEs and other Developer tools, mostly in Visual Studio.
.Net as a programming environment occupies a similar space as java, and not just because it's a OO, garbage collected environment with lots of class libraries. Many companies decide to develop applications in Java or .Net for similar reasons – they are modern enough (or simple enough, if you are feeling less charitable) to avoid the memory-management pains of old school-coding in C++. There are large numbers of staff available who know the languages well. And unlike the bleeding edge of Ruby on Rails or whatever is cool this year, the tools are mature, well known and have type safety. In Short, Java and .Net both occupy a sensible middle ground of general application development which is attractive to the majority of businesses. They aren't used much for operating systems or device drivers, but that's seen as a niche.
.Net, and the c# language in particular are inspired by Java, more than Microsoft would like to admit. The standard disclaimer is that no programming language is created in a vacuum, all have their influences. Java certainly wasn't the only influence on .Net. No features of .Net are experimental - all had already proven their worth elsewhere.
As a later design than Java, .Net has some additional features (improvements or complications depending on your point of view). As time goes by, C# is looking less like Java as the language expands and borrows from other sources.
The multi-language nature of the .Net platform is a kind future-proofing insurance policy. Though C# is the main language of .Net and will stay a statically typed language, if a different paradigm gains ascendancy, (functional or dynamic languages being the most likely options), these kinds of language also can run on top of .Net, and the existing investment in the platform, libraries and existing application code can still be used.
The functional language already prototyped on the .Net platform is called F#, and is based on OCaml. The dynamic languages in existence are implementations of Python and Ruby, called IronPython and IronRuby respectively. These languages use common libraries called the "Dynamic Language Runtime" or DLR, which provides support and interoperability for Dynamic languages on .Net. The DLR may also prove to be a toolkit for putting other languages on .Net. The joke language LOLCODE runs on it.
Software as a service
What of the software as a service idea that was a big part of the initial .Net announcement? Our code is more networked than ever, and .Net has some good tools for that, but the grand vision hasn't happened for Microsoft. It seems to be off the table, or at least it won't be branded ".Net" if it resurfaces. .Net Passport is still around, but now it's called "Windows Live ID". You'll see it on Microsoft sites like hotmail, MSN or XBox live. It works but hasn't conquered the world.
For those who were loudly protesting that software as a service was Microsoft's plan for domination, I will note that software services over the web have been quite successful for a number of other players e.g. Amazon.com and eBay for shopping, flickr for photos, facebook, Livejournal and the like for social entertainment, google search, google mail, google maps, google apps. Some of them run Microsoft .Net code on the back end, but most don't.
Some interesting software is now bundled with .Net as system libraries, and is considered part of .Net, whereas it is more precisely software written in .Net. In particular there is the extremely flexible Windows Communications Foundation (WCF) communications software finally evolves the lineage of COM, remoting, web services and message queues into something that is elegant, if not simple.
Microsoft is still producing software that targets the distributed identity model (which .net passport was originally designed for) but this arena is still in a state of flux. "CardSpace" is the latest buzzword from Microsoft here, while OpenId and a host of other proposals are also out there.
Is "software as a service" still Microsoft's main goal? It doesn't seem to be. There may not even be a "main goal" at present.