What Should Be The Platform of Your Next Application?
- Simple deployment: Nothing beats pure webapps in this regard. Having a webapp available everywhere is cool, too.
- Extensibility: For larger applications, if you want someone to code new functionality, doing it as a plugin is very elegant.
- Development tools: With inadequate tools, implementing and maintaining an application becomes much more work. It should be easy to find one's way around a platform and source code should be easy to change and navigate.
- Eclipse: I love its GUI (which is remarkably clean considering how much functionality it has), but am not too fond of its innards. They always felt harder to understand than necessary, slightly overengineered, and include anti-patterns that make it difficult to discover things (see “Eclipse 4 wishes: simplification first, then innovation”). I'm also not sure that the pride of amassing frameworks serves Eclipse well. This leads to design by committee, instead of a single tight overarching vision. Lastly, Eclipse seems to pin its hopes for web enabledness on RAP (or something like it). What I've seen so far of RAP did not instill confidence: It is slow, its UI awkward, and it will never work in offline mode.
- OSGi: Very useful and powerful if you need extensible software. Still a bit complex but that will hopefully change as it finds its way into the Java language.
- Trephine: Brings desktop features such as the clipboard or file system access to web applications via a small signed Java applet.
- Bespin: Ajax application that draws its own UI via the canvas API (see picture below). Very impressive and indicative of web browsers soon being superior deployment platforms. I would also assume that by being canvas-based, rendering and UI differences between browsers are less of an issue.
So where does that leave one when writing the next application that should be web-deployable? I see the following options:
- GWT plus
- canvas-based browser UI: would be a perfect solution for me (see “Project Bespin and the Future of Web UI According to Google”).
- GWT + XUL: would be Firefox-only, but still kind of cool. Last I checked, there was nothing usable out there apart from a few experiments.
- Running GWT on OSGi could deliver extensibility, but I'm not sure how well the client side could be extended, since GWT cannot currently dynamically instantiate classes. GWT.create() only works statically. That means that plugins cannot contribute code to the client side of a GWT application.
- Applets, Flex, Silverlight: either don't integrate well with web browsers or have inadequate development tools or don't integrate well with web servers (meaning that it is useful if server and client can share data structures easily, having to define the same class and/or tool functions twice is unnecessary overhead).
- Newspeak: Takes discoverability and clean but powerful language design to a whole new level.
- Mobile webapps: When it comes to mobile devices, the predominant browser is Webkit, so it is really easy to write cross-platform applications as webapps there. Google leads the way via its mobile versions of GMail and GCal.
Am I missing something? Did I misjudge some of the technologies?