Better Integration Improves Development

When pressed for additional details on what makes .NET better, de Icaza replied: "The tools are better integrated. You have a debugger, a project manager. It's an IDE with documentation integrated into the system. It's very easy to deploy web services. You write a web service and it's getting packaged into a single directory. One of the things you can do is just dump the directory into your system and it happens to work. They have a signature system for their libraries, so if you develop an application that links into a set of libraries, even if somebody replaces the API for the library, the application is going to continue to run because it links to the original library."

He added: "Microsoft basically solved the DLL problem, and that's something that the open source community is not solving. Even though we have the tools to do so, no one is taking the next step to do things right. There's still breakage that's happening in libraries that are shipping with traditional Linux libraries. If you get the latest version of Linux, many applications are going to break because they broke binary compatibility, because you didn't upgrade your application, because there's not a lot of effort going into supporting third-party application developers. So that's why I think .NET is a better application development platform, right now." Visual Studio.NET is "pretty sweet," he added.

According to de Icaza, what Microsoft got right is that they put all the technologies together: the language, the common runtime library, and the integrated development environment (IDE). "Look at how easy they make it to expose web services through SOAP," said de Icaza. "I don't think Microsoft is a visionary in this respect. SOAP is an idea shared by other people, the idea of an XML-RPC system." However, he credits Microsoft for putting all the pieces together, making it easier for developers.

De Icaza, who makes no claim to being a Java expert, believes that Java will also offer a lot of what you find in .NET. "I don't think they have everything together today for me to deploy web services," he commented. "If you have Visual Studio, you can deploy Web services right away; they are SOAP-enabled. You can automatically generate WSDL descriptions."

The Open Source Response to .NET

Miguel de Icaza has no intentions of becoming a Microsoft developer. However, he believes the open source and free software communities should be prepared to have a response to .NET, or have an equivalent offering. He is particularly interested in strategies that "embrace and extend" .NET and leverage it to the benefit of open source developers. "I'm playing with the idea of writing a C# compiler in C#. There are a few bits written, but I only think of it as an interesting hack. There are people writing free replacements for the key components of .NET." He hopes that eventually there will be a full open source replacement for .NET.

He'd like to see .NET development tools running under Linux, along with a .NET runtime. "People are going to chose .NET because it's a very good development environment. So what you want to do is have a .NET runtime for Linux. There's already a beautiful IDE called SharpDevelop." SharpDevelop is a C# development environment written in C# by Mike Krueger and released under the GPL. According to de Icaza, the interesting thing about SharpDevelop is that the environment is really complete in only a few lines of code. It's really amazing when you compare the code size to other projects. That says something about the language and the runtime environment. It's pretty fast too. The whole actually compiles itself. C# showed a lot of potential by having this one guy write a really good IDE in about two months. The language is powerful, the runtime is powerful, and they are creating some really great applications."

De Icaza worries that some people will be put off by .NET because it comes from Microsoft and because it seems so large and all-encompassing. "Microsoft is calling everything .NET and so people are really confused about what .NET is. Is it Hailstorm? Is it Visual Studio? Is it ASP? The only part I really focus on is the .NET development environment. I don't know about all the rest." He believes open source developers need to break down .NET into its parts and set about writing replacements. "I think it's really easy," said de Icaza. "Here's why. When the GNU project was started, it was really clear, was given, that they were replacing UNIX. There were hundreds of tools and there was documentation for the tool and its interface. Developers could pick a tool and concentrate on it and work independently of each other. Same thing can happen in .NET. You have the class libraries and you can write the library in pretty much any language. Different contributors can work on different pieces of the runtime."

Brian Jepson, an O'Reilly editor and writer with experience in Perl, Java, and C#, agrees with de Icaza. "Almost anybody could develop a compatible implementation of .NET," he said, because what you need to know is out in the open. (Microsoft is in the process of submitting .NET to ECMA for standardization.) "I tend to think of .NET as a better J2EE and more open."

There are currently 51 projects listed on Sourceforge that are classified in the C# programming language category. (Some of these associations seem misleading.) In addition to SharpDevelop, there is a .NET Opensource project that aims to write the portable .NET runtime. "It's still in its infancy but it already has a lot of code," said de Icaza. "You want to write the just-in-time compilers and write a front-end to GCC that takes a Microsoft .xit, which contains IL bytecode, and just feed it to GCC, which can optimize for the native system. That is something that .NET gets right. They are not pretending to generate bytecode and wait for some magic to make it fast. They actually ship with a working optimizing JIT with the current version of .NET. When you are debugging your .NET applications, you are actually getting optimized Intel code running, instead of the IDL intermediate representation that they generate."

This explains why C# in this environment is generally faster than Java. "I don't think MS is coming out with something novel here," said de Icaza. "They just said, 'if we need to get more speed, we need to do the full optimization,' and they just did it instead of pretending that it was something they were going to do over the next five years."

Reflecting on what might be called the Open Source response to .NET, de Icaza said: "I don't think we as a community can design something that is going to be as completely thought out as .NET. It's taken them several years already to design this, and I believe that Microsoft hired a lot of smart people to build it. It would definitely take us a lot of time and debate to get there." He doesn't believe that the open source community needs to leapfrog .NET, but rather they should make it their own, much as Unix led to GNU/Linux.

Certainly, with the upcoming announcement of Mono, Miguel de Icaza feels the open source community can replicate a free implementation of .NET just as the GNU team set out to methodically create a free version of the UNIX operating system. Mono is quite an ambitious project and Miguel de Icaza deserves a lot of credit for daring
to undertake it. He will have to gain the support of Open Source developers, who are naturally suspicious of anything that Microsoft is involved in. This loosely-coupled effort will be competing with the world's largest software company. O'Reilly Network will continue to follow Mono. Once its announcement is made official, we will provide a deeper look at the details of the project and its implications for an open source .NET platform.