Today Apple announced a version 4 their iPhone OS. It seems to answer most of the open issues relating to the platform. All sounded good.
But then, John Gruber over at Daring Fireball discovered a “hidden gem” in the new developer terms.
here they are:
3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).
I am sure most of you know that Apple is trying to kill Adobe’s Flash, so I won’t go into that here. But the point of this rule is clearly to prevent Adobe from selling their new Flash development tool that compiles Flash apps into native code for the iPhone. What Apple is saying here is that the only tool you can use to write iPhone apps is theirs. This, it seems to me, is bad enough. I don’t believe I have ever seen any company prescribe what tools you could use to compile on their hardware. But what Apple is saying here is even worse than that.
The key is where they say “Applications must be originally written in Objective-C, C, C++.”
Take a pause and think about what that “originally” really means.
Developers are not free to use any tools to help them. If there is some tool that converts some Pascal or, Ruby, or Java into Objective-C it is out of bounds, because then the code is not “originally” written in C. This is akin to telling people what kind of desk people sit at when they write software for the iPhone. Or perhaps what kind of music they listen to. Or what kind of clothes they should be wearing. This is *INSANE*.
Steve does not want to allow Adobe’s tools to be able to generate compiled code for the iPhone. But with this additional twist he doesn’t even want Adobe to be able to generate objective-C which is then compiled by *Apple’s* tools. The ridiculousness of specifying the manner in which one writes their code is hard to overstate.
My point is simple. It is perhaps reasonable to specify the nature of the programs that can be sold in the AppStore. It is not reasonable to specify how developers create those programs so long as the end result meets the specified end result criteria.
If you need to “originally” write your code in Swahili, while listening to Milli Vanilli, while reclining in a patch of mud, and then you need fifty oompa loompas to translate the Swahili into C, that is none of Steve Jobs fucking business. And the idea, which I am sure is actually the plan, that he will inspect application code to figure out what the “original” language is that the code was written in is just plain pathological.