During this trip I had the opportunity to chat with a customer about bringing a complex financial desktop application to the web. For this type of application the options we look at are Flex
. All three technologies are capable of producing rich, desktop-like UIs. All are backed by software giants (Adobe, Google and Microsoft respectively.) A good team of developers could do the job with any of these technologies, so which is the best choice? To some degree, it depends on your team. If you are a Microsoft shop you are going to use Silverlight, Adobe guys will use Flex and Java guys will use GWT. But lets say you have a mix and you could go with any of them.
Flex and Silverlight take the VM approach. Rather than dealing with the shortcomings and variability of browsers, they use their own execution environment embedded in the browser. Flex uses the ubiquitous AVM2 (Flash runtime), which has about a 98% penetration rate and runs well on Windows, OS X and most Unix/Linux desktop environments. Silverlight uses the .NET CoreCRL, which currently has only about 25% penetration, but those numbers are increasing quickly. Silverlight runs well on Windows and reasonably well on OS X (a bit slow.) The Moonlight project
provides a Sliverlight port for Linux and Unix/X11 based systems but it lags behind the official releases.
Because Flex and Silverlight take a similar VM-based embedded approach they are easier to compare head to head. As a result of Flex's head start on Silverlight, it has a much larger and more robust set of UI controls. WinForms and Swing developers will find all the controls with which they are familiar. Only with the recent beta release of Silverlight 3 do developers get controls such as grids and trees out of the box. Because of the large selection of easily customized components, Flex apps are easy to build. Thanks to a large selection of excellent skins, its easy to make Flex apps look great.
Silverlight is the clear winner in terms of the VM. Silverlight's runtime was designed for application development and supports concepts such as threading. The current version of the AVM still shows signs of its origin as a runtime for Flash animations. It does not, for example, support threading. Silverlight applications can be developed in any .NET language, and the DLR provides the ability to run interpreted code in the client. The presence of an interpreter in the runtime provides an enormous amount of flexibility for features such as user scripting.
GWT allows you to write desktop-like web applications in Java and "compile" them into AJAX UIs. The compile step generates UIs optimized for every popular browser, which means your application will load very quickly, have good performance characteristics and be available to virtually everyone on the web. Google has done an excellent job of providing a solid core, and third party developers such as Ext JS are building impressive higher level widget libraries and skins
Thats it for now. I plan to write follow up posts as these technologies progress. I'm interested to hear which horse TechHuian's are backing and why.
- Design • Build • Localize | Web • Desktop • Mobile