Alex Payne on Adobe AIR:
Humans are gifted with extremely sensitive bullshit detectors. The average computer user may not internalize the difference between an AIR app and a native app, but he knows when something doesn’t feel right or work correctly. Your tech-stunted uncle may not ever request a “native app” by name, but he’ll sure complain about his computer acting funny. People aren’t dumb.
You better believe that this isn’t just about AIR. As mobile apps become a mandatory part of doing business, more and more cross-platform mobile frameworks are cropping up. As with every cross-platform framework to date, only one in a pile of the resulting applications might even begin to pass for native. These apps just ain’t right, and people can tell.
I’ve said it before and I’ll say it again: cross-platform code is good, but it should never define the user interface.
Sure, it is technically possible for there to exist a good cross-platform user interface framework that bridges what can be bridged across platforms and offers unfettered access to the deal-breaking capabilities of each platform. But that’s never been what cross-platform GUI frameworks have been about – they have explicitly been about requiring as few tweaks as possible, instead of embracing their lot: to keep compatible what can be compatible, and then allow people to go hog wild with compliance to the same extent that writing against the platform itself would allow.
Mono gets this. Mono the base framework is ported everywhere (including the BCL), and they are offering Windows Forms, Moonlight, GTK#, MonoMac, MonoTouch and MonoDroid precisely to hook into the appropriate technology on each platform, with the two guiding lights “stay true to the API” and “if possible, optionally clothe the API in a layer that’s more appropriate to C#”.
Adobe doesn’t get this. Adobe is driven by the desire to get Flash everywhere. Adobe isn’t evil or clueless or malicious, they’re just standing in a corner surrounded by wet Flash with a half-full bucket of Flash, and they have to keep on painting. (As a natural progression of discovering the efficiency waste in running a virtual machine, vector graphics engine, JavaScript JIT and runtime on top of another set of similar components in mobile browsers, they are now also finally and with some vitriol pushing for HTML5 tools.)
But the interesting thing is that Flash is built on top of poking a hole in another technology and setting up your own universe. Flash has baked the two layers of backend and frontend together; no matter how good it gets, Flash technology will never be able to get to the place where Mono is today and where many enlightened developers that care about providing the right sort of experience want to go.
Flash only remains successful where correlating user experience isn’t that important or where it’s okay for it to take over the entire screen or act as if it’s the sole focus (games and video are immersive media and the Blackberry PlayBook is powered entirely by a Flash user interface much like Windows Phone 7 is all Silverlight).
Or, to sum it up in one pithy aphorism some dude on the Internet wrote: “Authenticity is key. Once you figure out how to fake that, you’re golden.“
Mono doesn’t require anyone to use a framework which contorts itself in able to look like, feel like and work like the platform’s user interface; on MonoTouch, a UITableView is a damn UITableView.
On the other hand, tools like Adobe AIR are enabling and requiring people to fake authenticity in the most crucial of layers. No wonder people aren’t happy about them.