I need to develop an app to work on Mac, Windows and *nix. The app will have to deal with pretty big amounts of data, and will have to display big graphs (so some 2d drawing is required). Should I go Java? wxWidgets? Develop a version for each platform? Oh, and just out of curiosity, if I wanted to build this app for the Web, how doable do you think it would be? Any suggestion is greatly appreciated.


+1  A: 

Swing is not bad, Java is a serious option. However, Swing does basically look like Swing on every operating system out there, even with the System Look and Feel. Its not going to look native no matter how hard you try.

Qt is a nice higher level C++ framework which, while not being native, does look fairly more native/decent on all systems. The widget model is great, and the functionality is complete (it even includes a full WebKit core for instance).

Yann Ramin
+5  A: 

A second vote for Java and Swing. The cross platform benefits reach far beyond the widgets, you will only need to maintain one set support libraries for all three platforms. Java also provides low level access to 2D drawing and has a number of mature graphing and charting libraries available.

I'm not saying that you can't get equivalent libraries for each platform, but there is a big difference between maintaining the delivery of three sets of libraries to their correct platforms and delivering one set of libraries to everything.

Edwin Buck
+1  A: 

I have used Eclipse RCP for my open source projects. The beauty of using this is your application UI will get the native look and feel, in another word, if you run your application in Windows 7, you get that transparent look and feel, if you run in Mac, you get the sleek looking curvy gray bar. It is certainly much much better than Swing in my opinion. I have also done Swing and AWT before too.

With Eclipse RCP, it is VERY easy to configure your application to run in different operating systems, just check what OS you need, and Eclipse RCP will generate the OS-specific application file(s) for you.

Tadaa.... :)


Some helpful links:-

Eclipse RCP website

A simple tutorial


I would also throw in Mono as an option.

  • C# is nice language to work with
  • There are several IDEs to chose from
  • many open source libraries like GTK# for graphics and even SIMD support which could be useful if you have lots of data to crunch and it lends itself to this kind of optimization.
  • Ability to develop a front end in ASP.NET or Moonlight for a richer user experience

If you are processing 'big' data and graphs, you probably want to be using OpenGL (since you want multi-platform and 'big' denotes a requirement for unconventional throughput; on the other hand you seem to think that the web can give you 'big' data - other than tiling techniques such as google maps/deep zoom for small views on a large dataset you don't really have bandwidth for 'big' data).

If you structure your application well, then as long as you write the data handling in portable, standard code and put most of your effort in the presentation into a cross-platform api, the amount of chrome you need round it can be easily abstracted and made platform specific and data-driven. Basically for each platform, create a gl context and put whatever menus you need around it - the amount of work to tweak a 'cross platform' solution so it looks OK on different platforms is not significantly less that the amount of work to create simple chrome on a few platforms - most of the effort is thought, not coding. This of course doesn't apply if you are using lots of widgets rather than being a view based application.

Pete Kirkham
I like this option of using opengl. Most of my application will be centered on the graph visualization, with very few widgets. Can anyone tell me why the -1 for this answer? Or any other comments on this suggestion?
+1  A: 

It depends. The thing for Java (and other crossplatform framworks) is that it doesn't look quite right on the Mac. Mac users, a cranky lot, will probably complain about the UI not looking and behaving right on their platform.

I've had a lot of experience getting wxWidgets apps looking "right" on the Mac, and in some cases working at all, and my rough figure is it takes 20% of your effort to get it working/feeling right on the Mac. But it can be done. (Even if you don't care about how your Mac users feel, still budget in some time to look at the Mac - and all the other platforms you deploy your wxWidgets app on - there will probably be bugs just running your app.

At the very least, with wxWidgets/other cross-platform-frameworks, you may run into cases where you need to use platform specific code (somewhere) to get the proper affect (you want to have a preference to launch your application at startup, for example: custom code).

There is a movement in the Mac programming community, although I'll admit it's not feasible in highly GUI intensive apps, is to write platform specific UIs for each platform. If your business logic is factored correctly, this should theoretically be possible. Say write your business logic in C++, then call that C++ from your .NET GUI, and call that C++ from your Cocoa UI on the Mac.

In one project I was on this separate UI approach would not have worked at all (the UI was just waaaayyy tooo big). On another project it might have worked, although the UI was really small.

@Pete Kirkham had suggested OpenGL: if it was a matter of doing a shell for each platform with (however you do an OpenGL view in each), you'd have your view code done for each platform too, if OpenGL is feasible in your case.

Then there's the the web. There's been some interesting work over the last few years on graphing in the web space. It could be that your needs (heavy data, graphing) outweigh what's available, or you have to worry about server deploying and (say) keeping up with heavy computation requests from your users. Could be that a web approach works very well - only one place to deploy the software, etc etc.

I think it all comes down to what framework has the graphing and data tools you need. wxWidgets has a graphing framework that comes to mind: wxPlot (and I think there's another one). There's also a sample, from NVIDIA, on how to use their Scene Graph SDK using wxWidgets. A platform specific application for the Mac could take use of Core Plot. There's various graphing frameworks for the web.

Or maybe QT or Mono have better graphing abilities, or some other thing that your application depends on, so you end up going that way.


The crucial thing here is if you can get away with making a web application so the user uses a browser, and your code runs on the server? If you can, then go for that. This will give you as much control as possible.

If not, the most painless way to do multiplatform apps is Java with Swing. All others require installation of extra software ("Oh, you need Python too?"), or making native libraries run ("OpenGL, ok you need this dll"). Keep it simple.

A Sun Demo about what can be done with Java2D is available at - play with the Applet and the Plugin links.

Thorbjørn Ravn Andersen