I haven't used mono commercially, but I use it privately, because I work in a Windows company, but privately am a Linux user (so I can reuse what I do at work).
Overall, I agree with Miguel de Icaza who says:
- 25 % of .NET applications work out of the box with mono
- another 25% can be made to work within a day or less
- further 25% can be made to work within a week
- The last 25% require a complete rewrite of the application
(WinForms/COM)
Mono works fairly well, but there are some problems:
- VB.NET support only for .NET <= 2.0
- Windows authentication not implemented
- WPF not implemented
- WCF support incomplete
- Entity Framework not implemented and no plans to implement
- "ASP.NET Web Parts" not implemented
- No COM-interop support
- Sybase connection for version 15.5 (latest) doesn't work
- Bugs and incompleteness in the C# class library (e.g. XML was buggy in mono < 2.6)
- The Linux web-browser control requires GTK#
Then the minor problems:
- Windows Forms work, but aren't always rendered properly
- MonoDevelop can't design windows forms
- MonoDevelop 'step through' debugging doesn't really work
- Mono-Service crashes after 5 hours...
Form what I can say:
- WebServices function excellently
- If you run a WebApplication, it works fairly well (if it doesn't use
WebParts).
- If you run WindowsForms, it won't always look very nice (to say the least).
- There is no working equivalent for Microsoft Reporting Service
(FYIreporting is the closest thing to
it, but it's slow, buggy and very
incomplete, plus no activity since
more than a year)
- You will experience problems if you need to create Word or Excel
documents.
If you want to develop .NET on Linux
- You could develop ASP.NET there (debugging & step through works very
badly)
- You can't really develop WinForms on Linux
- You need to use GTK# instead of WinForms
In other words:
- Mono has it's place in running web applications and WebServices and
MailServers.
- But it's not viable to run WindowsForms applications, you need to
write applications with GTK#
- It lacks a reporting solution and MS file format support (or working
libraries therefore)
Edit (2015 update):
I wanted to add that by now, 'step through' debugging works excellently, and you can use MonoDevelop to develop web applications on Linux, even with nuGet dependencies. The problem with Excel and Word libraries is also gone, and entity-framework is now open-source. The rest is pretty much "as is" (don't know if mono-service is fixed, but I would hope so).
What has improved as well is that you can now have current packages for your distro, meaning you don't need to wait until the next release of, say Debian/Ubuntu, until you get the latest mono version (without having to compile them yourselfs). This is a major time-safer.
Also, with the release of Roslyn, VB.NET support should get a lot better in the near future.