Friday, June 12, 2009

Little contribution to the Mono/C# debate

I just got through this article which explains why "anti-mono" peoples are just stupid people, none of them even developers for the open-source community, so I wanted to add my unnecessary contribution to the Mono/C# debate.

I was first wondering where does the "anti-mono are not open-source developers" statement comes from? I am an active open-source developer and most other anti-mono people I know are too.

Anyway, I agree there is a lot of "mono is evil" vs. "mono is so cool" debates without real value, but there is at least one very strong argument against Mono, which is the most important to my little green eyes.

C# specification is driven by Microsoft, the open-source community is follower and not leader. Sure this was once true for C and using C didn't created such debate, but then you had no equivalent, open and widely recognized alternatives.

Maybe you're now asking yourself: "Why is this a problem? Why a language with an open community-driven specification is better?". Then I think you lost the point about the open-software model.

Let me go into little details.

Developers of open languages are free to create the features they like, Mono have no choice but follow Microsoft's implementation. Python's enhancement proposals is a great example of how open specification work. Everybody can write down ideas of enhancements for the language, the ideas are reviewed and discussed by the community, good ideas are accepted and will eventually go into next version of the language... This is open-source. And Mono can't do that.

Ok, I should add that my current open-source project is in written C# (not my choice unfortunately). So, please, do what I say and not what I do! If you really like open-source, I recommend you choose an open language.


  1. You can fork C# if you want to, or write your own language for the CLR

  2. You are confusing several things.

    First of all Mono is not C#. Mono does include a C# compiler, but you can also use Mono with other languages, among them, for example, Boo and Nemerle, which are developed completely openly. The reason why most people still prefer C# is probably because it's more mature and less likely to change dramatically.

    Second, there is no reason at all why Mono couldn't take C# into their own hands and diverge from Microsoft's language standard. The reason for why they don't is because it's not necessary - C# as it is is perfectly fine and MS is doing a good job advancing the language. If you feel otherwise, you are free to fork the Mono C# compiler and add your own features.

  3. Hello Jean-Cristophe,

    It might be worth pointing out that if you want to contribute to the development of C# as a language, you can provide a proposal in two places:

    * ECMA
    * National standard bodies for ISO.

    Non-profit organizations, universities and experts can join ECMA at no cost. Companies usually pay a price.

    National standard bodies have different policies depending on the country, but you can join the ISO/IEC workgroup in your country for ISO/IEC 23270 if you want to contribute to the language.

    The Mono C# compiler has been forked about a dozen times to try out different ideas, language tricks or to innovate with it. Some changes have made it back to Mono's compiler, but most have not. This is just the nature of research: you try things, and if they work, you adopt them, if not, you leave them.

    Both ECMA and Microsoft are open to suggestions on how to expand the language. For instance, right now, some of the innovations from Mono are being considered for inclussion into ECMA's virtual machine (our work on Mono.SIMD). It will likely evolve a lot from what we have to be more comprehensive before it becomes a standard, but there is a process in place to grow.

    I have wanted to expand C# to support expression interpoltion and submit that to ECMA, but I have just been too busy. Maybe a volunteer would like to do it


  4. Hello.

    @niv & @shani: If I fork C#, it isn't anymore C#, it's a new language (C#++?)

    If I fork Mono and lose interoperability, it's not anymore a "free implementation of the .Net platform", it's an almost identical platform, the debate is over.

    But in both cases, maybe there will be legal issues? Microsoft got sued for forking java, and lost the case.

    You have good points and I've not doubt Microsoft is open to suggestions to improve its system. But you should agree this is not the same the level of openness, in python I can take part of the final decision if I like to get involved. Although they certainly take suggestions into account, the final decision concerning .Net are made by Microsoft alone. If it's good for .Net but bad for Microsoft, they will not include that, right? (theoretical and hypothetical argument, but yet possible)

    For sure anybody can fork Mono and make it lose the reciprocal interoperability with .Net, since Mono is free software. But for now Mono focus on following Microsoft's steps. The debate is whether open-source should be cloning or innovating.

    Thanks for your comments

  5. jeko, you have a point, the design is being driven by microsoft. but this is not a bad thing for now... it's a nice design. but if you don't like it, make an open fork! nemerle, for example, it's a superset of a particular version of c#

  6. No doubt about this: .Net and C# are well designed. For now Mono helps C# and .Net to get accepted. But maybe in a few years, Mono guys will become the boring open-source people that do not want programmers to use the so-cool new features because they are not portable (ie it runs only on MS's implementation). We will see, if god allows us to!

  7. I still fail to see how this is worse than making an "open language" from scratch, which would never be portable in any way whatsoever.
    this is just an implementation of a specification. From now on, either microsoft, you, or anyone can extend it.
    Besides, you mentiones Python, and like it or not, the design decisions behind the language ultimately are made by one single person: GVR.