Via Gordon, I see that Tim Bray pointed to Jeff Dillon's points on cross platform .NET. Jim Blizzard chimed in as well.
I like Gordon's brief and complete summary:
The point? If you care about cross platform .NET, there are details you need to pay attention to, and you really shouldn't do dumb things like use the registry. As for "the cost of not being able to do native system programming in pure Java" we already know that pure .NET is a myth, too. [The 80/20 Solution]
With due respect, I'm not getting a few of Jeff's views:
The Java API writers have always been very careful not to introduce an API which does not make sense on all platforms. This makes Java extremely portable at the cost of not being able to do native system programming in pure Java. [Jeff Dillon]
Which sounds just like the Least Common Denominator point I've made before. However, while the Java API writers may try to support the LCD, the Java Application Server vendors explicitly promote vendor lock-in by introducing APIS that are App Server specific. As Jeff wisely points out, there is a cost. I say it's too high for most.
Microsoft is very open about their goals - Vendor lock-in is a good thing. Exploit the platform. Jeff says:
With .NET, Microsoft went ahead and wrote all kinds of APIs for accessing the registry, accessing COM objects, changing NTFS file permissions, and other very windows specific tasks. In my mind, this immediately eliminates .NET or Mono from ever being a purely system independent platform. [Jeff Dillon]
No, it really just eliminates the possibility of using a COM API on another platform. This will lead to the rise of ".NET Code - Pure Enough for Mono" , and that suits me just fine.
If Microsoft were to truly virtualize the machine, they would have marginalized their investment in the Windows platform. [Me]
I'm not trying to promote bad feelings. I worked at Nike getting Java over RMI on Solarious to talk to DB2 on a Mainframe - I love all religions, remember:
Scott's Rule of Programming 0x303b: Don't Player-Hate, Integrate.
I'm just trying to remind folks that, by definition, write once, run anywhere, means writing to Least Common Denominator APIS (or introducing "if (!IsMacIE)" code - You may have seen that before on a Write Once technology called HTML/ECMAScript?)
The only difference is that Mono has seen fit to raise the level of the Least Common Denominator API to a reasonable level. That, combined with common sense like there's no Registry on Linux means that apps like dasBlog can happily be ported to Mono.