As you probably know already, Mono is Novell’s attempt to bring Microsoft’s C# language to Linux, which has received strong opposition from part of the community. While I am not opposed to Mono at all, there’s some points I would like to discuss about.
Since I have joined FOSS development I have been pleased by this feeling that many developers did not want to just achieve something ‘that worked’, or with good user experience; they aimed for technical excellence.
While I do not deny the advantages given by high-level technology like C#, Java, Python… (in comparison with C++, my language of choice); as soon as you select one of these technologies you accept to degrade the quality of your program (performance) in a way that you cannot fix, trading it for ease or productivity, or something else.
I believe the use of high-level technologies is justified for enterprise projects, when you’re in a team of unexperienced programmers.
Bjarne Stroustrup himself (the inventor of C++) qualified C++98 as a language for experts. The good thing about FOSS developers is they ARE competent people who can write good C++; if not, they are generally hobbyists who are willing to learn.
The Qt framework competes easily with the standard libraries of the high-level languages. It has one great IDE as well, QtCreator. It completes C++ in a very nice way and has become my preferred choice for GUIs.
I think C++ programming is not bad for productivity at all, but only if we use it right.
Mono is good for interoperability in the same way as Wine is, it helps to bring Windows-exclusive applications to Linux.
The most annoying thing for Linux developers is the GUI part which is not standardized at all, unlike the core language libraries. Gtk# is the preferred GUI on Linux, while WinForms is the Windows one; I won’t really think of Mono as interoperable until WinForms support is finished.
Mono isn’t evil, but FOSS developers should avoid it.
Give Qt/QtCreator a try, it’s good :)