Your 24" monitor (60.96cm for readers who live in the EU) with its 1920x1200 resolution shows 30x more pixels than the small smart phone with its 320x240 screen. Your strategy should allow for as much reuse as possible. Here are the current options as seen through my personal bias:
The base line for this approach is support for IE6 which severely limits the platform. If you don't use any of the toolkits you are also hampered by little incompatibilities between the browsers (Quirx mode anyone). Further challenges are (not complete): the lack of local storage other than cookies, no native media capabilities and no uniform extension model. Clearly a legacy platform. This highlights a big dilemma for "thin clients": The browser available on the workstation does matter and the idea of "everything on the server" stays a pipe dream. While all you need to develop in HTML is gEdit (notepad if you are on Windows), you want to use a powerful IDE and a strong debugger
- HTML5: This includes CSS3 and a host of new capabilities like <canvas> or <video>. The most prominent representative of HTML5 execution environment is WebKit, the engine powering Konqueror, Safari, Chrome and others. Webkit is also used in iPhone, iPod/Pad, Android and Nokia's Symbian S60 platforms. So WebKit is well positioned for both mobile and PC space. Firefox and Opera also support HTML5. HTML5 provides local storage which let Google to abandon their own toolkit for that (Google Gears). Notably absent from full support for HTML5 is Microsoft's Internet Explorer 8.
HTML5 is still a very young standard, so some implementation hiccups can be expected (just check for video support) across browsers. Using the same toolkits as mentioned above, you have a save strategy going forward. What HTML5 currently doesn't resolve is cross domain aggregation, this stays a server side task. IBM has committed to HTML5 (not only) as part of Project Vulcan. IBM also spend quite some effort to design a style guide (called IBM OneUI) to ease design decisions for developers. What HTML and HTML5 don't define is the communication between individual modules. Here independent specifications like iWidgets (Part of OpenSocial) need to fill that gap
- dotNet / Silverlight: Realizing the limitations of HTML and the imminent loss of The API War Microsoft positions dotNet and its descendant Silverlight as application platform (this is not about ASP.net, that's server technology). dotNet clients can read/write server data via HTTP and qualify as "Rich Clients". They also can run off an URL. Still they were perceived as "old school", so Silverlight adds the capability to start inside a browser and break out to take full advantage of the dotNet framework while coding HTML and CSS. The dotNet framework is considered complete and mature (albeit with little regard for backward compatibility). While Microsoft's Silverlight supports Mac and via Moonlight even Linux, it is seen as "Microsoft proprietary" and has gained limited popularity. Most notably absent is support for mobile platforms other than Windows Mobile and there it is a version behind. Support for Nokia S60 had been announced, but look for yourself. You develop Silverlight applications in Microsoft Visual Studio, Eclipse or MonoDevelop. Mono also has branch of their tool for the iPhone/iPad called MonoTouch (but not for Androd or Symbian S60)
- Java / JavaFX:
From the beginning Java was able to run via the network; Java applets in the browser and Java Web Start from the OS/Command Line/Shortcut. While it looked like a sure winner, creating Java UIs turned out to be somewhere between clumsy to outright painful. Several attempts (Matisse, Thinlets or XUL) didn't get very far, so SUN created JavaFX as direct response to Silverlight and AIR. JavaFX takes advantage of an existing JVM (which needs to be current). JavaFX has been seen on Android mobiles as demo, but is absent from Apple or Symbian (for now?). You develop JavaFX using your favorite Java IDE (Netbeans or Eclipse)
- Eclipse / Lotus Expeditor:
Eclipse started as IBM sponsored development platform. Very early it also was used as platform for application development and since Eclipse version 3 the Rich Client Platform is a top level project of the Eclipse foundation. Eclipse is going one step further that all the other platforms. It prescribes a certain development model. Individual parts of a UI are views and editors that are combined into perspectives that form a UI. Perspectives can be pre-defined or user created. A mechanism how components call each other and/or depend on each other allows to compose applications in a very modular fashion. A number of Case Studies highlight the concept and advantages. Eclipse RCP is Java centric but allows the use of an embedded browser (e.g. XULRunner, the Mozilla engine) or other languages. Eclipse RCP comes with a rather steep learning curve.
IBM extended the Eclipse RCP platform with Lotus Expeditor. It adds to RCP standard capabilities like remote management, an account API, local SQL database (DB/2 Anyplace), encryption, web and Portal container (so you can run your HTML5 applications locally), synchronization and more. Expeditor is available for desktops (Win/Linux/Mac) and some mobile devices (it is absent from Apple/Android and limited on the other platforms e.g. no Portlet container).
Its capability to use Portal like wires to link properties and methods of components to composite applications are key for successful enterprise integration clients (when you have to reuse existing assets). With the help of OpenSpan one even can integrate legacy applications including defining wires to other modules. So the big differentiator is the component diversity Expeditor allows you to use. The platforms mentioned above allow you to do whatever you want, as long as you stick to the platform's language and single approach.
Expeditor on the other hand prescribes quite some of the UI (Menu, Toolbar, Perspectives, Sidebar) and module communication (Property Broker) but allows to mix and match what(ever) you have. Also, other than the platforms mentioned above, Expeditor is not free, but needs to be licensed (a potential show stopper for wide public adoption, but a common pratice for extensions to a base platform) or acquired (partly) with one of the IBM Expeditor applications: Lotus Notes, Lotus Sametime or Lotus Symphony. Expeditor clients can be remotely administrated, including role based deployments, from Websphere Portal, Lotus Domino or an Expeditor server. Expeditor has an unique capability to create mashups across domain and technology boundaries. HTML can be mixed with Swing, SWT and Portlets. Classic Notes components can be linked to Symphony documents and two totally unrelated web sited (of different security context) can be matched together to feed e.g. a spreadsheet. All this includes the ability to work offline or render the UI locally but work with remote data using a large array of communication options like HTTP, MQ, remote Portlets etc. Even communication via terminal commands (e.g. 3270 or 5250) is possible.
It might initially feels as slick and pretty, but allows real world application integration, online and offline. But as we know with great powers
come great responsibilitiescomes a learning curve which disqualifies RCP/Expeditor for the casual developer. For the less casual there is the Composite Applications wiki. RCP or Expeditor applications are developed in Eclipse (surprise, surprise) using the Expeditor Toolkit. You could extend Eclipse using RCP Developer, IBM Rational Application Developer, IBM Lotus Widget Factory (part of Lotus Mashups) or WebSphere Portlet Factory. Of course on of the biggest challenges (just see the lenght of this list item compared to the others) is to explain Expeditor in simple terms.
Update: Found a nice tutorial how to use Web UI in Eclipse applications.
As usual YMMV.