When software developers think of the .NET Framework, one of the first things to come to their mind is Microsoft. One of next things is Windows. And that is true: The .NET Framework is developed by Microsoft for Windows. But thanks to the efforts of Novell and contributors, we have the Mono project which aims to duplicate the efforts of .NET on non-Windows operating systems.
Before I say anything else, there are legal questions regarding Microsoft and its .NET patents. When Novell made an agreement with Microsoft in 2006 over patents, there was criticism from all sides as the agreement failed to protect users of Mono. Later, in 2009, Microsoft announced under a “Community Promise” that it would not restrict the use of its patents over the C# standard and the CLI (Common Language Implementation) which covered everything except Windows Forms. Though the promise quieted some, others, notably the Free Software Foundation, were still against the use of the Mono framework with the fear that Microsoft may go back on its promise.
With that in mind, the Mono project has done a great job in its work. I tested it with my project, Aciqra. My overall impression is good though there were minor annoyances.
For one, it’s quite a bit slower than the standard .NET Framework. That applies whether the binaries are compiled by Mono or by .NET. However, I could not get the AOT compiler working and I get a “file_info not met” error when I try to run the program after compiling with AOT.
There are also some other minor differences. For example, in Aciqra, the context menu should have a black background. In Mono, it has a white background (and since I use white text, it looks blank). Also, I am using a custom mouse cursor from an image. Mono decided to super-size that cursor to about 20x its actual size (or 400x in area). That was more awkward than annoying (and was in some ways, pleasing) but it may be somewhat of a problem for other, less cursor-forgiving programs.
Mono also has an Apache module, mod_mono, which allows ASP.NET to work on all Apache servers. I found it rather a pain to setup on CentOS (which is why I prefer Debian) but when it works, it works great. If you want proof of its working condition, you can do so on Space Socket which provides free hosting that includes Mono 2.6.