RMS says don’t depend on Mono, because, in summary, there is also GNU’s Portable.NET.
I’m sorry, what? Has RMS ever actually used C#?
About two months back, I started learning C# using Mono and MonoDevelop as my tools. I wanted to use C# so I could effortlessly have my apps run on Windows with no actual work. Mono was kinda fast (compared to Perl, or Python without going hogwild with Pyrex/Cython and such), and was easy to setup and use. I also liked the way the syntax was designed.
A lot of people try to separate the standard libraries in .NET (Microsoft calls them the BCL, Base Class Library) from C# since you use them from every .NETy language, but they are very much part of C#. Without them, all you have is a language you can’t do much with out of the box.
The BCL is, largely, a complete fuckup. Compared to Win32′s C++ APIs that are some of the most hated interfaces ever created, BCL is basically the same thing. A lot of API design in the BCL is designed to imitate or wrap Win32 APIs as to make it easier to port Win32 apps to C#.
However, it also makes it much harder to use C#. The API design is just so infuriating and nonsensical. The BCL is the worst standard library I’ve ever seen for a high level language, and I hate it. It doesn’t matter if you use Microsoft’s .NET, Mono, Portable.NET, or whoever else, they all implement the same BCL specification.
Now, this doesn’t mean just because I think RMS is wrong for saying C# is still a viable language that I also think Microsoft is doing this to destroy Linux overtly.
Hanlon’s Razor states “Never ascribe to malice that which is adequately explained by incompetence,” and Microsoft’s insanity in API design clearly fits this. They didn’t pay Novell to develop on Mono because they wanted to kill Linux… they simply paid them to do it, and the fact that the BCL is designed by clueless morons is independent of this.
However, I did say I liked C#’s syntax. C# is very much modeled after modern Java. The last time I used Java was back in the late 90s, and I hated it because it was slow, it lacked a lot of things that the language has now (such as generics and autoboxing).
After my month of C#, I decided to give Java 6 a try. I easily picked it up because it has the same syntax… but Java has one thing C# doesn’t: a standard library (called the JCL) that actually makes sense and is planned out and has APIs that work well.
RMS should back Java instead of C# because Sun has finally released their chief Java implementation under the GPL license (under the name of OpenJDK).
I actually enjoy using Java after experiencing the horror that is C#, and I encourage people to try Java. Specifically, OpenJDK 6 is much faster than either Mono or Microsoft .NET, it is much faster to develop software (since you don’t have to fight with the JCL, like you do with the BCL), and I think Eclipse (the most popular IDE for Java) is superior to MonoDevelop.