Oftentimes when I'm reading about some program, be it GNOME Do or Banshee or something else, I see people writing that they use mono -- and the implication is pejorative. Why is this? Are these comments made on practical grounds, ideological ones, or something else?
Mono is supposed by some to be supporting Microsoft and its .Net platform. Some people believe this is counter to the goals of Ubuntu, or at least their own personal goals, and they want to avoid that.
Sorry for the wiggle words, but I'm staying objective. The discussion of whether Mono actually does this, and even whether supporting Microsoft is a good or bad thing, belongs elsewhere.
Programs which use a virtual machine (as those written in Java and C# do), tend to use more memory, in my experience, compared to equivalents that don't. This generalization doesn't always hold. While there are users for which this is a valid concern, people often worry about performance more than necessary.
For example, I'm using a laptop with only 1GB of memory: this used to be huge. The machine is starting to show it's age, but I can still run most things comfortably. Users with 4GB of memory will not notice "memory hogs" nearly as much and should focus on other concerns. (And I'll come back here in 5 years and laugh at that 4GB number.)
Some people believe that Microsoft holds software patents over aspects of .NET, and that as an implementation of .NET, Mono violates those patents. Thus these people feel that using Mono could leave one open to patent lawsuits.
I suppose Mono is so controversial because patent law in general is controversial. But then there are specific instances where entities that promote Mono have made agreements with Microsoft that look a lot like patent agreements, which could then be seen to strengthen Microsoft's argument for the validity of any such patents. (Of course, Microsoft hasn't actually provided any proof that the patents exist, thus maintaining a state of uncertainty, just as with their claim of patents violated by the linux kernel.) These agreements result in feelings of betrayal and distrust from other community members, because the agreement seems to hurt the community as a whole (by increasing the perceived patent risk) while benefiting the entity that made the agreement with Microsoft. So that leads to another reason that Mono is controversial: because some of Mono's main proponents have made controversial agreements with Microsoft.
By the way, I should mention that I write from the perspective of a spectator, and I have no detailed or specific knowledge of the whole situation. I've tried to remain unbiased and have mostly eschewed proper nouns so as to avoid dragging this question into the controversy that it asks about.
Edit: In the comments, someone pointed out that Microsoft has a community promise not to assert patent rights against .NET implementations. But the promise has enough legalese in it that I don't feel I can really be sure that the promise provides air-tight protection without hiring a lawyer to go over it. After reading it, I can think of some potential loopholes that could allow Microsoft to assert patent rights over Mono, but since IANAL, I have no idea whether any of these loopholes are legally defensible, or just my misunderstanding of Microsoft's legalese. So while the community promise is encouraging, it certainly cannot end the controversy among over Mono's possible patent liability.
Mono is a open porting of Microsoft .net.
On the ideological ground, this makes use of a closed technology for open technologies and that may not coincide with some ideals of GNU, and/or Linux.
On the practical ground, Mono is not (for now) supporting as much functionnalities as .NET does in its 3.5 version. However, it allows to program in C# (and other .NET languages) for Linux, which I think is a good thing and would be impossible without Mono.
As others have stated there are two main reasons:
1) Ideology: Users aren't comfortable with the idea that Mono is based on a closed source Microsoft product. However, Mono itself is open-source.
2) Patents: This used to be a major concern which has since been addressed by Microsoft when they applied the Community Promise to ECMA 334 and ECMA specs 335. Unfortunately a substantial portion of people are unaware of this.
I don't use Mono because
- Microsoft alleges IP infringement without specifying what is being infringed and they have refused to clarify on Mono, only saying that Novell users are protected. I do not believe Microsoft's community promise until they back it up with actions.
- Mono licensing is complicated. It is hard for a legal expert let alone an ordinary user to understand as parts are licensed differently. Nothing in open source is so complicated to undestand.
- Miguel de Icaza promised but has failed to deliver on his promise to release ECMA compliant source code in a timely fashion
- the landscape is littered with companies that followed Microsoft's standards because for them standards exist to be broken and keep others at a disadvantage
- there is no need or demonstrable benefit to having .NET on Linux, little has been ported over from other platforms and anything native to Linux could be written other languages
- Mono is a needlessly divisive issue; it distracts us and plays into Microsoft's hands by keeping from more important issues
I think that anybody can and should use Mono if they want, but users who don't want it should not have it put on by default.