After reading the recent Perils of Palladium article at XBiz, I felt that I should 'stand up' for Microsoft and let people know that they are not some 'Evil Empire' out to control the world, but are in fact an innovative company whose success is the result of the quality and popularity of their products, not just because of their aggressive marketing strategies. Take their .NET initiative, for example:
.NET: A Technical Introduction
The .NET Framework is a new computing platform that simplifies application development in the highly distributed environment of the Internet. The .NET Framework is designed to provide a consistent object-oriented programming environment whether object code is stored and executed locally, executed locally but Internet-distributed, or executed remotely. This allows software developers a code-execution environment that minimizes software deployment and versioning conflicts while guaranteeing the safe execution of code, including code created by an unknown or a semi-trusted third party. .NET also eliminates the performance problems of scripted or interpreted environments, and makes the developer experience consistent across widely varying types of applications, such as Windows-based applications, and Web-based applications.
The .NET Framework has two main components: the Common Language Runtime and the .NET Framework class library. The Common Language Runtime is the .NET Framework's foundation. You can think of the runtime as an agent that manages the code at execution time, providing services such as memory management, thread management, and remoting, while also enforcing strict type safety and other forms of code accuracy that ensure security and robustness. In fact, the concept of code management is a fundamental principle of the runtime. Code that targets the runtime is known as managed code, while code that does not target the runtime is known as unmanaged code. The class library, the other main component of the .NET Framework, is a comprehensive, object-oriented collection of reusable types that you can use to develop applications ranging from traditional command-line or graphical user interface (GUI) applications to applications based on the latest innovations provided by ASP.NET, such as Web Forms and XML Web services.
The .NET Framework can be hosted by unmanaged components that load the common language runtime into their processes and initiate the execution of managed code, thereby creating a software environment that can exploit both managed and unmanaged features. The .NET Framework not only provides several runtime hosts, but also supports the development of third-party runtime hosts.
Internet Explorer is an example of an unmanaged application that hosts the runtime (in the form of a MIME type extension). Using Internet Explorer to host the runtime enables you to embed managed components or Windows Forms controls in HTML documents. Hosting the runtime this way makes managed mobile code (similar to ActiveX controls) possible, but with significant improvements that only managed code can offer, such as semi-trusted execution and secure isolated file storage.
.NET Programming and Beyond
.NET in a programming sense generally refers to the .NET framework. This framework is a class library that allows you to create pretty much any application you would want to. .NET defined by Microsoft includes a number of things, such as .NET Passport, Visual Studio .NET, Windows .NET server — you get the point. But I'm going to be focusing on the .NET framework and the Common Language Infrastructure.
The common language infrastructure is what makes .NET so dynamic. At the heart of the .NET way of programming is the Common Language Runtime (CLR). The easiest way to think of the CLR is like the Java VM; basically it is space to run application code in. The CLR can be used by any language that can compile to it. This means that we can write an application in Visual Basic.NET, C#, C++, Perl, or Python, and these components could then work together seamlessly. Now if a compatible CLR were running, say, on a Linux machine, then you will be able to run an application developed on any of these languages on either Windows or Linux. Mono is a project that ties Windows and Linux together with .NET, mono is the Linux version of the Common Language Infrastructure (CLI). Now with this flexible .NET infrastructure, developers can let their users have their choice of operating system.
What does mono mean to developers? For one it means 'MONKEYS' in Spanish, but it also means cross-platform application development without even recompiling your code. Ximan launched the mono project on the ninth of July last year, since then they have developed a C# compiler, a CLR, and the actual class library is now in development. The next things on the list include Windows.Forms and Java, and other much needed technologies. The Windows.Forms namespace is basically everything you need to create GUI applications. There are interesting ideas on this portion of the mono project. The mono Windows.Forms namespace will be developed with GTK, and interestingly enough they are planning on creating the same namespace for MacOS X using Cocoa. So, now not only will we be able to make GUI applications that run on Linux and Windows, but MacOS X as well! Crazy ain't it? The Java portion of mono is very smart; from what I've read they will be directly translating the byte codes of Java to the byte codes of the CIL Compiler. So you could essentially create a simple Java class and then drop it into any one of your new shiny multi-language multi-platform .NET applications and use it from there.
What does this mean to the users? Well, the first thing that comes to mind is freedom. There are applications that are developed for Windows that are better than their Linux counterparts, and there are applications that are developed for Linux that will blow the Windows version out of the water. Now with this flexible .NET infrastructure, developers can let their users have their choice of operating system. That's quite nifty if you ask me... Users will generally be given more choice, which is always an effect of the developer having more alternatives, so this .NET thing means good for everyone, once all has been developed to a stable point — and this is merely a process of taking slow but certain baby steps:
All of the exciting possibilities that .NET provides for the future should be one welcome indication of the benefits of supporting Microsoft's flexible and innovative products. While I am not suggesting everyone run out and purchase stock in their company, bashing them simply for the sake of bashing them is a waste of time that is better spent embracing their technology and learning ways to profit from it.