It’s all in the small print

There have been cries of joy on the intertubes recently from people who like .Net but who like using it on non-Windows platforms (or believing they have the option to do so), in that Microsoft has extended their Community Promise to Mono, meaning they won’t sue over uses of it. Or so it’s been rather shallowly reported in some circles, more on this below. Firstly I’ll just say that no matter what, this is a positive step. I’ve long thought of Mono as a technically excellent project which an awful lot of uncertainty and legal confusion around it, which was only really made worse by the highly specific arrangement that Novell and Microsoft brokered a while ago.

What this announcement does is bring some clarity to the situation, which is good. However, I think people should hold off putting the bunting out just yet, because as ever the devil is in the detail, and the promise only in fact covers ECMA standards 334 and 335 – that is, C# and the CLI. As anyone who has used .Net knows, there’s an awful lot more to it than that, and this promise is currently equivalent insuring the wiring and plumbing in your house, but none of the contents. So it’s nice that these standards are now explicitly covered, meaning that projects that solely rely on C# and the CLI plus other completely independent components are safe. But if you’ve used anything else, such as any of the recreations of the rest of the .Net framework, you’re still on very uncertain territory, and in some ways you could say it’s even more uncertain, since clearly Microsoft omitted those from this promise for a reason (which may be a deliberate, strategic position, or it might be that they’re just not ready to take that more significant step yet – we don’t know).

Mono intends to cope with this by providing clear dividing lines between what’s covered and what’s not, which is very sensible. However, I do suspect that will result in the vast majority of the stuff that developers actually need to rely on when writing what are generally considered ‘.Net systems’ (such as implementations of core components of the .Net framework) will still be in no-mans land. Thus, while this promise does move things on in a positive way, in many ways it again casts light on how uncertain the legal position of the other elements is. Personally, my position is pretty much unchanged from before – if you’re writing ‘.Net applications’, that is, using the .Net frameworks, then you’re targetting Windows, don’t fool  yourself into thinking otherwise. There’s certainly scope for using C# and CLI in cross-platform scenarios (which was the safest course even before this announcement, since those were the only standardised parts), but on the basis of both legality and conformance I’d say it’s best to stay away from any .Net framework components if you intend to be cross-platform.

