Tonight I went to hear Miguel de Icaza speak about the Mono project to the Boston .Net user group. It was held at the somewhat swanky Microsoft office in Waltham (several Xboxes on display, very modern looking etc.) The audience was mostly .NET developers which was interesting to see how the other half lives. And maybe I was being hyper-sensitive, but they seemed about 5% different than Java folks - about the same difference between Sysout.out.println
and System.Console.WriteLine. Not much, just a little.

Miguel is a very engaging speaker with heaps of energy and infectious enthusiasm. The crowd was definitely interested in learning more about Mono, and several had tried it out with their existing C# apps. Lots of questions from the crowd and Miguel is full of thoughtful answers. And he had help from his 2 mates, including a 17-year old who’s been hacking Mono for 2 years. The progress that the Mono team have made is very impressive, and something the
Apache Harmony
folks should study closely. Miguel described ~30 developers from Novell and 300 (I think) overall with commit access - so lots of outside help.

The Mono technology is very cool in several boat-loads of ways. The number of languages that can work in the runtime is impressive (Java included). And, I know this antithetical to the Java credo, but I think being able to compile natively without requiring shipping a separate runtime is a good thing. Now there are plenty of cases where having a runtime is not a big deal, and that’s splendid. But there are other cases where deployment is greatly complicated. Too bad Java has pretty much elected not to support this (aside from GCJ). Perhaps this one reason we haven’t seen much Java on the desktop? (I think another has to do with fidelity to the OS L&F, and Mono has a good story there with Gtk#, Cocoa# and WinForms.)

Still, it is a little strange to see Miguel speaking to a group of .NET folks. I thought the original mission of Linux and Linux on the desktop was to get people to leave MS platforms? While you can argue that having technologies familar to MS developers will make it easier for them to switch, they aren’t the real target audience. While it’s very nice that Mono is giving companies like SourceGear ways to make their .NET apps run on Linux, that seems like a side effect, at best. And I think the jury is still out on whether the linux desktop community will write much code in C# (MonoDevelop, Beagle, FSpot are nice starts, but let’s see how it spreads outside of Novell). They stayed away from Java and used C/Python/whatever in large part because it came from Sun and wasn’t free, or free enough anyway. (I don’t think you can credibly argue against Java on technical grounds and think that C#/Mono is a win - the two platforms are too similar.) And with the reluctance of players like Red Hat to adopt Mono it might be an uphill battle. But even if it doesn’t have it’s intended goal of helping OSS/Linux desktop developers to be more productive, I think there will be a lot of positives for the broader development community. Plus, it’s just cool.

Joel posted a new essay on using Apps Hungarian to make wrong code look wrong by inspection. Now, while I’m certainly no Joel, but I’m tempted to say one should go one step further than just a naming convention and have the compiler tell you when it’s wrong code. Through the wonder of data structures the compiler can prevent writing a string that is not properly encoded, in his example. If you have two integers that represent rows and columns and assignment should be prevented between them, then in not much more time then it does to prefix everything with “rw” and “cw”, two simple classes would do the trick with far more compile-time safety. And Joel is certainly right that Systems Hungarian and prefixing the actual type (not just “kind”) is the path to the dark side, and any modern editor should be able to tell you the declared type.