The how and when of Adobe and Microsoft's Rich Internet Application technologies

I broke out certain things that people want to do with the Rich Intenet Application technologies from Microsoft and Adobe and talked about when you should look into each. Hopefully this gives a clearer picture of where the technologies overlap and some of the pluses and minuses behind each.

Now that Silverlight is being talked about, people seem to be comparing Apollo and Silverlight in the same posts. I think this stems from the fact that both are still alpha/beta and that the two technologies "cross the streams" into the other companies territory. For that they are significant, but still not in competition. To help clear things up, I've tried to create a guide for how and when you would want to use different RIA technologies from Adobe and Microsoft. Hopefully this clears up a bit of confusion about which technologies are "competing" and which aren't.

I want to build rich desktop applications.

Adobe's Apollo lets you build cross-platform desktop applications using the exact same code base for all of your deployments. It uses a combination of Flash and Ajax so that you can take your web skills and deploy desktop apps. However it doesn't tie as closely to the operating system as other technologies. You can't access devices from Apollo and right now the plan is not to allow execution of native code. Think of Apollo as a way to deploy applications that require a bigger sandbox than the browser (things like file system access and native windowing), but not full operating system features.

To build desktop applications for Windows, you use the next version of .NET, Windows Presentation Foundation (WPF). You can do pretty much anything with WPF that you can do with other "desktop" technologies, but it will only run on Windows. It offers hardware acceleration, 3D support and the full Common Language Runtime (CLR) so .NET developers can dive in and build desktop applications.

I want to build rich browser-based applications.

Adobe's Flash Player is the method of choice to build browser applications. It runs as a plugin in the browser and compiles down to a binary 'SWF' file that can be embedded in HTML pages. Flex 2 is a framework for the Flash Player which makes building Flash applications more developer friendly. It makes it easy to do things like binding and custom components. With Flash Player 9, speed was much improved so that rich, advanced applications can be delivered cross-platform (Windows, Mac and Linux) in the browser.

Microsoft has a couple of different options. Siverlight *sort of* allows you to build browser based applications, but not NEARLY to the level that Flex does. Silverlight provides some rich media capabilities to JavaScript, but doesn't yet have the kind of support for developers that WPF or Flex does (this may change based on news at MIX). It does have some cross-platform support however, and runs for browsers on Windows and Mac. The other option for Microsoft is to create Windows Presentation Foundation applications and then deploy them as XAML Browser Applications (XBAPs). You're still limited to Windows but you can use your WPF code and deploy it in the browser (though it won't have all the rights and access privileges of a regular WPF application).

I want to make my web application more interactive.

Go grab a copy of Flash CS3 and go to town. Flash is the standard for creating interactive experiences, has a lot of designer support, and the Flash Player is installed on 95% of machines. Using things like the Flash JavaScript Integration Kit will help you bring Flash functionality to your Ajax application and add a bit of interactivity or richness where you need it.

This seems to be the sweet spot for Silverlight right now. Silverlight plays nicely with Ajax and lets you leverage JavaScript to add interactivity. Using JavaScript, you can transverse the DOM of a Silverlight asset by using named references in JavaScript (full DOM parsing may be on the way). That's helpful for applications using Ajax that just want to add some vector graphics or some multimedia to spruce up and add features.

I want to produce and consume video on the web.

Consuming Flash video is done with the Flash Player, which nearly everyone has. To produce Flash video, you can encode it with the Flash IDE, or stream it with Flash Media Server. You can also use On2 Flix to encode other file formats into Flash video.

Silverlight's big story last week was the video support; it uses the VC-1 codec which means you can get Windows media running as seamlessly as Flash video for Windows and Mac. To encode files for Silverlight you can use Microsoft's Expression Media Encoder or third party tools. To stream it, you can use software that ships with Windows Server 2003.

I want tools that allow me to create rich experiences.

Right now, nothing beats Creative Suite 3 from Adobe. With the integration between Macromedia's tools and Adobe's, the suite is top notch and it's something designers and creative types already know and love.

Microsoft came out with Expression Studio, which isn't quite a competitor to Creative Suite, but there are overlaps. Expression Web competes with Dreamweaver, and Expression Design kind of competes with Illustrator. Expression Blend is kind of a hybrid of Flash and Fireworks, but is billed specifically as an "Interactive Designer" and Adobe doesn't have a product that directly competes.

Hopefully that clears it up a bit, and shows how you can use RIA technologies from Microsoft and Adobe for a specific task depending on what you need to do and who you need to reach. If you think I missed anything, or have some thoughts, let me know.