Maybe MS will extend this promise to the older .Net framework versions later on; that would seem a smart move, get people on the ladder but keep all the new stuff to yourself?

  • http://andrewfenn.blogspot.com Andrew Fenn

    Correct me if I am wrong however software patents only affect Japan, China, the United States and India? You have to have a patent filed in each single country too if my research is correct. With that in mind I just feel sometimes that software patents are made a bigger deal out of then they really are (unless you’re in the US then it probably sucks for you).

    C# is a good language and I have used it with Microsoft’s XNA framework however I don’t believe it’s any more difficult or time consuming then using plain C++.

    I will be good when you can use MOGRE with Mono on Linux and Mac. I did some quick research into if that’s possible however it looks like a few people reported problems with trying that.

  • http://www.stevestreeting.com Steve

    Well, regardless of your local regime, if you want to do business in those countries, and if you’re serious you will want to, then you have to deal with that environment.

    Besides, people looking to exploit the ridiculous patent setup in the US will always try to find a way to shoehorn it into other places, Europe is a constant battleground that I suspect will eventually be lost, if purely because of attrition (lobbyists for the pro-patent camp get tired less quickly because they’re well funded by the usual suspects).

    Worse for me, my own juristiction for example has already set up an IP office that deliberately targets re-registration of US business method patents which would not be valid in the UK. This is because the people involved have absolutely no concept of what this means for developers and small businesses (because they only listen to lawyers, accountants and investment groups), and instead just follow the money from big business. Therefore in theory thanks to the money-driven moral vaccuum that exists locally, a US company could re-register their ridiculous business method patents here and sue me in the local courts. I doubt we’ll be the last place in the world where this sort of nonsense is allowed.

  • galaktor

    I personally don’t mind using C++ or C#/.NET/Mono. But the main problem is, as you stated, that C# is usually highly connected to (at least the basic) .NET library.

    On the other hand though, I cannot understand how .NET specifically causes so much patent-paranoia within the Open Source world. Most applications in the whole world – including most popular free software – violate many software patents: Adobe has a patent on tabbed palettes (http://eupat.ffii.org/pikta/xrani/palette/index.en.html), and Intel holds a patent that could cover “apt-get” (http://en.swpat.org/wiki/Example_software_patents#apt-get).

    So I generally consider software patents dangerous, not only if it touches .NET libraries (which are not copied to Mono, but reimplemented from scratch).

  • http://www.stevestreeting.com Steve

    Oh, absolutely. The reason .Net gets extra attention here is that
    a) MS has been historically openly hostile to open source; that’s changing to a degree but there’s some schizophrenia in the company about it now, with some parts advocating & embracing it, and others still taking the old lines
    b) MS has a huge vested interest in preserving the attraction of deploying on Windows, and a Mono that is equal to the MS version of .Net would threaten that. I personally think that Mono is a positive thing for MS, but only for as long as the ‘official’ .Net stays ahead, giving Windows a lead. I think if Mono ever caught up 100% things would be somewhat different, and MS would start demanding licensing revenue, which considering the investment they’ve made in it is probably fair enough, but it would change the rules somewhat. This may be in their long term plan in fact, and why .Net isn’t in the promise.

    So, patents are a problem everywhere, but with .Net / Mono there’s just a more concrete sense of why they might be used, if not now then in the future.

  • kinjalkishor

    C# seems only to have the simple benefit of faster GUI creation for me, though on the other hand it is burdensome to connect to unmanaged C++(game engine connected to editor in .NET), a better solution seemed MFC/wxWidgets, which while not as easy are sufficiently good. Minus this benefit, learning C# seems like one more extra language to learn(arguably, if u know java then it is similar, but then people said the same about java, if u know C++, java is similar, and java has some serious benefits compared to C#). C# could only copy the body of Java not its soul.
    All in all I find C++ the best language for many purpose, combined with available libraries(almost all good ones are open source) can do all the required work.

    I am also not pretty sure that C# will survive some years after, but as I see from history all open source packages survive are compatible and become better. Ex. Java, Lua.
    Also I believe a language should be free(though making paid libraries for it is ok, if they have quality)

    For the first time I got the same 2 words in ReCaptcha here within 1 month. I wonder what is the probability of that but it has happened now.

  • galaktor

    I have done a lot of work using both Java and C#. Just by the use of the language, I would prefer C# anytime. Yes, C# has copied a lot of concepts that were already within Java at the time. But it’s the details that make C# more appealing to use, like attributes and properties and anonymous methods – at least for me.

    I rarley use GUI elements at all, by the way, but it is nice to be able to patch up some forms within minutes. Another reason why I like working with .NET is the chance to work in Visual Studio, which is by far the most capable and productive IDE I have ever used. Eclipse, which is Java’s sort-of standard IDE, is capable of most of those things, but just not as integrated and efficient as it is in VS.

    So, from a professionals view, C# (and VS) are primary choice – especially for so-called “enterprise” software – and this is not just because Microsoft sells it, but because that combination is superior to working with full open-source alternatives.

  • http://www.stevestreeting.com Steve

    Yep, C# is a very good language, I like it. I do think many coders get too obsessed with language features though, and don’t spend enough time thinking about frameworks, which are actually more important when it comes to actually getting projects done rather than just hacking. Until the last couple of years, .Net was *way* behind Java in this respect, which had no end of mature framework components that just made building a full-scale enterprise app much easier. To me, .Net was great up to beginner/intermediate level, but after that was missing vast components for more complex systems (like IoC, MVC, decent persistence & replication, message-driven processing) – these things you had to either build yourself, or rely on substandard implementations (compared to what you could get in Java – ASP and ADO did not stack up well at all). That’s been changing since I moved on – MS is bringing MVC and EF, and the open source frameworks are maturing. But when I was doing business systems, .Net as a *framework* for larger apps was seriously underfeatured to be honest, and what was worse was that many people advocating it seemed to have no idea that there were things missing, concentrating on just how great the language and IDE features were. I’m glad they woke up & realised eventually, even if it was a few years late IMO.

    On IDEs, for the time that I used it, Eclipse was the only IDE I would consider better than Visual Studio. The ‘auto-fixing’ options were just stellar (CTRL-1 fixed a staggering number of common mistakes!), the ‘Perspectives’ interface approach was vastly more powerful when switching between different modes of development (server code, web code, database, modelling etc), and the debugging environment was the best I’d ever used, making debugging many threads and remote server code even running on other platforms incredibly easy. Subversion integration was much better at the time too, although AnkhSVN has improved a lot since then. I love Visual Studio, but for Java, and at the time (2006 and before) Eclipse was heaven to me.

    And the final reason I don’t use .Net very much is a simple one; for me, developing solely for Windows is a poor use of my time & resources. When I have the option of writing code that would run on the Mac, Linux, mobile OS’s and consoles with relatively small changes, I’ll take that every time, because generally speaking, I take the long view with my software. This is less applicable to people who have a shorter term view, or just want to target a subset of the technical landscape (albeit a major subset right now), but trading a slightly less simple development environment for longer-term flexibility & control is a price I’m very happy to pay. I think that’s generally the feeling of most open-source developers actually – that some short-term pain is worth it for a long-term gain.

  • http://sliceofmuffin.com blankthemuffin

    While I do agree with you, I would like raise the point that “I personally don’t mind using C++ or C#/.NET/Mono. But the main problem is, as you stated, that C# is usually highly connected to (at least the basic) .NET library.” is kinda misleading since the ECMA CLI standard does include most of the standard library. The bits missing are newer additions like LINQ.

  • galaktor

    That is true, many basic libraries are actually open. I found a neat list of non-open namespaces on wikipedia, although I cannot say how true it is (cause it is a wiki):

    http://en.wikipedia.org/wiki/Base_Class_Library#Non_standardized_namespaces

    I consider the following as problematic since they are not open but certainly widely used: System.Linq, System.Data, System.Windows.Forms, System.Media.

  • http://www.stevestreeting.com Steve

    “The bits missing are newer additions like LINQ.”

    Erm, no. Read the ECMA 335 specification for details, you’ll see the libraries that are covered around page 469 onwards. Only the basic libraries are covered, XML, networking, reflection, base class library (referenced in galaktor’s post). This is simply not enough to make any reasonably large system, particularly business systems – at least not one that actually leverages the advantages of .Net.

    A reasonable guide is that all the data, messaging, UI and web systems are excluded, along with most library changes in .Net 2.0, and pretty much everything in .Net 3.0 and 3.5. That’s a hell of a lot of stuff that no serious business developer would want to be without if they picked .Net as a platform, and I bet the vast majority of the open source frameworks evolving around it make use of non-standardised libraries, so the standard subset isn’t a great deal of practical use, IMO, for the kinds of systems you’d look to build with .Net (which are very often data-driven business apps). You certainly can build systems with the standardised subset, especially those not needing database or web subsystems, but if you do need those kinds of features, you’re just about guaranteed to need to stray into the non-standardised bits. You’d could pick up alternative Mono subsystems that don’t try to recreate the API of .Net (to avoid potential IP issues), but then you won’t get the benefit of such good VS integration that is a major draw of the platform. I think really, for business systems, Mono can just be a funnel that eventually leads you to being dependent on core .Net anyway. That’s not the intention I’m sure, but in practice I think that’s what it does in a lot of cases.

  • kinjalkishor

    It looks like as if it is pretty much the intention of Microsoft atleast to get .net always at 3 steps above for who comes through the opposite end of the funnel.