Friday, October 3, 2008

.NET Framework Introduction

Code in a Highly Distributed World

Software that addresses the Internet must be able to communicate. However, the Internet is not just about communication. This assumption has led the software industry down the wrong path in the past. Communication is simply the base requirement for software in an Inter-networked world.
In addition to communication other features must be established. These include, security, binary composeability and modularity, scalability and performance, and flexibility. Even these just scratch the surface, but they are a good start.
Users will begin to expect to run code served by a server that is not limited to the abilities (or physical display window) of a browser. Users will begin to expect websites and server-side code to begin to compose themselves of data and functionality from various venders, giving the end-user flexible one-stop shopping. Users will expect their data and information to be both secured and to roam from site to site so that they don’t have to type it in over and again. These are tall orders, and these are the types of requirements that are addressed by the .NET Framework.
It is not possible for the requirements of the future to be addressed by a new programming language, or a new library of tools and reusable code. It is also not practical to require everyone to buy a new operating system to use that addresses the Internet directly. This is why the .NET Framework is a development environment, execution environment and Operating System.
One challenge for software in a highly distributed environment (like the Internet) is the fact that many components are involved, with different needs in terms of technology. For example, client software such as a browser or custom client has different needs then a server object or data-base element. Developers creating large systems often have to learn a variety of programming environments and languages just to create a single product.

Figure 1 Internet Distributed Software

Take a look at Figure. This depicts a typical arrangement of computers and software in a distributed application. This includes client/server communication on several tiers as well as peer-to-peer communication. In the past the tools that you used to develop code at each tier would likely be different, including different programming languages and code libraries.
The .NET Framework can be used to develop software logic at every point from one end to the other. This way you get to use the language and programming tools that you are comfortable with for each stage of the development process. Additionally, the .NET framework uses standards so that it is not necessary that each piece of the puzzle be implemented using the framework. These are the goals of the .NET Framework.
I will describe what all this means in detail shortly.

.NET Framework

A software development and execution environment designed by Microsoft. .NET simplifies interoperability between languages and machines on {Microsoft Windows} especially, although not specifically, for web based services. Essentially the .NET framework consists of the CLR (common language runtime), CTS (common type system), CLS (common language system), and IL (intermediate language). The CLR consists of a number of resources provided to .NET applications such as the security model, type system and .NET classes. The CTS is the range of all types that .NET understands although it is not necessarily the case that a .NET program will understand all of these types. The CLS however is a subset of the CTS which all .NET languages must support: any two .NET languages can interoperate via. the CLS. All .NET languages are at some stage compiled into the IL, a byte-code like language. The IL is converted to machine code either upon installation of the software or at run time by a just in time compiler (JIT). The IL is not interpreted. There is Mono - an open source .NET framework for Unix. .NET was based on research by Steven Lucco on a product called OmniVM, sold by Colusa software. Attracted to OmniVM since VB and C/C++ environments were already available, Microsoft bought Colusa in 1996. Microsoft provides .NET compilers for C#, C++, VB, and Jscript.

A Visual Definition

The .NET applications and services operate within the .NET Framework. .NET applications do not directly access the operating system. Instead, they use the .NET framework, and the .NET framework accesses the operating system and hardware. The framework consists of two components:
1. The .NET Framework Class Library, and
2. The Common Language Runtime (CLR)
The Framework manages memory management, code execution, etc., and that is why .NET applications are called "managed applications."
The Common Type System makes sure that all .NET applications use the same data types.

The Language Compiler converts the humanly readable source code into an intermediate language. This intermediate language is also called Microsoft Intermediate Language(or MSIL), and it is contained in an assembly. Assemblies have either a .exe (executable) or .dll (class library) extension. The Common Language Runtime (CLR) converts the intermediate language into the native language needed by the operating system. This is what makes .NET applications platform independent. This would allow .NET applications to execute in these environments.

Microsoft distributes the .NET Framework in three forms:-

  1. The .NET Framework Redistributable package contains everything needed to run a program under the .NET Framework. It includes the Common Language Runtime, DLLs, and the ASP.NET extension for the IIS Web Server.
  2. The .NET Framework SDK includes the Redistributable Package, and free "command line" compilers, development tools, and documentation.
  3. Visual Studio.NET is a program product sold by Microsoft that wraps the compilers and tools in an IDE with project management, code generating wizards, editor, and debugger.

    Summery:
    The Microsoft .NET Framework is a platform for building, deploying, and running Web Services and applications. It provides a highly productive, standards-based, multi-language environment for integrating existing investments with next-generation applications and services as well as the agility to solve the challenges of deployment and operation of Internet-scale applications. The .NET Framework consists of three main parts: the common language runtime, a hierarchical set of unified class libraries, and a componentized version of Active Server Pages called ASP.NET.