Aleksander Demko, March, 2009
The Linux Outlaws Podcast recently (in ep. #75) had an interview with Miguel de Icaza on the topic of Mono. Since this is often a heated topic among Linux hackers, I figured I'd chime in with my two cents.
Miguel is well know in Linux land, having started the GNOME desktop and countless other desktop applications for Linux. He's done more for Linux in the past decade than most (including myself) will ever dream of doing, so critiquing such a leader can't be done lightly.
Miguel unfortunately started out as a typical C-only guy who looked on C++ as large and useless. For years with GNOME he and application developers (myself included) slaved away using the C-based GTK+ library to make graphical applications. Man-centuries were wasted dealing with cumbersome C and its unforgiving API style. C++ was ignored, almost laughed at, despite the fact commercial C++ GUI libraries have been the norm. To this day, GTK+ is still an utter failure with respect to commercial application adoption.
Eventually, even Miguel realized that C was not the language for desktop application development as it was hurting GTK+ adoption. Rather than embrace C++, he threw out the baby with the bath water and embraced C# itself for GNOME application development with the Mono project.
The Mono project is an open source implementation of Microsoft's C# language and runtime for Linux and other operating systems. Although one goal of this project is very honourable (allowing custom/vertical/boring applications from Windows-centric shops to be usable under Linux), I think in general Microsoft is making a sucker out of the Mono developers and users, and here's why:
Microsoft was once an innovative, competitive company. That however, was along time ago. They're now a convicted monopoly who still to this day function primary to lock people into their various technologies. I don't want to sound like a typical "Microsoft is evil" parrot but this is what a monopoly does. I can't fault them for it, but let's not be naive. I can spend a blog post alone on Microsoft's various transgressions, but for now I'll simply rat off areas which they really like to maintain their monopoly lock-ins: file servers/smb, office formats, web browsers/ActiveX, web browsers/IE stagnation, media formats/codecs, flash/Silverlight. Heck, I can't even access my company's MS Exchange web interface in Firefox without getting a substandard interface to email. They can't (well, don't want to) even make a website without trying to lock-in you into Internet Explorer on Windows.
Microsoft is not stupid and understands that platforms are really about capturing and holding developer mind share. Java and similar truly multi-platform technologies that they didn't control was viewed as a huge threat to the Windows empire. So Microsoft "embraced and extended" Java-principles, gave it a new name (C#) and injected a boat load of Windows-specific stuff into it. We can debate the finer differences between the languages until the cows come home, but fundamentally, at their core, they're identical languages, except that C# isn't multi-platform and is very Windows-centric. By the way, Adobe's flash/Actionscript is the next threat and target after Java, so look out for a serious assault on that front from Silverlight.
Given this, it's easy to see why Microsoft likes the Mono project. They get to pretend C# is multi-platform ("see, we're not a monopoly!") and friendly towards Linux and open source, but they don't have to devote any of their own resources to it. Furthermore, Mono on Linux will never be a first class citizen (like in Java) and will always be a version or three behind, lacking in proprietary features. To get the "true" C# experience you'll still be sold a Windows system. Microsoft gets to point to Mono and claim that C# is multi-platform, but will then tell you you must run their version on Windows to get the true, modern and full experience. This basically relegates Mono to (using the colloquial term) being Microsoft's bitch.
Although I used to code a lot of Java, I'm not really a Java proponent. But honestly, if the Linux desktop needs a garbage-collected, byte code-interpreted, type safe and object-oriented language, then Java is hard to beat. Decade or two of testing, mature IDEs, plethora of libraries and truly multi-platform (first class citizenship for Linux) and now open source (I hear?) are all features that would be stupid to ignore. But for some reason, Novell decides to chase Microsoft's ever changing specs while having to rebuild everything from the ground up.
Miguel ends off the interview with what I think is a little Stockholm syndrome. He says that most people unfairly demonize Microsoft, ignoring the specific points (like the above) those people make. Heck, he excuses Balmer's public demonization of Linux as the spouting of a sales man, ignoring the fact that this is the CEO of the big ship Microsoft. One simply needs to use non-Microsoft operating systems and applications in a Microsoft-based shop to truly understand the breadth and effect of their monopolistic lock-in.
But alas, I realize that there are other factors here in Novell's decision to fund Mono. Novell is scrambling for money and business opportunities, looking for any edge against Red Hat, even if that means dancing with the monopoly Microsoft. Although you can't fault Novell for doing what they think is in their best business interests, let's not get delusional into thinking Mono is on some level playing field with Microsoft.