Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Abel Avram on Oct 23, 2008 03:13 AM
A question was asked on Stack Overflow having the title "Is Mono ready for prime time?" Several users responded including Miguel de Icaza, founder of the Mono project. The responses are helpful to evaluate the opportunity to deploy an application on Mono.
Miguel's response suggested two scenarios:
a) if you are porting an existing application and wondering if Mono is good enough for this task;
b) you are starting to write some new code, and you want to know if Mono is mature enough.
For the first scenario, Miguel suggests running the Mono Migration Analyzer tool, known as Moma, and proceed to production if Moma shows none or few application issues. Miguel offers some Moma analysis statistics:
According to our Moma statistics based on user submissions (this is from memory) about 50% of the applications work out of the box, about 25% require about a week worth of work (refactoring, adapting) another 15% require a serious commitment to redo chunks of your code, and the rest is just not worth bothering porting since they are so incredibly tied to Win32. At that point, either you start from zero, or a business decision will drive the effort to make your code portable, but we are talking months worth of work (at least from the reports we have).
Things look much simpler if starting a new project, according to Miguel:
If you are starting from scratch, the situation is a lot simpler, because you will only be using the APIs that are present in Mono. As long as you stay with the supported stack (which is pretty much .NET 2.0, plus all the core upgrades in 3.5 including LINQ and System.Core, plus any of the Mono cross-platform APIs) you will be fine.
Other users expressed their opinion on the questions asked. Jon Galloway said:
It's pretty good for .NET 2.0 features. Many .NET 3.x features are in process now but aren't complete.
I recently ran MoMA on SubSonic and found only one issue - a weird use of Nullable types. That's a big codebase, so the coverage there was pretty impressive.
At the language level, the Mono compiler is fully compliant with the C# 3.0 language specification.
Jonathan Holland had his take:
On the desktop side, Mono works great if you commit to using GTK#. The Windows.Forms implementation is still a little buggy (For example, TrayIcon's don't work) but it has come a long way. Besides, GTK# is a better toolkit than windows forms as it is.
On the web side, Mono has implemented enough of ASP.NET to run most sites perfectly. The difficulty here is finding a host that has mod_mono installed on apache, or doing it yourself if you have shell access to your host.
Daniel, another Stack Overflow user, pointed out:
If you want to use WPF, you are out of luck. Mono currently has no plans to implement it. http://www.mono-project.com/WPF
It looks like Mono is ready for production, at least for new applications or those which pass the Moma compatibility test.
For the type of application we're building Mono unfortunately doesn't seem ready for production. We were impressed with it overall, and impressed with its performance both on Windows and on EC2 machines, however, our program crashed consistenly with garbage collection errors on both Windows and linux. The error message is: "fatal errors in GC: too many heap sections", here is a link to someone else experiencing the problem in a slightly different way: https://bugzilla.novell.com/show_bug.cgi?id=435906 The first piece of code we ran in Mono was a simple programming challenge we'd developed... The code loads about 10mb data into some data structures (e.g. HashSets), then runs 10 queries against the data. We ran the queries 100 times in order to time them and get an average. The code crashed around the 55th query on Windows. On linux it worked, but as soon as we moved to a bigger data set, it would crash too. This code is very simple, e.g. put some data into HashSets and then query those HashSets etc, all native c#, nothing unsafe, no API calls. On the Microsoft CLR it never crashes, and runs on huge data sets 1000s times just fine. One of our guys emailed Miguel and included the code that caused the problem, no response yet. :( It also seems like many other people have encountered this problem without solution - one solution has been suggested to recompile Mono with different GC settings but that just appears to increase the threshold before which it crashes.
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
1 comment
Watch Thread Reply