Microsoft Puts C# and the CLI Under "Community Promise"
FishWithAHammer writes "Peter Galli of Microsoft posted a blog entry on Port25 today, regarding the explicit placement of C# and the Common Language Infrastructure (the ECMA standard that underpins .NET) under their Community Promise: 'It is important to note that, under the Community Promise, anyone can freely implement these specifications with their technology, code, and solutions. You do not need to sign a license agreement, or otherwise communicate to Microsoft how you will implement the specifications. ... Under the Community Promise, Microsoft provides assurance that it will not assert its Necessary Claims against anyone who makes, uses, sells, offers for sale, imports, or distributes any Covered Implementation under any type of development or distribution model, including open-source licensing models such as the LGPL or GPL.'"
Adds reader anshulajain: "Understandably, Miguel De Icaza is jumping with joy."
"The Community Promise is an excellent vehicle and, in this situation, ensures the best balance of interoperability and flexibility for developers," Scott Guthrie, the Corporate Vice President for the .Net Developer Platform, told me July 6.
Ok, I certainly hope he received more than just that before he began proclaiming to the world that Microsoft is doing such a thing.
The optimist in me is excited. The skeptical in me is dubious, confused and does not trust blogs. It's not listed on Microsoft's list of products under the Community Promise so I'm going to refrain from breaking out the champagne until all the facts are finalized.
Anyone else got a better source for this than a loosely affiliated blog that bills itself as "Communication from the Open Source Community at Microsoft" ?
My work here is dung.
Microsoft love us and want us to be happy :-)
echo -e 'global _start\n _start:\n mov eax, 2\n int 80h\n jmp _start' > a.asm; nasm a.asm -f elf; ld a.o -o a;
Now Microsoft is estopped from going after people using c# and .net technologies.
This is the answer I've wanted from Miguel ever since the Novell brouhaha.
Promissory estoppel serves as a "consideration substitute" in contract law that renders certain promises otherwise lacking in consideration binding and enforceable. In such cases, the promisee's reliance is treated as an independent and sufficient basis for enforcing the promise. Promissory estoppel can be viewed as a legal device that prohibits the promissor from denying the existence of a contract for lack of consideration.
http://www.lawnix.com/cases/promissory-estoppel.html
"Q: Is this Community Promise legally binding on Microsoft and will it be available in the future to me and to others?
.NET but not covered by the standard (like Winforms)
A: Yes, the CP is legally binding upon Microsoft. The CP is a unilateral promise from Microsoft and in these circumstances unilateral promises may be enforced against the party making such a promise. Because the CP states that the promise is irrevocable, it may not be withdrawn by Microsoft. The CP is, and will be, available to everyone now and in the future for the specifications to which it applies. As stated in the CP, the only time Microsoft can withdraw its promise against a specific person or company for a specific Covered Specification is if that person or company brings (or voluntarily participates in) a patent infringement lawsuit against Microsoft regarding Microsoft's implementation of the same Covered Specification. This type of "suspension" clause is common industry practice."
tl;dr they can't sue you, ever, unless you sue them over patents.
Also, Mono contains
1) parts that are covered by the ECMA standard (C# and the CLI)
2) original namespaces (like Mono.Simd)
3) open-sourced Microsoft stuff (like ASP.NET, under the OSI-approved MS-PL license)
4) parts that are in
which is why Miguel de Icaza says they'll be splitting their distribution up into now definitely safe (1 and 2) and potentially dodgy (3 and 4) packages, which is what already happens on Ubuntu for instance.
Here's why:
There is no mention of other components the extend .NET!
From the document...
"...We introduce instructions newdata, lddata, stdata, castdata, isdata and
switchdata to create and manipulate classunion values..." (emphasis mine).
In fact, this announcement is not much different compared to the one 7 years ago!
Watch out folks. Microsoft's classic Embrace, Extend, Extinguish paradigm is very possible here.
From the Microsoft Community Promise, with my emphasis:
Free software is often distributed to the public while in an incomplete state. This Community Promise appears not to apply to such an implementation that is published before it is completely compliant.
Maybe you pro-Mono FUDites should read what they are really promising. It only covers the core language and run-time, not anything useful like the libraries.
I love C# as a language, and .NET has been one of my favorite products from MS, it's great to use for development and seems to be what Java should have been. My concern with this announcement though is that I can't get The Lord of the Rings out of my head...
Three Rings for the Elven-kings under the sky,
Seven for the Dwarf-lords in their halls of stone,
Nine for Mortal Men doomed to die,
One for the Dark Lord on his dark throne
In the Land of Mordor where the Shadows lie.
One Ring to rule them all, One ring to find them,
One Ring to bring them all and in the darkness bind them
In the Land of Mordor where the Shadows lie.
Hi, I've worked extensively with both and think that they're quite different. Can I presume that Java and C# are the only languages that you've worked with? And C# pretty minimally, at that?
C++ programmers and Java programmers can all feel quite at home after only a short time in C#. It was designed that way. Saying that, coming to it only knowing C/C++, it didn't take much longer for me to develop an initial familiarity with Java. In fact, pretty much by definition, and for obvious reasons of programmer portability, most strongly typed, high-level programming languages are remarkably similar.
To say that C# is identical to Java, though, is bollocks. There are some pretty significant differences, and in many cases I prefer C#'s implementation.
This doesn't make Stallman wrong all along. The issue Stallman raised is that the situation was not clear enough to have confidence that freedoms would be safe. If this announcement clears that up (as it appears to do), then the situation is *now* clear, and he can change his view based on new facts. That does not mean that he is then made wrong in his previous statements. This statement has brought the information that many in the community were asking for, it doesn't make them wrong for wanting this.
I have been following Mono for a while but I am currently still using Java.
The question is which do I commit to?
The way I understand it is:
Java has less "patent liability" than Mono. .net are covered by the Communtiy Promise but not some of the supporting libraries (e.g. ado.net, winforms).
All of Java is under an open license including "essential" libraries (e.g. data access, gui).
Only the "core" (including the framework libraries?) of
I know that these .net libraries have been implemented in Mono but would we have to write new open-source libraries to replace thier functionality and remain "patent-threat" free?
If this is the case then I would imagine that Java would be the preferred choice IF you had to chose one.
What are the overheads of both the Java and Mono virtual machines running at the same time? Would we be better getting behind just one environment and using that.
For what it's worth I really like and prefer Mono - especially Banshee (is there an equivalent for Java?) and I want to develop for it but the Community Promise only covers the ECMA part of .net. Without the other libraries I fear Mono is hamstrung.
At least with Java I know where I stand, all the libraries are included and the functionality is already there.
It sounds promising, and it may end up meaning Stallman was wrong all along
You've got the causality exactly wrong. If it wasn't for Stallman and other FOSS people making a lot of noise about this recently, it wouldn't have happened. (Note that I'm not saying Stallman himself is to be thanked for this, it's the general noise about the topic, which he was a part of.)
There are always two levels to statements such as those Stallman etc. made about Mono. On the first level, they are meant to be taken at face value - their arguments are either valid or not, in and of themselves. On the second level, they are intended to cause an effect of some form, such as motivating certain people to do certain things. In this case, the second level was meant to motivate Microsoft to make the first level (the direct arguments against using Mono) invalid. That appears to have worked (well, once Microsoft formally announces this, presumably soon, but all we have so far is a blog post).
The lawyers amongst us are leaping for joy. I happen to be a law convert. So ill try and explain why we're happy!
Promissory estoppel is a legal defence (a so called shield). When a party (A) intending legal relations promises not to assert their strict legal rights, and another party (B) moves to rely upon this promise, that party (A) is estopped from enforcing their rights (against B) by way way of promissory estoppel.
It goes something like this: Now MS has promised not to enforce their C#-rights , and people rely on this promise, such as start development/deploying C# applications because of this promise, if the case came to court, MS's argument would be estopped by a defence of promissory estoppel.
It's a little more complicated. For instance it must be inequitable for B if A reneges on their promise (fairly clear if they suffer a disadvantage or loss as 'one who comes into equity must come with clean hands'), the promise must be clear and unequivocal (I'd say yes), there must be a change in reliance on the promise (yes), and it is a shield not a cause of action (in other words, we can't sue MS for revoking the promise, we can simply aovid being sued).
However, things get a little confusing. MS have declared that this promise is unilateral, in other words, it is a promise to the world without the need for a formal agreement. Such things are valid in the eyes of the law, and enforced by the fact promissory estoppel acts as an equitable remedy - there is no need for consideration, a key ingreediant to the traditional offer/acceptance/consideration contractual model.
Promissory estoppel is a common law principle. It's basis in England is from Lord Denning's High Court decision in High Trees.
Law bit:
In High Trees, due to WW2, the claimant ("High Trees") agreed to reduce rent for a block of flats. After the war, the claimant brought action seeking the past and future rent. Lord Denning said "When a promise is made that is intended to be acted upon, and is acted upon, you are estopped from going back on it."
In High Trees Denning referred, not to a previous case of Foakes v Beer (about the part payment of debt), but Hughes v Metropolitan Railway to establish his basis for promissory estoppel. In Hughes, it was held that the opening of negotiations for sale of a property had an implied promise not to enforce an outstanding notice of repair that would forfeit the respondents lease.
Key to the criticism over Denning's decision is that Hughes only suspended rights, whereas High Trees may extinguish them. This position has recently been approved in the UK by the House of Lords in Tool Metal Manufacturing Co. Ltd - the promisor may revive rights by formal notice, unless it is impossible for the promisee to resume his original position.
Is it impossible to resume the original position prior to this agreement? We're talking about computers here. The agreement has come now, not several years ago. Consider Mono as it is now, as the original position. This is such a contentious area when you consider MS can revoke the promise, creating ambiguity, and because under Coombes v Coombes promissory estoppel is not a cause of action, the Mono community cannot sue MS to enforce this promise!
Matt
He has already done that with Java, after Sun released it under the GPL.
Before that, he deprecated Java like he’s doing with Mono now.
I've used both for serious commercial development and I personally prefer C# to Java. If it means anything, I consider myself pretty impartial, as Java and C# are just two of the dozen or so languages I've worked in and I consider neither to be the most interesting.
C# and Java are only really similar in the way that you would expect two garbage-collected, object-oriented, C-derived languages to be similar. People who say C# is 95% the same as Java are missing the point: it's the small differences that make one language nicer to use as a developer.
Your mileage may vary. You should give both a go and make up your own mind.
Considering your entire "question" is basically slamming it, I doubt you'll care what people answer.
But for the record, yes, it is *that* good.
The controversy is all over political crap, not the quality of the language or runtime. If you want to write software, and don't care about political crap, there's virtually nothing out there better than C# and the CLI right now.
Comment of the year
I find it pretty amazing when you mention this to most C# programmers, they'll go on about how different C# is from Java.
"They" do? Really! Funny, as a C# programmer who has fairly extensive experience with Java, I've never said any such thing. Maybe you should try *not* stereotyping large groups of people, eh?
For the record, C# is really Java polished up. It provided generics and a foreach loop first, implements type-safe function pointers, lambdas (the absence of lambdas in Java always annoyed the hell out of me), a much better native call interface, and a few minor but handy language features (eg, safe ref and out parameters, using blocks, etc). And I very much prefer the native GUI of C# applications (although the nasty boilerplate necessary to build them makes a GUI builder absolutely required).
On the API side, they're about equivalent, though both have their warts... although, I must confess, some of the problems in the .NET API are a bit baffling (date handling in .NET 2.0, for example, is unbelievably primitive... there is simply no facility for doing arbitrary time zone conversions... seriously, what the hell?).
But anyone who argues that C# is basically the same as Java doesn't understand how some of those features can make a programmer's life *much* easier. Are they necessary? No, of course not. But they certainly are handy (honestly, without proper anonymous closures, I feel crippled as a programmer... as a tool for building clean, reusable, modular code, they're simply invaluable).
And as an aside, while I realize that Java is starting to take on a lot of these features, keep in mind, it probably never would have if it weren't for the competition that C# and .NET are offering. So, in the end, the Java fans out there can thank Microsoft for Java finally moving forward and gaining some of it's new, modern features (can we say "generics"?).