A top level domain. Has become the most fashionable after .com in recent months.
Supposedly for networks.
.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.


Recent patches from MS have caused the .NET vision to shrink somewhat: code can no longer be run remotely (so it no longer replaces Java applets online) and the Hailstorm/My Services/Bend over and SUBSCRIBE to pay-per-use software aspect has been abandoned... for now...

The general consensus of some prior writeups seems to be that Microsoft's .Net initiative is to be despised. Perhaps. In the interest of completeness, however, I'll add at least an outline description of what .Net is. I'll strive for objectivity, but without guaranteeing that I'll achieve it. Thanks in no small part to Microsoft's own marketing droids, the actual definition of the term ".Net" has been allowed to become somewhat confused in many minds. There seems to be some opinion, for example, that .Net=Passport. But while the Passport service runs under the .Net environment, and is developed with .Net development tools, the two are not synonymous.

From the developer's perspective, .Net consists of 3 components: the Common Language Runtime or CLR, the Framework Class Libraries, and .Net compliant Development tools. These are each briefly described below.

The CLR is the runtime environment of .Net, and, as such, is analogous to the Java Virtual Machine. Where the JVM is cross-platform, however, the CLR attempts to go one better by being cross-language. .Net executable code is known as Intermediate Language, or IL, which is the output product of all .Net-compliant compilers, and is analogous to Java Byte Code. This IL code is Just-In-Time (JIT) compiled within the CLR, which also provides caching services so that code pieces used multiple times don't have to be repeatedly recompiled. The CLR also provides non-deterministic garbage collection services, which Java has offered for years, and may be one reason that .Net is considered a ripoff. Code running under the CLR is said to be managed code, because its access to memory and other resources is managed by the CLR on the application's behalf. The CLR also administers the handling of different levels of trust, the idea being that you will grant a lower level of trust to code gotten off the internet, thereby preventing potentially malicious access to resources like disk and memory. We can count on any weaknesses in Microsoft's implementation of this scheme, which resembles the idea of the "sandbox", being discovered, broadcast, and exploited more or less instantly. As of the time of this writeup I am aware of several ongoing attempts to implement the CLR on other OS's and platforms, so that the CLR will be cross-platform as well as cross-language. This cross-language functionality is heavily advertised by Microsoft, and means that classes, modules, data-structures, and so forth, that are defined in one language may be instantly and effortlessly reused from within another, without the nightmarish plumbing that would be necessary to do this with their earlier COM technology. Microsoft's ultimate demo will be to compile a class in Visual Basic and then turn around and run it on a Mac or Linux box. I have not seen such a demo yet.

The Framework Class Libraries are, again, very analogous to similar libraries provided for Java implementations. They wrap and extend the Windows API, and provide all of the needed services for things like graphics presentation, peripheral interaction, threading, distributed objects, and so on. They are a vast set of libraries, and are wherever possible CLR compliant IL code themselves, but still have an irreducible core of native code.

.Net compliant development tools consist of the compilers and supporting tools. You do not have to use the Visual Studio .Net IDE to develop .Net applications. When I began working with the beta 1 release of the .Net SDK, the Visual Studio release was not included, and we compiled from a command line just like in the old days. The Visual Studio release, when it did come, had astonishing sytem requirements for processor speed and disk space, and was very much bloatware gone out of control. At any rate, Microsoft distributes 3 .Net compliant languages:

C# (pronounced C-sharp), is extremely similar, though not identical, to Java. It is the "premier" .Net language, and is explicitly positioned as a Java competitor.

C++ is the only language distributed with Visual Studio .Net that can generate "native" instructions. To produce CLR compliant IL, you must include what Microsoft calls "Managed Extensions", which, of course, are specific to .Net and Microsoft proprietary, and which drive standard C++ purists up the wall.

Visual Basic .Net is more or less completely incompatible with earlier versions of the language, which irritates VB developers with a lot of legacy code. It has been redesigned to incorporate some of the object-oriented features implemented by the runtime, such as inheritance, and is therefore now somewhat isomorphic with C#. Which raises the inevitable question of why you'd need both. And, indeed, there is a school of thought that Microsoft's surreptitious intention is to coerce VB programmers into becoming C# programmers, which would turn C# into a weapon aimed right at Scott McNealy's heart. Okay, that last bit is over the top, but you get the idea. There are an awful lot of VB programmers, though, and how they'll react to this is an open question.

There are many, many details about .Net I've left out completely, such as attribute based programming and reflection, the .Net version of ASPs, ADO, which is the managed code class library for database access, and on and on and on.

And a larger question remains also about Microsoft's ultimate intentions. They've made it no secret that their grand vision involves turning software into a service. In other words, you won't buy your software, you'll only subscribe to it. Which is an idea I am not personally wild about at all. I recently found a quote on a bulletin board, though, which I'd attribute but I can't remember who should get credit: "For years, Bill Gates has dreamed of finding a way to make the Chinese pay for software."

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.

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.

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.

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.

Y'know, if you log in, you can write something here, or contact authors directly on the site. Create a New User if you don't already have an account.