Thoughts About 3rd-party Platforms

There was a bit of an argument today between @otomeskhy, @iosebi and I about open letter by Steve Jobs about Adobe Flash. This inspired me to write this post.

Before you start reading please bare in mind, I’m reviewing only consumer software with user interface and human interaction involved.

The idea of cross-platform software is brilliant; ability to run same piece of software/code on any platform without changing it cool and funky… but only in theory and some very-rare exceptions which I assume exist, personally tho… I’ve never seen one.

User Experiance

All platforms do have (or must if they still don’t) user interface guidelines which developers must follow to make easy to understand and user-friendly software. This is absolutely critical when developing retail or even free consumer software. Thing is that all operating systems do not look familiar and therefore they have different guidelines and all of them are correct because of very obvious reason — they look and behave different. Task of making software with user interface which will follow all of those guidelines becomes impossible even in theory. Happily developer has two choices while developing such product: 1. Invent own “look and feel” or 2. implement just one existing guideline; sadly tho, neither of those will work because inventing bicycle is stupid and “very custom” UI will look and especially feel unfamiliar for OS user and implementing just one will work only on selected OS and will feel and look absolutely foreign in others. Of course you can say — “Let’s implement all of them and load OS specific UI elements and views”, but this breaks whole point of cross platform software and the correct answer to this sentences would be: — “Let’s write many different native OS versions for given application, it will feel native and perform much better”. In my mind only cross-OS platform today is Web, and it’s an only cross-platform thing which is open and not preparatory (HTML5, CSS3 and JavaScript). Neither Flash nor Java are anything close to open platform.

Native Feel

Cross platform applications are running on virtual machines which are there to separate running application from operating system they are running on. This means that application knows nothing about native OS or device it’s running unless VM provides that kind of information; happily, that’s what it does but level of support of those “pipes” and “tunnels” (or basically APIs) to native OS and hardware will never reach native APIs in terms of security, performance, response time, reliability, stability, (insert your IT word here, it will fit perfectly)… Same does refer to native looks of application, why should this application look different from other three-hundred and twenty-five all other applications from my Mac, PC or even iPhone? It should have same scroll-bars, buttons, checkboxes, drag-and-drop behavior, gestures, etc.

Performance

Native applications are just faster and much more reliable.

Why Flash Succeeded?

Simple. Flash was always closed platform developed and standardized in Macromedia and later in Adobe featuring great developer tools. HTML + CSS + Javascript on the other hand are completely open and controlled by a standards committee. Unfortunately web-browser developers thought that they have bigger brains that those people in committees and implemented those “standard” without following to those standards. Especially “clever” developers and architects were in Microsoft and Opera, and just because of fantastic business model which gave Microsoft Internet Explorer amazing popularity over the years HTML was progressing like a turtle. Flash on the other hand was only developed by Adobe as a 3rd party plug-in for all those browser which became a very good cross-browser rich media solution. Now tho, things are changing, even Microsoft now tries to respect and implement modern web-standards. Javascript pre-procesors are getting faster in modern browsers and everything media related is possible in HTML5 and it’s Javascript APIs, even complex 3D transformations and drawing.

Flash on the iPhone

As an iPhone developer I really do not want to see Flash applications on iPhone for several reasons:

  • iPhone, UI guideline violation. Endless “Look at my innovative UI” show-off, and every single one will be worse than’s native apps, because no developer will think and invest so much in completely new touch interface made for touch device like iPhone, and even if he/she will, it won’t feel native.
  • Poor performance. Have you seen how CoreAnimations works? No? Than take a look, Adobe will never invest such amount of resources in one framework only for iPhone, in fact it never did even for PCs and Macs for more than 12 years.
  • Battery power. Flash has serious performance problems with vector animations and drawing. I don’t mean that they don’t work — they do, but using a lot of processing power which is OK for PC, Mac or anything connected to power plug. When you are on battery power things do change dramatically, your on-board power management system tries to lower CPU power consumption to increase battery time and CPU struggles to handle such stress. Results are obvious: sluggish performance and very short battery time. (Apple reports Flash to decrease battery time up to 5 hours on iPad).

Future of the Web

HTML5 + CSS3 + Javascript, definitely. You can implement everything using those three what you can in Flash, only problem for this moment is cross browser compatibility, but that’s simply a matter of time.

Future of Third-party Platforms

I have no idea about that but what I can tell for sure is that natively written software are always much, much better than cross platform in any way. Feel free to argue in comments and make you point. And please write about cross platform software you use which is as good as native one. I really know no examples of such.