Cross-platform desktop app development


Hi there,

I want to create a small desktop app for my personal business that is a little graphic intensive (editing photos, movies etc). I have Macs (running 10.4) and PCs hosting Windows and Linux in my ofiice. I want to make sure that the app runs without much changes on all three OSs. I understand that deployment strategies would have to be different but I am looking for some advice and strategies from you learned folks on how to go about this development. Is this possible at all ? What should be my starting point ?

Do share your thoughts.

Thanks very much.
Depends on what you are looking for, how large your development team is, what size the project is going to be, and what your main objectives are.

If main priority is being cross platform with the least developer effort, have a look at Java. It's cross platform right from the start, and it's a very productive language and allows a relatively small team to manage a fairly large project (all subjective, of course:)) without the need for very specialized knowledge. The downsides are the GUI fidelity will be highly suspect on all platforms. Your application will require more memory, and the GUI will look out of place on all platforms. Swing can emulate the native look and feel, and while it does quite an admirable job with the look, the feel leaves something to be desired.

If you're keen on performance and GUI fidelity, use C++ with one of the cross platform application frameworks. My vote will go to wxWidgets, since it's quite similar to MFC (for better or for worse...) thus many programmers Windows will be familiar with it. The widgets are native, so you're app will look quite good on all platforms, and the license is LGPL, which means you can distribute your applications without revealing the source provided you dynamically link to the wxWidgets library. There is of course Qt, which is another popular framework, but you I prefer wxWidgets because Qt's GUI components are all emulated (a la Java Swing) so the look isn't always correct, the license is either GPL (reveal all your application's source code) or commercial ($1500 per license per platform). The benefits to Qt is that it is coded in much cleaner C++, compared to wxWidgets convoluted message map, which is implemented by way of C++ macros. My advice is to have a look at these toolkits, and decide which one suits your needs.

If you're looking for RAD, and quick time to market, you may want to look at REALBasic as it is quite similar to VB and the executables run on Linux, OS X and Windows. The downsides I can see are that it is quite expensive for a small shop, and it uses the point and click interface which makes knocking up an application easy, but maintaining that said app a nightmare, especially if you have to maintain someone else's code. Another RAD option could be Python, with bindings for one of the cross platform GUI frameworks. There is wxPython and PyQt but I've never used Python so I can't say anything here.

Hope that helps you.

Depending on what you want to do (for me this is okay) you could write in Objective-C and compile it on windows with the GCC complier. You can get a win version of the compiler from WebObjects.

About Java,
Features added to Cocoa in Mac OS X versions later than 10.4 will not be added to the Cocoa-Java programming interface. Therefore, you should develop Cocoa applications using Objective-C to take advantage of existing and upcoming Cocoa features.
Which is a shame, I can't see the point in this move? (read here) At least they are not axing it completely.