Ladies and Gentlemen, welcome to the world of the sad truth you didn't want to read. Today is the day to settle once and for all the moot debate around "HTML5 vs. Flash". The vicious debate that is clogging the intertubes is utterly pointless, yet still there's a big crowd of fundamentalists that don't get why.
Let's put some nails in the idiotic debate coffin.
The HTML5 spec won't be ready for consumption for at least another 2 years.
You avid HTML5 advocate, do you really have any idea on the actual HTML5 roadmap? Well, it's not until 2012 that it will reach Candidate status (an important milestone, which like in any software determines when all features are ready and only testing and minor bugs remain), and sometime around 2022 that it will be finally settled as an official W3C recommendation.
What this means: whatever code you write based on today's working draft version of the specs is not assured to work in 2012. Yes, there are lots of sections on "last call for comments" status, but that also means a strong argument on said sections could potentially introduce a major breaking change over any current concept code you already wrote.
Flash is a mature platform, HTML5 is just in its initial implementation phase.
Let's face it, like it or not browser vendors haven't yet adopted every part of the current working draft. There are sections that were sitting for over two years in the spec (more specific, the form elements) and those haven't been yet fully implemented by any vendor. Having more browsers in play also doesn't help, as even Chrome's WebKit version doesn't behave exactly the same as Safari's version in regards of HTML5 completeness (or accuracy, for that matter).
We have at least a good one full year before mainstream browsers implement enough of the HTML5 spec to call it a stable and usable implementation. You can check over on Wikipedia to see a fairly well updated list on current support for the various HTML5 components, or you can even check the working draft maintained by WHATWG where each point of the spec is accompanied by a tool-tip displaying the level of support provided by each major rendering engine.
Flash is made by a single vendor, HTML5 sees duplicate efforts by at least 5 different companies on at least 4 different platforms.
Love it or hate it, Adobe is the only single vendor responsible of developing the Flash player. Yes, it might fail miserably on Linux for some use cases or cause unexpected crashes in Mac OS X, but the behavior is consistent. This single unified implementation is what web developers are desperately looking for.
HTML5 doesn't bring anything new compared to current HTML4/XHTML in regards of consistency. We will still be suffering from testing our sites across different browsers, operating systems and mobile devices. HTML5 won't steal the world's smallest violin from us, we will still play it to the end of the days. Yes, consistency across vendors is getting better every day, yet you will never experience the same exact representation in every one of them (that will be the day we only have one single browser to rule them all).
And don't get me started about the <audio> and <video> tags issue, the h264 vs Theora (or AAC vs Vorbis) debate is like the <blink> vs <marquee> nightmare all over again. The only current solution with HTML5 is the same as with Flash: target a single platform and your creation will work flawlessly.
Flash is built as a multimedia and animation platform, HTML5 is a progressive enhancement over a content centric and descriptive language
In case the title is not self-explanatory, or you still don't get the point: HTML5 is *not* a gaming platform nor its design was centered around building banners or vectorial animations.
Want to cite Canvas? moot point, there are lots of options for layer compositing and using matrix transformations on bitmaps, yet it still falls short compared to Flash. Also notable are the lack of brightness/contrast/tint operations, and the lack of a native vector animation API.
Want to cite WebGL? another moot point, WebGL isn't anything but a glorified "native" plugin that's not different from running the Unity 3D plugin: a rectangular viewport embedded inside your browser that talks directly with your GPU and has nothing to do with content or information per-se. Writing stuff for WebGL isn't any different than writing it for a standalone OpenGL viewport.
Flash is good at what Flash does, HTML5 is good at what HTML does
You get it now? It's not like Flash is bundled with an IDE resembling an animation studio for nothing, or that the only reliable way to build a good piece of HTML code is by hand coding for arbitrary reasons. Both are strong at what they do, but you need to understand that <canvas>, <video>, <audio> and the likes are just the "nice to have" in HTML5 and not the core itself. Heck, HTML5 can't even access the system's camera/microphone so there's absolutely no way to develop sites like tinychat or justin.tv without requiring the end-user to install additional software to be able to communicate.
This issue even gets magnified in the iPhone/iPad world, where you can only distribute such kind of software via the app store. An update for your chat app could even take a month to reach your end users!
Yet again, don't fall in the trap of citing "framework X uses Canvas and has support for inverse kinematics" because you are back at square zero: depending on a third party vendor to add features/fix bugs so you can work on top of it.
Are you aware you are already suffering from this with the video tag? These two examples just show how the native browser implementation is so barebones that you have to build an entire wrapper around the object.
The Flash vs. HTML5 argument will implode after every Flash feature is ported into an HTML5/Canvas equivalent
So you don't like Flash Ads? say hello to iAd. As annoying as before, but you can't Flash-block or Ad-Block it as it can be served from within your very own DOM tree. Say hello to popunders with video, sound and flying colors.
Flash is not accessible? then let me know how your Canvas or WebGL piece is in any way more accessible.
Flash is a closed source platform? to certain extent, all the tools you will be using to "compete" against Flash will ultimately seem like closed source to you. You can only hack on so many projects at once. To make it worse, the browser upgrade cycle takes a lot more time than Flash and a buggy implementation might stay on the market for even 10 or more years (o hai IE6).
To quickly summarize the article, you must understand that Flash and HTML5 are completely different things. They share a lot of features, yet each technology remains so unique that both will stay in the market for many years to come. Neither the one-sided push from Apple nor the fanatic zealotry of HTML5 advocates will take Flash out of the market. But if one thing is certain, the days of using Flash for trivial tasks that *do* require accessibility are over. The bad side of Flash is not the product itself, it's developers misusing it for tasks it was not intended to do.
A follow up of this article has been posted on April 29th 2010.
The comments section for this post will remain closed in favor of moving the discussion to the new article.