Why Mono doesn't suck
www2.apebox.org
www2.apebox.org
Guys, you're killing me.
I really want to embrace Mono, but there is this fundamental disconnect between what the Mono team think they are building and what the real world needs them to be building.
Mono team, your ONLY goal should be to provide a 100% compatible .NET implementation that runs on Linux. That's it. Simply make my C# code work there, and I'll be happy.
Unfortunately, the Mono team is trying to do something else entirely. They're adding new language features and trying to extend it into their own thing. And nobody outside the Mono team can understand even for a minute why they would want to do that.
So here we are, 4 years into this project, and it still has pieces of .NET 1.1 that are not implemented. That means we can't use it yet. And while we're waiting patiently for a usable framework, the Mono team is off pursuing shiny .NET 3.5 functionality and inventing new functionality of their own. I mean sure, it sounds like fun and all, but us developers are still out in the cold waiting for a framework that the Mono team doesn't seem inclined to actually finish.
So guys, please, I'm begging you. Quit adding new stuff. Go back and finish what you started. Get .NET working on Linux like you promised. We'll all thank you for it!
Perhaps they just want to be able to program in a decent statically-typed language with a GC and a JIT compiler and Gtk bindings?
Mono needs to get a direction and follow it. At the moment, they're heading in a bunch of directions at once. If they don't want to be "A .NET Runtime That Works Anywhere", then they should say as much and stand aside so that somebody else can do it.
Uh, people are giving their time to create what they need / want. Welcome to open source, right? I don't think it's possible to "hijack" an open source project. As said above: patches are probably welcome.
In the end it just sounds like you want free support from a company like Microsoft/Novell without paying a dollar.
Stop confusing your desires ("Simply make my C# code work there, and I'll be happy") with the only sane direction for them to go.
I certainly wouldn't thank them for slavishly copying .net 1.1 or any such thing. If you want that so badly, feel free to submit patches, I'm sure they'll gladly accept.
If it's you who are developing, it's easy to code around the holes, but if you need a closed-source application designed to run on .NET (and I don't know why people want these things, but they do) you have little to no choice but going Microsoft.
And that's a dealbreaker for Mono more often than you imagine.
We're historically a microsoft shop but recently (in the last 18 months or so) have started running linux backend servers for many of our services running on EC2. If I wanted to be buzzword compliant I'm sure I could come up with some string of cloud nonsense to describe it.
We have something that looks kinda like Hadoop crossed with an app server that we can deploy components in.
I'd be happier with a solid final version of Mono.Simd rather than slavishly filling in any missing parts of older .net.
That's the stuff I'd expect to be there and it's not.
And if you do not know what is missing, download our tool, and it will do the work for you:
www.mono-project.com/Moma
After a few weeks running into issues like that, I just quietly exited myself. Windows EC2 boxes are only 25% more expensive than Linux ones, and they run .NET natively and correctly, so my particular problem is solved.
It has been quite good in my experience, obviously if you are doing windows specific things like registry or security it won't work, but that is to be expected.
This could possibly be fixed by now, but last I tried, the C# sample code to interact with Amazon S3 didn't run under Mono.
It is certainly possible to use SSL with mono, many people do it.
Perhaps a little Googling is in order?
The above statement makes it clear that you do not really follow Mono closely and your opinions are based on rumors rather than real life experience.
Let me explain:
I have not seen you post ever on our Mono mailing lists requesting the specific feature that is keeping your code from running on Mono.
I am having a hard time coming up with a feature of .NET 1.1 that you need to have on Mono (the stuff we do not implement does not make any sense on Linux, like support for WMI).
Mono implements quite happily all the core functionality up to .NET 3.5 with gaps on Windows Workflow (not there), WCF (Partial) and WPF (we are not going to implement it).
People that are adopting Mono (many of them) use our Migration Analysis tool to identify the spots that require rewriting (to remove Windows dependencies, and provide the Linux equivalent for example) and get moving on with their life.
From the statistics that we have colleced with the Moma Tool 1,592 application work out of the box; 1,823 require between 1 and 3 source code changes another 1,200 require from 4 to 10 changes. Now if you are even a remotely competent programmer, yous should be able to find work around for up to 10 changes in say, an afternoon?
The rest are more complicated, the next 3,000 or so reports will likely take from a week worth of work to a full scale reimplementation effort (the ones that have up to say 300 P/Invoke calls).
As for innovation in Mono: nothing anywhere says that we should stop at working on compatibility with .NET. We created Mono to create better applications for Linux, which is why we created bindings to Gtk# as well as some other couple hundred libraries: because we want to improve our ecosystem.
"Nothing that comes from Microsoft can be for our good and benefit. They are dedicated to our destruction and downfall.
Mono has infected Gnome. Ubuntu uses Gnome. I switched to Kubuntu and am happy with it. Now Moonlight is infecting Linux."
There are two parts to the Linux community. One part sees Linux as a legitimate tool they can use to bring down costs while maintaining stability. The other sees this as some kind of holy war and is really just using Linux to act like drama queens.
The link here is a good defense of Mono but the people he's trying to defend it to are never going to listen.
No need to deride an entire class of your peers simply because their ideals are different than yours.
Let me give you another example of this type of behavior. I personally disagreed with many of the decisions the Bush Administration made in the U.S. I have had many thoughtful discussions with people who thought differently and have, in some cases, changed their minds ever so slightly. The guy down the road from me shares my ideals but he expressed it by hanging a life sized doll of George Bush by a noose outside his garage and then eventually lighting it on fire. I assure you he convinced no one who didn't already agree with him and his actions were really just a thinly veiled cry for attention.
Do you really think that the stability, low cost and quality of Open Source software is independent of the Free Software ideology? If I was being as derisive as you are above, I'd say that I hear this argument mostly from ignorant youngsters who have been lucky enough to inherit something marvellous that their elders fought hard for, but are now in danger of squandering everything through a moronic and self-centered lack of insight.
The truth is that the two things go hand in hand. Without a Richard Stallman who is idealistic and paranoid enough to worry about things like patents and personal freedom, Open Source would be in much worse shape than it is now. Without a Linus Torvalds to pragmatically build excellent software within the framework put together by the community, we would be much diminished. We need both. Open Source software is often the "best tool for the job" in a technical sense precisely because it is Free, with all that implies.
I personally think that we are right to be worried about Mono. We don't need to be alarmist, but we need to be wary. It's up to the Mono community to convince people that there is no licensing danger - the best way to do this is to lobby Novell and Microsoft to officially clarify the situation.
Theo is also contrary to general opinion a really cool and friendly guy, and often (but not always) when he acts like a jerk is because somebody deserves it.
And, BTW, to replace your beautiful creations with the crappiest code seen on Earth?
Well, I do. Open Source is basically just Economics.
An initial release of source code happens because there's often no (more) alternative usage for it. From a product point of view, it's often unfinished. Turning it into something that could have an alternative use -- such as being sold as Closed Source Software, for example -- usually requires additional efforts; additional investments of time and money. Another reason for releasing the source code is the "death" of former Closed Source Software: Either it was killed by competition or because people's wants and needs changed. No or little future profit is to be expected.
In both cases holds: The opportunity costs of releasing the source code are low or even zero. One looses nothing by releasing the source code. If you'd loose something, you simply wouldn't release it. And every Open Source advocate is fine with that.
As for contributing to Open Source: It simply pays. If a developer is sufficiently annoyed by a missing feature or a bug to justify make a patch, it will happen. It's pure self-interest. It's economic behaviour.
The next stage is the more important one: Why send the patch upstream? That's simply, again. First, the opportunity costs of sending the patch is zero, again. The developer couldn't use the code of the patch for anything else. Second, sending the patch upstream, will save him effort. If he (or she) wouldn't send the patch, that's basically a fork so he or she would have to waste his time solving conflicts, etc. Sending the patch upstream is, in most cases, pure self-interest. It's economic behaviour.
Accepting a patch is usually also rational, for it improves the source code for the original developer.
In other words: each stage of releasing initial source code, making patches that fixes bugs and improves the functionality, and accepting these, is entirely self-interest and economic behaviour.
No need for any ideology.
Your argument that Open Source wouldn't exists without Richard Stallman, is basically useless: How could we know whether it wouldn't? It's an empirical question that cannot be tested with an experiment.
However, we can make some analogies: Solutions are often invented when problems exists. In nature, the eye was invented several times independently because it helped the creatures to survive more often.
So, it seems save to say: Without Stallman, something like Open Source would have been invented by others. In fact, Project Gutenberg -- free distribution of classic texts -- was invented in 1971, already. The first BSD "distribution" was assembled in 1977. Several others released source code without ever having heard about Stallman and Free Software, before.
Again, no need for any ideology.
I say again: we need both. I for one hope that the argument between ideologues and pragmatists is never decisively settled in either's favour.
A lot of the big projects like distros, MySQL,the kernel, Apache, and Firefox are commercially supported, but no one would really use it if it was not for the thousand little pieces of glue someone wrote as their passion or hobby with no hope for getting repaid. A lot of those people are driven by ideology, some just for the fun and challenge, and few for the money.
>Mono implements an international standard albeit one from a convicted monopolist. If this is a problem, why do people use C, the standard from convicted monopolist AT&T? Mono implements an improved, Free replacement for a proprietary offering. If this is a problem, why do people use GNU (which provided an improved, Free replacement for proprietary UNIX)?
Mono implements a _subset_ of a proprietary offering that is Free (as in speech and beer). GNU is pretty much a greatly enhanced superset of AT&T UNIX.
But I get your point. Since then, AT&T got a lot more civilized.
Microsoft never was.
I know many people that would question your claim that GNU 'enhanced' the work of Bell Labs, more like the opposite, but then they were certainly not alone in that.
AT&T was barred by consent decree from entering the computer industry. Unix and C were, by the standards of the day, practically given away, and AT&T couldn't use the control over these they had to unfairly outcompete other companies.
Yet I still read that people won't touch Silverlight because it's so proprietary and made by Microsoft!
Developers choose flash because it's much more popular and has mature tools and a significant pool of experienced professionals who can work with it. It's not only about the technical features of Silverlight compared to Flash (Silverlight doesn't really stand out), it's also about the ecosystem.
What I do like about it is that Microsoft supports it. The first time I installed Moonlight was because of a page that required Silverlight, and on clicking the "Install Silverlight" button, I got redirected to the Moonlight page. That's pretty neat.
Silverlight has great potential, because you can reverse-engineer it more easily, has support for multiple languages and you only need a text editor to create a Silverlight clip. And in version 3 they are introducing an API for plugable codecs, which is making it possible to stream OGG/Theora and Vorbis files with a Silverlight applet.
Flash is more popular because of inertia, and because many designers use Macs and have invested heavily in Adobe tools. Microsoft Expression only runs on Windows. They would have a lot more to gain if they released a Mac port.
A minor irony, Flash has had a bad reputation peformancewise on the Mac platform for a good decade now... and the migration from PPC to Intel hasn't helped matters much, as is my understanding.
One doesn't need to look any further to understand why Silverlight is not the platform of choice for rich internet applications.
And, with HTML5 support on many browsers, I hope it never will.
It'd be nice if there were maybe 2 or 3 factors that mattered but there are probably a dozen or more reasons people uses flash over silverlight and none of them have to do with openness. JavaFX and Silverlight are late to the game and they don't do anything more, they just don't raise the benchmark in any really significant ways.
Mono and Java both have been dealing with the same basic battle for their entire existence. C has been around longer, C is what the OS is written in... At least with Python or Ruby you don't have to compile so there is some sort of experiential advantage to the developer. Mono needs to be compiled, it's not terribly slow but all VMs (err, safe runtimes) have that stigma, you can develop much more rapidly with them with fewer bugs and there are whole classes of security defects that simply don't apply and then there is the tooling but that's just not sexy enough. If you only do C, then you're more "hardcore" and how the world perceives you as an OSS developer matters more than a lot of people want to admit.
The politics of Mono probably don't matter as much as the politics of Silverlight. Most of the people that worry about mono, from my experience, aren't developers. Where the design community is the primary user of flash and they've never been served by MS before and they have been exposed to stuff like IE's extended script.
I couldn't tell you why they wouldn't use Java, however.
Visual Studio and value types come to mind.
Plus Mono is more open than Java, was developed by open source community, therefore was already more easy to modify than Java, which has in house developed source.
My 2c.
There are probably hundreds of open and free languages out there better than C# that can run under pretty much any platform under the sun.
Unfortunately, they don't have $100m to pour into marketing.
In that way it gives Linux an inroad it didn't have before Mono.
Here's the thing you have to understand about corporate IT: Support is king. Unlike startups which are filled with technical people company's have only a few IT people and usually only one whose knowledge is at a high enough level to even think of editing the source of an open source project. So you need to have a support option in place.
Now Microsoft has support contracts but even if you don't purchase one you can get support for $245 per incident on any Windows Server issue. Our agency of 200 computers uses this option once, maybe twice per year. Novell on the other hand offers support for Mono but it's sold in packs of 25 incidents and costs $13,000. So no matter how much Linux and Mono can save your company the outrageous support costs make it virtually unjustifiable.
Amazon wouldn't be nearly as good as it is if it wasn't for the degree of software quality that they have.
In your customer service example IT has clearly had a positive impact, but you'd be hard pressed to convince anyone that the IT department is generating revenue for the company. If you walked into the CFO's office trying to make that case you'd be laughed out of the room. Good customer service does not manifest itself through good software.
A better approach may be to walk into the CFO's office and show how your IT department is helping the company realize it's goal of providing good customer service at an acceptable cost. It's a very subtle distinction. This is what I was getting at when I said not thinking of IT as a cost can be a roadblock to advancement.
Then again, I think it was Bezos himself who described Amazon as a technology company that happened to sell books too.
Maybe Mono is great for smaller agile shops who can somehow work around that (most likely since they don't have a lot of legacy code - or they can start from scratch), but at the big corp I work for it just doesn't work. Many of our teams couldnt get our major projects running without major issues on mono without significant work (which wasn't undertaken).
People doing software development on top of Linux tend to choose other languages, like Python, Perl, PHP, Ruby, C++ and Java. That's because these languages have matching cultures and communities.
Personally when I'm investing time learning a tool, if the learning is not trivial, I first take a good look at its community. If you're getting in trouble with Mono, who you're going to talk to?
The core mono mailing list is nice, but other than that you're out of luck. You could join a .NET community for support, but their topics, issues and goals aren't a match for a developer used to work on Unix-related projects. And the signal-noise ratio is rather poor.
No, it doesn't. For internal development you have a wide variety of options. Java is quite good and very popular among those who consider the option of not running their wares under Windows. The only way Mono can appeal to Windows-only houses is by making it possible to run unmodified (and proprietary) products that run under Windows on other platforms.
Were I insane enough to allow my business to run on .NET and Windows, I would only consider migrating it to other platform if I had the assurance of being able to run it unmodified.
And, BTW, as it is, Mono is a patent minefield. Do you really trust Microsoft to act as a responsible corporate citizen when doing the right thing would cut their profits?
I wouldn't even if acting responsible would be profitable. Playing dirty seems too embedded in their corporate DNA.
I'm working at a Windows-only house with internally built .NET apps. Mono is definitely part of our long term plans to run these apps on other platforms.
Unfortunately, some shops need to use off-the-shelf software that may even run on Mono but is not officially supported and, if something did go wrong, they would on their own.
Can you provide the patent numbers of the specific patents you had in mind, or otherwise provide a source for why you think this is the case?
Can you provide any declaration Microsoft supports Mono and promises will not sue those users not under their IP cross-licensing deal with Novell?
Until then, it is a minefield. And that is what a minefield is about - you never know when you step on one or even if there are any mines.
1) C# is a standardized, open spec language. Mono is an implementation of that open spec. The development of that specification is driven by MS's .Net platform.
2) Here's a crucial bit of patent/IP law: by releasing the specification of the language to the "public", MS is barred from suing over it in a court of law. So again, there's no need for it say that it won't sue, since it's already prevented from doing so.
And even if by publishing the spec they would have given up their right to sue implementors (which they did not) they would be free to sue anyone that used any technique on which they own valid patents on any jurisdiction insane enough to allow such patents.
And while I doubt their willingness to test such patents in court, I also acknowledge the potential for long and painful lawsuits is more than enough an incentive use other technologies that are every bit as nice to the developer as .NET while negating completely any litigation risk.
Yeah... "Infinitely extendable API" and all such. Roughly translated as "we
can't live without API bloat". Frankly, judging by the GNOME codebase people
who designed the thing [GNOME] are culturally incompatible with UNIX.