I feel as though the author missed talking about Flex, which really took flash to the next level. It was short-lived, as it came a few years before the end of Flash-as-we-know-it when Steve Jobs decided to block it - but it was a great way to build sophisticated SPA's before the javascript ecosystem was able to catch up. Thanks Flash!
Adobe Flex really took things to the next level. AS3 is still one of my favorite programming languages, at least until it used mx components (I think that spark thing really messed it up). Everything was event driven, async, first time I learned about Bindings and 100% OO. I think AngularJS still can learn a few things from AS3 (like Binding event, etc). Yeah.. thanks flash, big time!
I taught an introductory UI programming course using Adobe Flex - very easy for beginners to pick up and start building functional UIs with minimal code complexity.
Too bad it isn't used more in the real world - it really is a fantastic prototyping tool.
it came a few years before the end of Flash-as-we-know-it when Steve Jobs decided to block it
I forgot about that. Does anyone have any info about this? I didn't pay much attention at the time, but in retrospect it seems like it was one of the main reasons everyone stopped using flash.
Did Adobe try to get Steve to pay a licensing fee, or was he just inherently against implementing flash?
The excuse Steve made at the time was that it was too CPU intensive to run flash. I'm not sure how true this was, except for the earliest iPhone models. I've always wondered what the real reasons were.
It was certainly a good decision in retrospect, but it's an interesting bit of history.
Beyond the security issues, Adobe was just terrible as a platform maintained. Flash was the largest source of crashes in every browser until they moved it to a separate process, there were endemic performance issues even in core features (e.g. video playback was significantly more CPU intensive, and general code was well behind native speed), and most of the toolchain was in a state of obvious neglect, from the library inconsistencies (e.g. fonts rendered differently in some controls in the standard library and many of the method/property names didn't match), to the wrong or missing documentation, the many crashing bugs in the IDE, and the debugger which couldn't even pause on a breakpoint reliably. Nothing ever got fixed because their resources went into new features but the support people would reliably ignore tickets until sending a message telling you that it might be fixed in the next paid upgrade - could you buy it and let them know?
Had Adobe shown even the slightest sign of responsibility it might have been a different call but at any point after maybe 2002 it was pretty obvious that you shouldn't depend on Flash because Adobe was just milking the customers.
At the point that Jobs wrote his lie filled "Thoughts on Flash" Flash Player was vastly more performant at HTML5y things like animations, video and music playing than doing it in the browser.
I'm not going to defend the quality of the flashplayer architecture and implementation (due to it's crapness) but it was perfectly fine performance wise - it was a 'resource hog' because of the terrible, terrible code that people wrote for punch the monkey flash apps.
At no point did I benchmark playback of H.264 in Flash being anywhere near native speed - huge deal on battery powered devices, or simply playing >15fps without dropping frames. WebM's software playback was roughly as slow but nobody used it and Google did optimize it over time, which is the kind of maintenance which Adobe was uninterested.
Similarly, the fact that Flash was competitive with IE5 is the problem: browser vendors invested heavily in making that platform faster and richer. Adobe executives thought they had a monopoly and did not.
Flash is a security nightmare. It's a 3rd party application that opens up the device up directly into the OS if compromised. Jobs blocked it because it would make iPhone vulnerable to attacks they couldn't control. I don't blame him for blocking it honestly, even though it meant we had totally change tech stacks.
The app store wasn't opened until just over a year after the original iphone release (a day before the 3GS was available). Initially, you were supposed to build "web 2.0" apps using the safari engine. Flash didn't work then either.
Yeah but certainly they were planning to launch an app store when Jobs penned his open letter on flash. My understanding is they just didn't have the app store and the sdk ready in time.
> Yeah but certainly they were planning to launch an app store when Jobs penned his open letter on flash.
That was almost two years after the opening of the app store, and almost three years after the release of the iphone. I'm unsure whether they really had a fully thought out app store strategy initially, or whether they stumbled into it sort of by accident. Even if an app store was planned, I'm not sure they really knew what to expect. I seem to recall them initially saying you didn't need native apps, and then finally realizing the demand was so great (and performance too poor with Safari) that they needed to open one so scrambled to do so. That may just be a narrative I latched onto and remember though...
This is correct. People were clamoring to write native apps, but Steve tried to deflect them by saying it'd introduce too many security problems. Carmack blasted him publicly, saying that if Apple can't figure out how to secure a unix-based OS then they were incompetent.
I wish I saved the pamphlet that Apple sent to developers during the iPhone 1 era. It was hilarious. It was all about how to use Safari to write webapps. They even highlighted how you could save a bookmark as an icon on your home screen so that your webapp launched like a native app. But of course it was just Safari.
I remember a while back (6 months? A year? two?) there was an interesting submission (well explained blog rant) about how saving webapps to the desktop/phone as apps was basically broken, and regressing, IIRC (I apparently didn't favorite it, and I can't seem to find the magic words for search to bring it up), Apple was a primary offender, but Google wasn't perfect either. If I'm remembering correctly, that's a big about face from their stated original intent.
This was such a poor go to argument from Flash developers (I was/am one of them). However in reality this wasn't just about revenue as many assumed (it's a tiny tiny tiny percentage of Apples turn over). The better argument was that Flash, even wrapped in a native container (cordova etc) was insecure, slower and out of their control. Forcing developers to use native toolkits and frameworks produced far better applications as a result.
That was once true but no longer. Apps in the store can now run interpreted code from anywhere, downloaded, typed in, or bundled with the app. However, they can't implement their own app store outside of Apple's.
I'm only going to discuss interpreted code. The operating system prevents the execution of any object code that isn't signed by the App Store. The only exceptions are system processes, like JavaScript just-in-time compilation performed by WebKit.
Let me go through the changes in section 3.3.2 of the Apple Developer Program License Agreement. I'm going to skip over some things, because I can't find copies of the very earliest agreements, and I haven't read every single one since.
iPhone SDK Agreement, revised 2008-10-20:
3.3.2 An Application may not itself install or launch other executable code
by any means, including without limitation through the use of a plug-in
architecture, calling other frameworks, other APIs or otherwise.
No interpreted code may be downloaded and used in an Application except for
code that is interpreted and run by Apple's Published APIs and built-in
interpreter(s).
This bans web browsers with custom engines that run JavaScript, Flash, or Java applets, and it also keeps out alternative app stores. You can display web pages that contain JavaScript, but they have to run inside of the WebKit framework. It seems to allow bundled scripts running on a custom interpreter.
In 2009-03-17, it was changed to this:
3.3.2 An Application may not itself install or launch other executable code
by any means, including without limitation through the use of a plug-in
architecture, calling other frameworks, other APIs or otherwise.
No interpreted code may be downloaded or used in an Application except for
code that is interpreted and run by Apple's Documented APIs and built-in
interpreter(s).
Now it says “downloaded OR used”, not AND. So this is even stronger, and prevents an app from containing any amount of interpreted code. It seems to ban lots of games that run an embedded scripting engine.
The iPhone Developer Program License Agreement, revised in 2010-06-07, says:
3.3.2 An Application may not itself install or launch other executable code
by any means, including without limitation through the use of a plug-in
architecture, calling other frameworks, other APIs or otherwise.
Unless otherwise approved by Apple in writing, no interpreted code may be
downloaded or used in an Application except for code that is interpreted
and run by Apple's Documented APIs and built-in interpreter(s).
Notwithstanding the foregoing, with Apple’s prior written consent, an
Application may use embedded interpreted code in a limited way if such use
is solely for providing minor features or functionality that are consistent
with the intended and advertised purpose of the Application.
Okay, so game scripts are now legal again, with permission.
A year later, iOS Developer Program License Agreement (2011-06-06):
3.3.2 An Application may not download or install executable code.
Interpreted code may only be used in an Application if all scripts, code
and interpreters are packaged in the Application and not downloaded. The
only exception to the foregoing is scripts and code downloaded and run by
Apple's built-in WebKit framework.
So now you don't have to ask permission to use bundled scripts. Also, they mention the WebKit framework specifically. Sometime later, iOS exposed JavaScriptCore and made it possible to run downloaded scripts that aren't embedded in a web page.
On June 5th of this year, the Apple Developer Program License Agreement (which applies to both the iOS and Mac App Stores) was revised to:
3.3.2 Except as set forth in the next paragraph, an Application may not
download or install executable code. Interpreted code may be downloaded to
an Application but only so long as such code: (a) does not change the
primary purpose of the Application by providing features or functionality
that are inconsistent with the intended and advertised purpose of the
Application as submitted to the App Store, (b) does not create a store or
storefront for other code or applications, and (c) does not bypass signing,
sandbox, or other security features of the OS.
An Application that is a programming environment intended for use in
learning how to program may download and run executable code so long as the
following requirements are met: (i) no more than 80 percent of the
Application’s viewing area or screen may be taken over with executable code,
except as otherwise permitted in the Documentation, (ii) the Application
must present a reasonably conspicuous indicator to the user within the
Application to indicate that the user is in a programming environment, (iii)
the Application must not create a store or storefront for other code or
applications, and (iv) the source code provided by the Application must be
completely viewable and editable by the user (e.g., no pre-compiled
libraries or frameworks may be included with the code downloaded).
So now downloaded scripts don't have to be JavaScript and don't have to run inside of Apple's interpreter. (The second paragraph doesn't even apply to iOS, because it's not even possible to execute unsigned code.) So now Google and Mozilla can rewrite their iOS web browsers to use their own Blink and Gecko engines, instead of merely wrapping WebKit, though the system will still prevent them from doing JIT compilation. Hell, they could even support Flash if they wanted to.
It's funny, but no one has seemed to notice this except for The Register.
I think the bad mobile perf argument was legit – android made a big deal of “hey, we’ll have flash, unlike iphone,” and then ended up dropping it too, when it performed badly and killed battery life.
In his biography, he didn't get along well with Adobe. That's the reason he did it. For all other technologies, Apple creates their own competing product. Why didn't they just do that for Flash (creation side and delivery side)?
The writing was already on the wall for 'applet' based web content I think. It was clear HTML/JS was going to take over on the Web, and Apple were trying to push native apps for as much as possible too.
Flash had already peaked and most people knew it. Apple just hastened its demise. (Also the performance was atrocious on the early Android phones that supported flash)
It was like when the Mac eliminated the floppy drive. Seen as gutsy (or arrogant) at the time, but no one really doubted that's where we were headed.
> Did Adobe try to get Steve to pay a licensing fee, or was he just inherently against implementing flash?
Aside from security issues others have mentioned, Early iPhones employed HTML5 as the only 3rd party app API: no flash, no java, not even native Objective C apps. The only reason Apple opened up the Cocoa API to 3rd party developers was because HTML at that time was insufficient for powerful offline experiences (only recently has tools like services workers made deploying offline apps via browser HTML possible). Many would argue Apple's exclusive embrace of modern HTML on its phone was pretty helpful in ensuring HTML5's success accross all platforms.