Brainshare, Winforms, MonoDevelop.

by Miguel de Icaza

Paco has been hanging out at the Mono booth at Brainshare And he reports from the event:

It has been terrific to see folks from all walks of life approach the booth and come carrying the applications that they are currently working on contained in an USB keydrive and having us run it on the different platforms. To most of them, they tend to be very dazzled when they see their WinForms projects run on Linux (SLED 10) often without modification. Some of the apps they have come talk about range from GroupWare clients, Decision Support Systems (DSS), Enterprise Information Systems (EIS) front ends (some web based others SmartClients), etc.

Paco, an attendee and Wade in the Mono Booth.

A journalist asked Nat whether Mono would run OpenDental.Net, an open source Winforms-based application for dentists. Nat SMSesed me the question, I downloaded the software, took a quick glance at what is needed (it will require replacing some Windows libraries with some Unix-specific libraries and renaming a few files to make bash happy for building on Linux):

I emailed Jordan Sparks, Doctor of Dental Medicine and developer of OpenDental and asked him whether he could make the filesystem layout changes to ease the porting effort, and got a reply back from him that same night. In his words:

I'm really a HUGE fan of what you guys are doing. It's going to change dental offices forever, and it will impact a lot of people.

My plan is to assist Mr Jordan porting his OpenDental software to Linux. As I mentioned, it will require swapping out a few Windows components he is using for the equivalent Linux libraries. It will be educational. This along with the PaintDot.Net porting effort should be provide some good material for a .NET to Mono migration white paper.

In general, porting from .NET on Windows to Mono on Linux has the same feel of porting across different versions of Unix in the past. From BSD to SystemV: replace a few libraries and routines with different versions. It is a relatively simple exercise.

I find this very interesting. On of my dentists is also a hacker on his spare time, and runs his office completely on software he has developed using Visual Basic. On one of the visits I made to his office, as I was being treated, he explained to me with excitement why he liked working on VB: the software that runs his whole office is something he has built over the years. He does a lot of the coding himself, but he loves to spice up his application by purchasing a third party control for displaying graphs, managing his x-ray images and track patients.

This is the kind of ease of use that we are trying to achieve with Mono and MonoDevelop. Lower the barrier for creating amazing applications on Linux.


MonoDevelop was originally a project that was developed by Mono users. Folks that wanted to have an IDE on Linux, so they ported various pieces of SharpDevelop to Linux and replaced Windows.Forms with our own toolkit Gtk#. The goal here was to create a truly native Linux application and to take advantage of Linux and GNOME specific features.

DogFooding MonoDevelop: using MonoDevelop to develop MonoDevelop.

As time passed on, our own engineers started using MonoDevelop. Lluis, better known for his work on remoting and web services, started using MonoDevelop to work on Mono itself. He developed a plugin that would allow him to build and develop the Mono runtime right in MonoDevelop.

Around that time we decided that we should invest in MonoDevelop as part of the efforts of the Mono team, for a few reasons:

  • It was a great test of Mono and Gtk#
  • Many thought that without an IDE, the full potential of Mono would not be realized.
  • We needed a place to integrate developer tools that we had created and that we have planned (most based on Gtk#):
    • Stetic, our Gtk# GUI designer, originally developed by Dan Winship.
    • MonoDoc: although it is available as a standalone tool, it makes sense to have it integrated directly into the IDE.
    • The ASP.NET web page editor developed by Michael Hutchinson the part summer.
    • The Gendarme, bug-finding and sanity-checking tool, developed by Aaron Tomb and Sebastien Pouliot (currently lacking a GUI).
    • Integrate the Mono Debugger, which sports a C# interface.
    • NUnit integration: full with progress charts.

Until December, we were using Glade-3 for our GUI design needs. At that point we went with Glade-3 as a short-term solution and because we felt it was complete enough to be a drop-in technology into MonoDevelop and had enough bits to allow it to be embedded.

But we soon realized that for a full integration we would have to spend some significant developer time in getting it in shape for integration into MonoDevelop. So we changed our plans and Lluis started working on integrating Stetic and finishing the missing bits in Stetic.

The upcoming MonoDevelop will contain a new Stetic-based GUI designer. You can learn more on Lluis' blog entry.

The Stetic integration is fantastic, these are some of the features I like:

    Custom Gtk# widgets that you develop appear on the toolbox palette, and you can use these widgets right into your main application if you want to. No placeholders anymore.

    A wizard for creating custom Gtk# widgets.

    Double-clicking on events for a widget will create a stub for the handler. For example, if you double click on a button, it will create the

    OnButton1Clicked method with its
    		proper arguments.

MonoDevelop also went through a major refactoring effort, where the IDE features are all plugins. This is an idea inspired by Eclipse's implementation.

A new release of Mono and MonoDevelop will be coming out in a few weeks with these features.

In the meantime, Chris Toshok has started integrating Michael's ASP.NET editor into MonoDevelop. So we will have an IDE that can be used for doing smart client development as well as web applications all in one:

Posted on 22 Mar 2006