Flash is dead. Long live Flash!
Congratulations Adobe, you've broken my writing hiatus. I saw what you did, and damnit, the internet needs my opinion! This week saw three bombs dropped on the Flash community (and apparently most of the people working in Adobe itself). Much has been said on all subjects, so I'm only going to focus on what this means if you're using Flash for game dev.
I'm going to ignore the Flash Professional news; it's mostly some people were laid off and they're currently focusing on cleaning up the code base (hopefully no more random crashes), and adding in features for Starling/HTML5/AIR. Rumours took it over and blew it out of proportion.
Flash Player Mobile
The biggest announcement was that Adobe are discontinuing Flash Player for mobile. I can see why they'd do it, though it makes me quite sad. In terms of dev work, how many people were actively targeting FP on mobile? Starting with Flash Player Lite, the experience was always pretty bad and quite gimped. Once 10.1 came along on modern smartphones, it actually became feasible to run Flash content on a phone. In reality, this didn't result in an explosion of web/mobile hybrid projects. For the most part, we couldn't really care, though we could now start to disprove all the speed/memory hog issues that have dogged Flash since Steve Jobs decided to grace the world with his thoughts.
So why am I sad? Ever since the smartphone explosion, one of the things setting iOS apart from the rest was that it didn't support Flash. If you were a fan of Apple, this didn't matter; you believed that Flash didn't have a place in the modern web, or at least the mobile one. The thing is, once you go from browsing on an iPhone/iPad, to browsing on something like the PlayBook, you actually do realise that you're missing out.
When it was just iOS forcing this experience on its users, we could say that what was happening was because Apple were blocking Flash, not that your phone wasn't capable. Now that Flash Player is no longer available (unless a vendor decides to take it upon themselves to ship it - and let's face it, that's not exactly likely), Adobe themselves are sending out the message that Flash doesn't belong on the mobile web. As more people are using phones or tablets in their browsing, this will start to bleed over to Flash doesn't belong on the web full stop. Which is a shame, as HTML5 isn't ready to take up the mantle left behind.
As to why Adobe would announce this now, I can only imagine that they saw that Flash would never appear on iOS in Steve Jobs' lifetime. I would be surprised if they haven't contacted Tim Cook to see if he would allow it, and being denied again, decided to cut their losses. The cost of continuing development on so many handsets and chipsets just doesn't add up. Being blocked on such a large portion of the mobile web, they were in danger of losing their dominance while chasing a dream. Adobe are a multimedia creation company. If HTML5 is the platform of choice for the future web, they'd want to be the company leading it. Mike Chambers has a good post explaining some of the reasons behind the decision.
I've never been a big fan of Flex. Some of the way it's put together is just downright retarded, and I've been stung on more than one random bug, or method of working that's illogical. That said, I use the Flex SDK daily to make the games that mean I have a paycheck every month. From what I can understand, the next release, 4.6 will be the last from Adobe before it moves to open-source. How this is going to work out is unclear. Will they continue development but in a reduced capacity? Will they simply wipe their hands of the whole thing? Are the Air SDK and the Flex SDK counted as one and the same? Adobe have said that they're committed to continuing the development of AIR, so make of that what you will.
This is obviously more of a blow for enterprise developers, and the companies that have invested in using Flex. However, whether Flex goes open-source or not doesn't actually stop us from continuing to develop using the available SDKs. As long as the browser contains a Flash player plugin, all past and future development (using the same SDKs) will continue to work. It's still a massive blow to the stability of Flash. Why would a company commission a Flex tool when it can be discontinued at the drop of a hat? The same questions will now hang over AIR and Flash itself.
The future of Flash
Too many people have seized on the news, especially the discontinuation of Flash Player on mobile, to declare that Flash is dead. Again.
Lets look at the situation at it stands. There are 4 main pillars of Flash on the web:
- (Banner) Ads: Love 'em or hate 'em, ads on the web are here to stay. Flash will continue to provide smaller file sizes for ads than HTML5 unless Adobe really changes how they auto-generate that wonderful HTML/CSS code. Google also handily provide an auto-converter for AS2 SWFs (the bulk of banner ads).
- Websites: Unless you make sites for top-tier clients like car manufacturers or fashion houses, the day of the full Flash website should have died years ago, and for good reason.
- Video: HTML5 video players are starting to gain a footing, but there's still no consensus on a common format and the long-life of (sigh) IE will ensure that Flash will continue to be used to deliver video.
- Games: Flash has powered casual gaming on the web and will continue to do so. The latest additions to the player are there to gear it towards a higher-level gaming platform (multi-threading, Stage3D, mouselock, etc).
In the HTML5/Flash debate, HTML5 is steadily moving down that list and providing an alternative, and in some cases better, solution (as a side point, this would be a perfect example of disruption, if HTML5 were pushed by a single company). For games, I not worried. HTML5 isn't ready to take over as the platform of choice for the casual or serious gamer on the web. The main obstacles remain:
- Inconsistent/incomplete implementation of the different APIs across the browsers
- Still no unified way to play audio across all browsers
- Currently no way to bundle your game and all its files in one easily shared file (as Flash allows you to by embedding the different assets)
- Currently no way to stop your code from being hacked/stolen. The JS is obfusticated, not encryted. HTML5 Angry Birds was hacked immediately on release, needing only a simple JS snippet to be pasted into the URL bar to unlock everything.
- Currently no way to stop your assets from being ripped/stolen. While the SWF format isn't exactly Fort Knox, it requires a modicum of technical knowledge. HTML5 requires a simple exploration using the tools that come included with your browser. In an age where a ripped iPhone version of a successful Flash game can appear after mere weeks, simplifying that process isn't going to win any fans.
- Monetisation doesn't really exist for HTML5 games, so unless you're getting paid to do, or just like doing stuff for free, this is not a good thing.
PhotonStorm have a nice write-up on the realities of developing in Flash, HTML5 and Unity to clarify some of the points. Simply put, Flash remains the overwhelming favourite for doing a game that will be played in the browser.
As for apps, AIR has received a new focus as the tool to develop with and then compile to native code. Machinarium recently topped the iPad paid charts. This was a (great) game created using AIR. Is Flash dead? Hardly.
So what will I do?
Nothing. Adobe have decided to refocus their mobile strategy. Welcome to the realities of developing using a system controlled by one company. Apple change their policy whenever they feel like it and the soonest developers find out about it is when they get a flood of emails from angry customers saying that their app no longer works. Facebook changes their API every time I turn around. Try lurking around the Facebook dev forums, or StackExchange Facebook-related questions. Most questions go unanswered because you can't be definitive in your answer as it might have changed in the time since you've worked on it.
Will you have to learn a new language? Not if you don't want to, but you should. At the very least you'll improve as a developer. I've been with Flash since Flash Player 6. It was the first language I learned, and I can pretty much directly attribute every job I've ever had to it. Are all those years wasted? Hell no. Making a game will present the same problems no matter the language you use. The language is just a means of expressing your ideas into a form that people can play. ActionScript was just an easier starting route and it got rid of all the crap you have to worry about if you're working lower level (such as getting a render target, capturing input, even stuff like displaying an image or text in a non-mono-spaced font). If you make games, you're a games developer with x years experience.
For all of this, there's no rush. HTML5 is a big ball of hype (tell me if you thought one of these were HTML5), and I wouldn't recommend it for a game until it matures, which it won't for another few years. Until then, Flash will continue to reign in the browser and we'll make games for it as normal. For mobile, we'll use AIR, just as we have since we first had the ability. Flash will not suddenly drop into irrelevance, no matter how Adobe seems to mismanage it. In your spare time, learn a new language, which you should be doing anyway. HTML5 will perhaps take over from Flash one day as the platform of choice for online games, but it's not today.
Keep calm and carry on.
Update - Backgrounds!
I made a background to go with this post as it doesn't have any images. You can download the different sizes at the bottom of this post!