In 4.0 Apple SDK preview Apple dropped a bomshell on Adobe - with an addition to the license agreement they prevented applications that are not natively designed and coded for iPhone from being built - included in this is features such as Adobe's Flash -> iPhone compiler.
Adobe have a large number of passionate fans - from the armies of developers who make their living from Adobe's tools, through to some of the large media brands that use Adobe's tools - including both Condé Nast and New York Times who have explored (with Adobe's help) creating cross platform applications that can deliver to the iPhone and iPad.
Luckily for us observers we are able to watch a a battle play out between two competing vendors - in the "integrated hardware platform" corner - is Apple, with the iPhone OS platform and various hardware variants (iPhone, iPod Touch, iPad). On the "horizontal software platform" side is Adobe - with the hardware independent AIR platform.
The IT industry has seen this movie play out a few times some examples include
- Proprietary mainframes vs a loose collection of standards "Unix" (the loose collection of standards in Unix won - no single company reaping the rewards)
- Desktop hardware vs software OS (Microsoft won with a proprietary software stack)
- Microsoft vs Netscape in the web browser wars (the loose collection of W3C standards + plugins won here)
There isn't always a clear "right" way to do things here - no matter how much standards avocates, or CEOs of proprietary stack vendors might hope there is - each solution has both advantages and disadvantages.
We can simplify the choices down to two options
- Do I go for reach, at the lowest cost I can achieve per platform?
or
- Do I deliver individuals the best possible experience on the platform they have chosen to use?
For the mobile phone industry there is an answer to each of these - for reach then the web browser gives the best solution - developing for the web has big advantages in speed of deployment, analytics and maintenance. There are some compromises in the functionality that can be achieved - but as Google are adept at demonstrating, web solutions can come very close to native application solutions.
Of course very close isn't another way of saying not quite as good - and this is the reality - native applications will always be able to be slightly better than a web application can be - they have more access to device APIs, lower level access to the hardware, and can both control every aspect of the screen and navigation, and also offer user interface experiences that go beyond what the user would expect in a web browser. So if your goal is to create the best possible experience - then a native application will always be able to win when competing with a web application.
So what of runtimes like Adobe AIR? Don't they offer the best of both worlds? Unfortunately not - whatever the runtime is, whether it's AIR, Java, or a cross compiled natively executed framework like Qt - you are still a step removed from the underlying native APIs, and subject to a set of additional restrictions. In many cases these restrictions are worth the compromise - the speed and low cost of development makes it worthwhile.
A question facing any framework or runtime today is this what is it possible to create using my runtime that would be impractical as a native development?
There are specialised runtimes that achieve this - an obvious candidate is Unity a framework for creating 3D games. While these could be created as native code - the effort is best spent in the mechanics and appearance of the game graphics, not the (common) underlying 3D framework.
So what conclusion do we draw on the fight between Apple and Adobe around support for Flash applications on the iPhone? Is it possible to create something using Flash for the iPhone that would be impractical as a native development? No. Flash was successful as it enabled web developers to create things on the web that were impossible using any other technology. This same advantage doesn't exist in the application space. In fact I'd go further than this:
Adobe AIR is the biggest strategic mistake that Adobe has made in the last 4 years
By choosing to devote resource to AIR and compete in the application space Adobe has lost focus on Flash and it's advantages in the web technologies space, and moved into competing on desktop applications - an area where Adobe has no significant strategic advantage.
Fortunately for Adobe they have partners like Apple able to give them a pointer in the right direction - drop the focus on applications, and refocus on web technologies - embrace HTML5 support in your tools, and move all the engineering effort currently deployed on AIR to focus again on Flash and extending what can be delivered on the web browser.