Last week I was reading some october interview with Joseph Hill. I don’t know very much about Mono, but i’m a little attracted to this effort and his philosophy. To give a try you can install it from here, and I had found a very old article here that give you an idea (warning: it’s very old and the code doesn’t work very well with latest versions).
I think that Microsoft is underestimating (again) the importance of the interoperability and open source with his own initiative. C# as a language, CLS and his CLR are a really good technologies. The freedom of language choice it’s excellent too, and they are great building productivity tools on top of that. MS don’t need to lock down a development framework. The CLR code implemented for Windows has it’s own customizations and has to work with MS Win32 current infrastructure. That code cannot be used as is on a Linux box or a Mac, and so on. I don’t see the advantage of MS locking his implementation and trying to intimidate others.
On the other hand I understand that Mono team are trying to catch up MS libraries on top of the CLR, (ASP.NET, Windows Forms, etc) because much of the code outside uses this libraries, but I think that isn’t the best in terms of interoperability and it’s a very tough effort (’cause of Win32 specific methods and properties).
What will be an ideal? Imagine a common CLR between MS and the open source community in terms of specifications, but with the open mind of sharing his own implementation for an excellent reference. Then specifications for common frameworks (desktop gui’s, web services api’s etc) you don’t need the source code here but the specification can’t be operating system specific (good bye Win32 Handlers in public methods or properties).
Even if they cannot share his implementations and cannot agree on common API’s like gui desktop management it’s not a good choice to re implement all MS specific API’s.
Maybe Mono team and his community have to promote real public specifications (on top of CLR of course) and promote the implementation for the most common operating systems out there.
C# it’s a very good and modern language, and CLR it’s the minimal infrastructure necessary for modern web and desktops applications today. I can’t think of a business application (not a real time system, etc) developed without events, garbage collector, serialization and configuration to name a few. It’s possible to do all of this with C++ if you have a lot of time and your customer pays all development in advance, but in the real life you’ll need all this included in your runtime.
Mono it’s more important than a MS technology ported to linux. Mono could be another good initiative to consolidate a good runtime and a very good language for open source or even for modern small ISV’s.