Flash Is a Right
Ian Bogost's recent article Flash is Not a Right highlights some new aspects of the debate about Apple's iPhoneOS development restrictions. I have a different opinion.
I understand Ian's pain as a teacher. Programmers who aren't curious, don't like to explore varied languages and paradigms, are doomed to rank-and-file roles. But this is secondary. The purpose of computing is to serve the needs of end users. But for this to happen, computing has to be a healthy industry: one that allows fair competition, rewards efficiency and quality - these are core values of our economic regime, and the reason behind many consumer protection laws.
Granted, not all platforms are like the PC; many require you to pay a developer fee, sign NDAs, adopt DRM technologies, abide to the vendor's certification and distribution channels, etc. These restrictions have been around since the dawn of computing, and developers generally don't have issues with reasonable terms. But I have no knowledge of a previous computing platform that would enforce the kinds of non-reasonable restrictions that Apple wants to enforce now.
I'm not saying that Apple should help people to use their preferred tools. I'm not asking Apple to OEM-install Adobe Flash Player; it's their product and they deal the deck. But if that deck seems to have some deuces to me, I should be free to use my aces - as long as I put up with the effort and cost, and do it within the behavioral rules imposed by the platform (i.e., only install unprivileged userland code; follow standards of security, reliability, UI guidelines, etc.).
Blocking high-level tools opens a huge can of worms that nobody is talking about: it creates artificial, unfair disadvantage for smaller developers. It's a plutocratic move, that favors huge companies and screws with small shops and indie developers. High-level programming languages and frameworks that create a layer over the raw platform are popular for several reasons. Portability is not the only reason; productivity is another huge reason too and it's even more important - Steve Jobs's Thoughts on Flash smartly avoids this issue. Multiplatform was never Flash's primary selling point; its popularity boomed even when the Mac was down (so Windows was the single desktop to matter). The major reason for Flash's adoption was, by far, features and productivity. Pure web browsers are now catching up with the features, but Flash still benefits from a powerful suite of design tools; simple validation & deployment; and trivial hosting.
Tools like Flash bring power and productivity for the masses. Apple can stop Flash; but they cannot stop all similar tools. Take any huge software company (e.g. Electronic Arts - a big iPhone game provider), and they have their own high-level platform that they rely on: frameworks, design tools, code generators. Even embedded languages and compilers like Lua. (The latter violates even the previous iPhoneOS terms, but Apple pretends to not see it.) They often use game engines too - very big components that actually become the real platform; most "application code" is written to the game engine's API, not to native APIs. Apple's new terms would certainly forbid that. Even if Apple wanted, they couldn't block the likes of EA to use high-level tools, because these may be in-house and not public, and cannot be detected without expensive reverse-engineering of the binaries.
Ian Bogost mentions game engines in a purely negative way - "same plain-vanilla experience (...) lowest-common denominator". Jobs complained that cross-platform tools may not provide full access to system. This is not necessarily true. MonoTouch enables full access to the OS APIs, and it's updated to new iPhoneOS SDKs within days. Others may just need extra work, e.g. a JVM supporting JNI. There's also "right tool for the job" - not all applications need every iPhoneOS feature; if Flash is good enough for your app, why not use it? And when it is not, it's your choice to either create a mediocre product, or use another tool. (If you make the first choice, Apple might reject your app because it's Trash - not because it's Flash. But they probably won't reject it for the former reason, as the absolute majority of mediocre apps in the AppStore shows; and that' fine too, we should just let the free market push bad products to the bottom of the heap.)
Some of the greatest games of all time were built on a reusable, portable game engine (Maniac Mansion anyone?). Yes, the most innovative games are often those that introduce a new engine - or at least a major revision (e.g., The Day of the Tentacle for SCUMM v4). But this happens mostly because there are only few opportunities for breakthrough innovations: a new smart algorithm or game concept; next-gen CPU or GPU - some lucky game will be first, and will be famous mostly because it was first. Also, games that use a common engine often step outside it, or customize the engine, for incremental innovation. The engine provides the 80% of common features for some game category and platform generation, stuff that's just stupid to rewrite for each title. While ancient games would access the video hardware directly, all current games will instead rely on a thick stack, from GPU microcode to low-level drivers to relatively high-level APIs like D3D and OpenGL. Yet Apple is not telling people to skip these layers and program the iPhone's PowerVR hardware directly. This illustrates the idiocy of opposing higher-level stacks. Multi-layer architectures and increasing abstraction are among the core foundations of Computer Science. Steve Jobs is basically asking us to ignore some of the most important best-practices of our profession, and this is Wrong. (Of course he wouldn't know better - Jobs has never written a "10 GOTO 10" program in his life - that's why I'm being a bit scholar here, just in case he reads me.)
(Just wrapping up on games, don't forget design and content; these play a major role to provide a unique experience. The majority of all good games don't have innovative coding, and don't milk the platform's utmost capacity. Tetris had amateur graphics even for 1984. To paraphrase Bill Clinton: It's the creativity, stupid.)
Apple's contempt for developers is way too blatant to not deserve revolt. Apple is a successful company because they have a strong, competent focus on end-users; this can only be lauded. But they have crossed the line when they handle developers with fascist manners - authoritarianism, interventionism, indoctrination. For Apple, developers are servile sharecroppers who should be grateful for profiting from the landlord's properties. Apple is ruling over factors that have no objective impact on application quality, such as programming language choice. They are manipulating their developer base, for their exclusive benefit - pushing Apple's agenda against Adobe and other competitors. This is ultimately dangerous even for Apple, that's losing its famed customer focus; end-users will not benefit from this business.
Programming to any platform in Flash - or C#, Java, whatever you like - is your right.