Booting Knoppix allowed me to play with a number of applications bundled with the distribution. One of them was MonoDevelop, the Mono C# IDE. I was intrigued with the prospect of being able to create cross-platform applications in C# that could be developed equally on Linux using MonoDevelop as well as on Windows using Visual Studio 2005. What I discovered is that MonoDevelop is a simplistic development IDE at best. If you want a powerful IDE under C#, then it's best to stick with Visual Studio under Windows. For other languages, such as Java, there are alternatives to powerful and complete cross-platform editing.
I started this simple experiment under Windows XP on my notebook with VS2005. I wanted to create a complete project with solution file that I could then attempt to open under MonoDevelop running on Linux. I followed a Microsoft walk-through (similar to a Java trail) that allowed me to create a very simple C# application with a single window and some controls. You see it executing below.
As a reference to the C# project I then recreated that application under Java using NetBeans 5.5, again on Windows XP. I am, admittedly, something of a Java booster. You see it executing next.
The next image is the VS2005 Professional IDE with the composer and one of the controls (a Label) selected. I've got it organized in this view with the control palette on the left and the attribute panel on the right. It's quick and easy to interactively build windowing applications.
The next image is NetBeans 5.5 in the form design mode. This layout is slightly different, but equally easy (for me anyway) to use. Again, a label has been selected such that it's highlighted in orange against the blues and grays of the designer.
Comparison of VS2005 and NetBeans IDEs
Ignoring the languages, there's actually more that's similar between the two than different. What struck me was the strong similarities (look-and-feel as well as behaviors) between VS2005's form editor and NetBeans Matisse form editor. Both editors allow you to place controls anywhere, and both editors produce 'guidance bars' that show edges and well as distances between controls on a panel. Since I had worked with such features on NetBeans before I touched them on VS2005, I can honestly say that my work with NetBeans prepared me for VS2005.
While there were many similarities, there were some important differences I had to be careful off. For example, double-click on a Button control in Matisse and you just change the button's text. Double click on a Button in VS2005 and you wind up in the code editor for that control's click event handler. I had Emacs key bindings set up under VS2005, so I kept hitting ^X^U over and over...
While this is by no means a real comparison, I have to give considerable kudos to the Matisse develpment team, and I also have to admit that I preferred Matisse's designer over VS2005's. I found it easier to place controls under Matisse than under VS2005, and Matisse seemed to give more visual cues when placing and sizing controls, especially in relation to other controls on the panel. I'm going to work with both a lot more in the future, so my opinion of both may alter a bit in the future. But right now I give NetBeans 5.5 the nod over VS2005, at least with regards to RAD.
Moving to Linux
After getting both projects entered the and the applications built and tested, I rebooted my notebook and came up under Suse 10.1. Because Windows NTFS partitions are read-only, I copied the VS2005 and NetBeans projects over to locations under Linux. I ran the C# assembly as a simple smoke test to see if Mono could run it. It did, as you see below.
I did the same thing with the Java application, as you see next.
Opening the Projects under Linux
I learned something important today. When you go to the MonoDevelop release page and see the section devoted to describing the Visual Studio 2005 importer written in strike-out text, then it appears to be an indicator that it's a feature that's not going to be implemented, either in the current 0.12 release (I was hopeful after all) or in the 1.0 release. Not only could I not import the VS2005 solution file, but I couldn't open form in some sort of visual editor, either. I wasn't looking for a VS2005-style editor, I was looking for just about anything. Instead when I opened the file it came up in source mode only.
When I opened the NetBeans version of the project, it opened up beautifully.
In the process of working with the project I closed a few panels, but it's essentially the same view as I had under Windows XP.
C# Execution Differences between Windows and Linux
Although at first blush it looks like the C# application executed identically, this was only after two iterations of debugging between Windows and Linux. Under C#, labels have a dynamic size attribute. They can grow or shrink at run-time based on the length of text assigned to the label. Dynamic labels work just fine under Windows. Under Linux, and Mono 1.2.3, they truncated text based on the size (length) of text in the control during design time. Under Windows and VS2005 I had to turn dynamic sizing off, then manually stretch each label out to the maximum length it would take to show every label. When I did that and re-ran the C# application under Linux then it ran as it did under Windows.
Look and Feel Differences
Another annoyance of C# under Linux is its default choice of look-and-feel. Admittedly the sample application is no real test, but the controls it used for the buttons are not part of the style I use under Gnome. In fact the button styles look like something from Windows 9x or 2k. Java, while it can use the host OS style, was consistent in its use of the Ocean look-and-feel, which I don't have much use for on either platform. Java uses Windows look-and-feel if you tell it to under Windows, and it looks quite good. If you tell Java to use the Gnome theme, it looks rather bad. I'd rather use Java Ocean theming under Linux than Java Gnome.
Is There a Clear Winner?
Not really. For an excellent cross-platform development experience I believe you can't beat Java, using NetBeans 5.5 or Eclipse 3.2.1. Eclipse, through MyEclipse, provides Matisse in an Eclipse plugin, so you can get the same excellent form designer found in NetBeans. Both NetBeans 5.5 and Eclipse 3.2.1 are top-notch open and free IDEs.
The problem is that Java is falling from favor in a number of quarters, and C# is rising in its place. The reasons for this are varied, but in some instances the Java community has no-one to blame but themselves. I won't rehash the history (you can read about it from plenty of others), but the result has been a dissatisfaction with Java and Java tools that Microsoft with C# has taken advantage of. Microsoft has even provided a VS2005 C# Express version that is free as in beer, and it was used to great effect in the recent delivery of Nasa's World Wind 1.4. It should be noted that Nasa dropped the C# version to concentrate on a Java version, forcing a group of open source developers to finish the C# version using .Net 2.0. and Visual Studio Express. It would have been a real coup for MonoDevelop to have helped in this effort.
I'll need to work a bit more with MonoDevelop to better understand it's capabilities. It's tough (some say unfair) to criticise MonoDevelop in this way, but it's going to happen no matter what. I firmly believe in the quality of the Mono VM, having used it for some time now for non-GUI work.