» My opinion of Mono
As it seems like everyone has to voice her opinion on Mono, I'll do as well.
First of all, I don't like C# as a programming language. And I think that Anders Hejlsberg is wrong on many things. Not having checked exceptions is ludicrous, recommending to use return codes rather than exceptions because of performance is stupid, and cramming every possible OOP and functional language feature into C# is pointless.
I much prefer Java because of its relative simplicity, I rather like its verboseness (Eclipse and NetBeans are there to help with that) and conventions, even though I wouldn't mind closures and some syntactic sugar for lists and maps. I'm a firm believer in semi-statically typed languages with an IDE and a compiler that can throw many programming mistakes at your face, at least for medium to large sized projects.
I also like using Python (although a proper block syntax would be a lot better than block grouping by indentation) and Ruby (even if it runtime patching of core libraries is a terrible idea). I even find Perl to be adequate for certain types of things.
That being said, back to Mono. I believe that having Mono is a good thing, for several reasons:
- interoperability: Microsoft has been making a huge push from its patchwork of development technologies (VB, C, C++) to its .NET platform and, hence, most software that will be written for the Windows platform is very likely to be running on the .NET runtime for a foreseeable future. Wouldn't it be great to have a compatible runtime on open operating systems (Linux, *BSD, ...) that was able to run those applications when there is no (better) alternative ? I think it is. For the same reasons, I also believe that having OOXML support in OpenOffice.org is a good thing too. In "Microsoft shops" (businesses that use lots of Microsoft software) that rely on MS Exchange, Active Directory, MS Office, Windows and MS SQL Server, it's clearly an advantage for Linux to be compatible. If not, you'll never be able to use Linux in such environments, nor push nor migrate.
- managed runtimes are the future: for most domains, managed runtimes such as the JVM or .NET are the future of software development. Actually, they're already the present, given that a huge amount of software applications are already deployed on the JVM nowadays. Now notice that I said "most domains": it's most probably not adequate for developing a kernel or low-level network stacks.
- GNOME needs a proper programming environment: get over it, C is a dead cow for developing frameworks and large sets of components. C++ isn't all that great either, but at least it has proper OOP support and is a lot less painful when combined with Qt. Vala ? Isn't that yet another useless language ? I don't think that's a good idea. Python ? It's rather too slow for certain things and lacks static type checking (which I think is a no-go for large frameworks). Ruby ? Even slower than Python, and doesn't have static type checking either (nor proper threading, at least as of now). C# ? Maybe, why not, it's not as good as Java in my very personal opinion, but it's certainly heaps better than C with glib