.NET: an entrapping device or situation
.NET: to catch or ensnare in or as if in a net.
.NET: to take in a net; to capture by stratagem or wile.
.NET: to enclose or cover with a net; as, to net a tree.
.NET: to produce or gain as clear profit; as, he netted a thousand dollars by the operation.
.NET: a trap made of netting to catch fish or birds or insects
.NET: the excess of revenues over outlays in a given period of time
.NET: a drag-net or hauling-net, of great size, and requiring many men to work it

This writeup previously contained a rather anti-.NET rant. While I still think that the .NET Framework/C# was heavily inspired by Java, the final release of the platform is much less resource-hungry (or perhaps our computers are just faster...). It's still more bloated than desirable, but it's certainly useable, and a vast improvement over VB6 and below. Of course, you can still program in "old-fashioned" C++ using MFC, if you're into that kind of stuff, and merely reap the rewards of a much-improved IDE and help system.

History

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.

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 AppleMac machines, and on Linux under mono.

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.

Market Position

.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.

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.