We ♥ the Web. We ♥ Flash. We ♥ HTML5. We ♥ Authoring Code Only Once. We ♥ All Devices and Platforms. We ♥ Our 3 Million Developers. We ♥ Freedom of Choice.
That's the greeting on www.adobe.com right now. With the conflict that has been escalating between Apple and Adobe many of us have had to think about Flash's place in the world. I myself have repeatedly come down on the side of supporting Flash as a development platform.
I know there are many people out there who see Flash as just another way to cruft up web pages with obnoxious advertisements and for that reason alone would gladly see flash die. But we really can't fault a platform for the way people use it can we? There are black hat hackers out there who make trojans and malware using C and we don't blame the language for that do we?
The coming of HTML5 with its support for the video tag and canvas tag has been hailed as a death blow for Flash, but is it true?
One of the biggest uses of Flash today is for video. Sites like YouTube use it to serve up countless hours of streaming video. The reason why it works is that the Flash player whether running on Windows, Mac, Linux or something more exotic, is guaranteed to have support for specific codecs. This means you can encode your video once and be reasonably sure it is going to play everywhere. HTML5 video tags introduce something interesting in that the video tag doesn't specify what codecs or containers should be used. This means that you could end up with a situation were Safari can play Quick Time videos, Firefox will only play Vorbis, and Internet Explorer only plays Windows Media. I'm not saying that exact situation will come up, but something like it where different browsers have different rendering capabilities can and is already happening. Open Source advocates are avoiding support for certain video codecs because of patents and licensing restrictions. Imagine if you will a world where you couldn't be sure if the browser supported JPEG images and you had to use agent strings to determine if you should send a JPEG or PNG to the browser. Its an unimaginable horror, but that's where we are heading with video. Publishers of video on the web may be looking at supporting several different video types to cover all the popular web browsers. OK, I may exaggerate a little and mix in a little FUD. However I know that if I were putting video on the web and could simply go with Flash video and hit 99% of the target market thats a pretty simple choice. I don't really expect the dust around the HTML video tag to settle until the specs for HTML 7 come out.
So as a developer I find Flash pretty attractive in that its functionality is pretty consistent across platforms. It doesn't require me to publish my source code if I don't want to. Its very likely to already be installed on the average users device. Sure I could write my client in Mono and get cross platform abilities but I would still have to ask the average user to download, install and configure Mono to play my game. That issue goes away with flash.
Personally considering all of the above, that in general flash is a good thing. Clearly Apple's fight against Flash is not about usability or features. Flash provides these to end users in making it simple for them to receive content, and it provides to developers by giving them a simple way to target a wide audience. That means that Apple's fight is really all about control.
Remember Steve Ballmer chanting "Developers! Developers! Developers!"? While we like to laugh at him for being so excitable, there was an important point being made. What makes Windows popular is that it has an enormous library of programs that you can run on it, and the way for Microsoft to keep Windows popular is to keep developers writing code that runs on Windows. Its no coincidence that Microsoft gives away free licenses to Visual Studio. They want developers to make more Windows only applications.
To some extent Apple knows this. One of their most well know advertising campaigns for the iPhone is 'There's an App for That.' Its not iPhone OS that makes the iPhone useful, its all the Applications for iPhone OS that make an iPhone useful. By making the rules for iPhone and iPad development such that they require the use of certain tools to make iPhone OS apps, Apple is giving a raw deal to developers. Its a dangerous game they are playing. They are counting on the appeal and public image of iPhone OS devices to draw developers in the hopes that it will result in more iPhoneOS only applications.
Personally I've been trying very hard to make my code cross platform. When Mono Touch was still an option for iPhone development I was pretty excited by it, but now I have no intention of writing code for the iPhone. I can't speak for other developers but for me, Apple has actually driven me from their platform instead of attracting me to it.
I'm done bashing Apple for the moment. Now let me tell you what Adobe is doing wrong.
As I have mentioned in previous blogs, I've been working on getting my ASP.Net webserivce running in Mono on Linux. I recently succeeded at that goal, and I now have the ability to develop that ASP.Net code in Visual Studio or MonoDevelop. I can now run that code on Windows and IIS or Linux and Apache(Mod_Mono). This was a pretty big deal for me because I'd been meaning to get away from developing exclusively for Windows for at least 10 years but I never seemed to get around to it. To be fair I still write Windows code at my day job, but I don't have much control over that. With the server side of things running on a fully open source platform, over the last week or so I've had my eyes on getting client development off Windows.
I've been writing the client side code for my Browser MMO in Flash, and in an earlier post I explained why I choose Flash. When I made that decision I wasn't really thinking about developing the client code on something other than Windows. I was thinking more about what would be good for my players and less about what would be good for me as a developer. I wasn't too concerned.
Now I have this nice new Linux OS installed and I would prefer not be switching back and forth into Windows to use certain tools. I've done pretty well finding alternative tools when available and even getting some of my favorite tools to run in Wine allowing me to stay in Linux for most everything. Except one kinda major thing: Flex Builder (Flash Builder now).
For those that don't know Flex Builder is the IDE that Adobe made for writing Flex Applications in. Rather than build there own IDE fro scratch they did something sensible, The got their hands on Eclipse and modified it to suit their needs. Eclipse is a cross platform IDE written in Java. Its really more like a Development platform than a traditional IDE because it can be combined with endless plug-ins to make it function with whatever language and tools you want. Basically all adobe did was create the plug-ins needed for Eclipse to allow for Flex programming.
One of the huge advantages of Java is that it really does allow things to be run just about anywhere (except of course the iPhone). So by design the Eclipse programming environment runs anywhere that Java does. And since eclipse plug-ins are also written in Java they should run anywhere too. By extension Flex Builder should also be pretty much all Java code and should run anywhere. You can probably guess by now that Flex Builder does not run on Linux. To be fair it does sorta run on Linux, You can force the windows installation to run under Wine, but it crashes all the time. You could also run the unsupported Alpha version from adobe that lacks key features that prevent it from being useful the graphical layout editor (OK I might be able to live without that) and the Web Services tool for creating client code for connecting to a web service (This I do use frequently). So Flex builder does run on Linux but doesn't offer significant usability over a plain text editor.
Like Apple, Adobe is also missing the point of Ballmer's "Developers! Developers! Developers!" chant. While its hard to know exactly what percentage of desktop computers run Linux it is pretty easy to know that developers are more likely to Linux than the average end user. Secondly if someone is developing for Flash, they probably have at least heard of cross platform and may even test their product on other operating systems. I would confidently guess there are just as many if not more developers using Linux as there are Developers using Macs. Out of my personal pool of friends who write code well more than half are using Linux with Windows in second, and only one uses a Mac. So Adobe, why do you have a Mac version of Flex Builder, but not a Linux version? Since Flex is a development tool Adobe should be looking at OS usage among developers and not OS usage among the general population.
To add insult to injury Adobe started with cross platform Eclipse and added god knows what to it to make it non-cross platform. From a programming perspective that represents a colossal $@%&-up on their part.
The only other explanation I can come up with is that they don't want Microsoft and Apple breathing down their neck for creating Development tools for Linux and are deliberately doing this. But that seems a too unlikely to be true.
So going back to the greeting on Adobe's website: "We ♥ All Devices and Platforms. We ♥ Our 3 Million Developers." I don't really think that's true. If it were then you would be listening to your developers when they say the feature they most want is Flex Builder on Linux that works.
The end result for me is that I may have to put off my full time switch to Linux. While I won't be buying OS licenses to host my game, I may still be running Windows to develop the client for the foreseeable future which is a huge disappointment, and will cause me to think twice before targeting Flash again.Personally I am very disappointed in both Apple and Adobe for they way they treat developers. For all of Microsoft's faults they really do everything they can to make writing code for Windows attractive, and that is something they both should learn from.