The .NET Framework was designed with several intentions:
Interoperability - Because so many COM libraries have already been created, the .NET Framework provides methods for allowing interoperability between new code and existing libraries.
Common Runtime Engine - Like the Java platform, programming languages on the .NET Framework compile into an intermediate language known as the Common Intermediate Language, or CIL; Microsoft's implementation of CIL is known as Microsoft Intermediate Language, or MSIL. Unlike the Java platform, however, this intermediate language is not interpreted, but rather compiled in a manner known as just-in-time compilation (JIT) into native code. The combination of these concepts is called the Common Language Infrastructure (CLI), a specification; Microsoft's implementation of the CLI is known as the Common Language Runtime (CLR).
Language Independence - Unlike the Java platform and COM, the .NET Framework introduces a Common Type System, or CTS. The CTS specification defines all possible datatypes and programming constructs supported by the CLR and how they may or may not interact with each other. Because of this feature, the .NET Framework supports development in multiple programming languages. This is discussed in more detail in the .NET languages section below.
Base Class Library - The Base Class Library (BCL), sometimes referred to as the Framework Class Library (FCL), is a library of types available to all languages using the .NET Framework. The BCL provides classes which encapsulate a number of common functions such as file reading and writing, graphic rendering, database interaction, XML document manipulation, and so forth.
Simplified Deployment - Installation and deployment of Windows applications has been the bane of many developers' existence. Registry settings, file distribution and DLL **** have been nearly completely eliminated by new deployment mechanisms in the .NET Framework.
Security - .NET allows for code to be run with different trust levels without the use of a sandbox.
Because of the inherent nature of the .NET Framework, through its use of an intermediate language, it is platform independent. While the consensus is that the .NET Framework is only available for the Microsoft Windows operating system, this is inaccurate. Microsoft provides the Shared Source Common Language Infrastructure, a version of the CLI, for Windows, FreeBSD and Mac OS X. Additionally, because the CLI is now an Ecma International standard, several open source development projects have sprung up to provide support for additional platforms; the most notable of these projects are Mono, DotGNU and Portable.NET. Microsoft also provides a scaled-down version of the .NET Framework for use on smart devices, such as Pocket PCs and Smartphones, called the .NET Compact Framework.
Although the .NET Framework is available and provides compilers at no cost, Microsoft does offer a number of additional tools for easing the development process. The most prominent tool is the Visual Studio .NET integrated development environment. There is also an open source IDE known as SharpDevelop.
Though some believe that technologies used in .NET were originally developed by Microsoft as their version of the Java platform, the truth is that many of the teams working on .NET initially set out to create COM+ 2.5. Other departments were also improving other Microsoft technologies; the web server department was creating ASP 4.0 and the Microsoft distributed computing departments were creating what was called "Next-Generation Window Services". The work from the various departments merged into one system now called .NET.
When Microsoft decided to end their future use of Sun's Java technologies in 1998, the existing Microsoft J++ (Java) product was transformed into the beginnings of the .NET project. Code from the .NET Common Language Runtime (CLR) was said to have come from Colusa Software's OmniVM, which Microsoft acquired on March 12, 1996.
The CLR is the Microsoft implementation of the ECMA CLI standard for the Windows platform only. The Mono framework provides a partial implementation of the CLI and some parts of the .NET framework for Linux and Solaris.
While the original model of .NET was that of a general foundation (.NET framework) with three primary pillars (ASP.NET, Windows, and Web Services), the model for .NET 2.0 is that of a foundation for Microsoft's next generation platform known as WinFX, which is the unification of Microsoft development technologies into one programming model. WinFX is also the replacement for the longlived Win32 API introduced in the early 1990s. The FX in WinFX is the abbreviation for the .NET Framework thus giving .NET the tall standing of being the foundation of the majority of future Microsoft-based development, higher or lower level.