Apple Dev Program takes stand on nature of consciousness

April 8, 2010 on 8:49 pm | In Flex, Programming | 62 Comments

Yes, you read that correctly. Let me explain.

Today, Apple released a beta of their iPhone OS version 4.0; in order to access the release and start developing their applications for it, iPhone/iPad developers were required to accept the following restriction:

“3.3.1 … 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).”

This is a fascinating and wacky position. Much of the outrage over the above statement is coming from developers who would like to use tools such as Adobe Flash CS5’s iPhone packager, Unity and others to create applications — these tools produce intermediate translations from their own representation of an app into a form that is at some level compatible with Apple’s own standards. With this restriction, Apple appears to be attempting to outlaw the use of such tools, presumably to monopolize not only the ends but also the means of iPhone development. One can only speculate on the possible reasons: an Apple/Adobe vendetta-in-the-Valley, a mistaken belief that consistent developer tooling means a consistent user experience, a desire to control every aspect of the value chain.

Personally, I think the outrage should be over the metaphysical angle here, not the business angle. Apple is implicitly taking a position that apps are not “originally written” in the minds of developers, in the form of cognitive representations of problems and their solutions. They are taking a position that the brain is not a translation tool for mapping from these representations into C, Objective-C, or what have you. They are subscribing to the theory of a “ghost in the machine”, implying that at some point an app crosses some magical boundary from being an mental thing into a physical thing that is “written” in some definite programming language. They are maintaining this because, if they weren’t, every single iPhone app would violate their licensing agreement by virtue of the developer’s mind itself being a tool that produces Objective-C as an “intermediary result”. Apple may thus be the first company to bet the farm on Cartesian dualism.

If this seems like a really nerdy joke (which it could be), try a few thought experiments. What if Ben writes a Flash app, shows it to Amy, who codes it up in Objective-C, compiles it and submits it to Apple? Should it be rejected since it was not “originally written” in Objective-C? If you think Apple’s answer would be “no” — a good guess — then substitute Adobe’s iPhone Packager for Amy. Now should it be rejected according to the rules? What, at the end of the day, makes Amy different from a machine translation tool? (Personally, I’d rather hang out with Amy than with iPhone Packager, but that’s another story.)

You may be thinking that what makes Amy different is that she could at least in theory translate the idiom of the original application to the idiom of the iPhone, which would provide a better user experience. Maybe so — so let’s look at another example. What if Ben’s application is an adventure game, and he wishes to describe the behaviors of the game objects and rooms using a simple scripting language that is translated to C as part of the process of compiling his game. He’s not using Flash or Unity or anything like that. Coding game-behavior scripts in C is a pain in the butt, and Ben’s a better programmer than to waste his time on that. He’d rather create the ideal one-off translation tool for the job. Sorry, Ben — clause 3.3.1 says that your program must be “originally written” in C, not translated to it. Maybe you should hire Amy to translate your scripting language by hand, that might be acceptable (since Amy will be “writing”).

Doesn’t this start to seem like backward progress, rather than forward progress?

Programs aren’t “originally written” in any definite language, or in any definite location. Programs are encoded information that is contiguous and continuous with the information in our heads, and in the world. Programs are often generated by other programs and tools, to which the same difficulties in definition apply. My programs are originally written in the shower — at least according to my definition. We could engage in a long argument about whether these shower-programs are really “code” or not, but my main point is this: it seems silly for a company like Apple to take a definite position on exactly what “originally written” and “intermediary translation” mean. (They declined to define these terms in the agreement, of course.)

I leave you with a final quote from the license agreement:

“10.4 Press Releases and Other Publicity. You may not issue any press releases or make any other public statements regarding this Agreement, its terms and conditions, or the relationship of the parties without Apple’s express prior written approval, which may be withheld at Apple’s discretion.”

Oops, close call. Good thing I didn’t click “Accept”.



RSS feed for comments on this post. TrackBack URI

  1. I’ve met the iPhone Packager, and it’s quite a cutie, so Amy may have some competition there..

    One thought occurred to me, what if you write the app in Objective-C, and then re-write it in Flash, would that be ok, given that it was originally written in Objective-C?

    Comment by Colin Holgate — April 8, 2010 #

  2. Whew. I’m glad you cleared that up. I realized that all I have to do is write some Objective-C, then rewrite it in whatever language I want, and compile to iPhone. I should be safe since I “originally” wrote it in Objective-C. Sweet!


    Comment by iBrent — April 8, 2010 #

  3. Is the issue that an application must “start” as Objective-C or is it ok if it at some point just “passes through” an Objective-C state? What if I wrote an application that converted Flash/Actionscript to Objective-C and then compiled that to the iPhone app?

    Now what if I write it as Objective-C and convert it to Flash and then use the Flash packager to compiler it. In this scenario, it “started” as Objective-C but “passed through” Flash. Is that ok?

    Now what about applications that I have already purchased from the app store that were built with Flash? Is Apple going to somehow disable it? Are they going to prevent updates? If either is true then I want my money back.

    Comment by Rob — April 8, 2010 #

  4. Great post, Joe! Unbelievable to see how far this is going…

    Comment by didier — April 8, 2010 #

  5. “Now what about applications that I have already purchased from the app store that were built with Flash?” Well, James Eberhardt just tweaked today that his latest iPhone app that was created with a beta of Flash CS5 was just approved and added to the iTunes store this afternoon. So they haven’t taken a stance just yet. Also others have pointed out that this is the license agreement for the iPhone OS 4.0 and that no rules are being broken for any apps submitted right now under the iPhone OS 3.2 license agreement.

    Comment by Matthew Fabb — April 9, 2010 #

  6. Sorry, that should be James tweeted, not tweaked.

    Comment by Matthew Fabb — April 9, 2010 #

  7. haha, brilliant! If Apple actually enforces this I’m going to demand my $99 developer fee back. As should others, rightfully.

    Comment by Paul — April 9, 2010 #

  8. Nice thoughts on this.

    Comment by Scott Janousek — April 9, 2010 #

  9. Adobe should stop producing software for the Apple Mac. Considering it was Adobe that **made** Apple who they are today through their Suite of tools it’s just plain evil of Apple to justify where they are going with this one.

    Comment by Biffer — April 9, 2010 #

  10. (Personally, I’d rather hang out with Amy than with iPhone Packager, but that’s another story.)

    Why, thank you :).

    MPO is that this is not aimed at Adobe or any tool-maker. Instead, Apple wants to have complete control of the output of developers’ time if they are engaged in producing iPhone apps. The part that bothers them is that, if they decide not to put your app on the store or pull it, that you’re not completely sunk. You can take that same code and compile it for PC, Android, or whatever.

    I think anyone investing any time in making iPhone apps right now is nuts. They get to decide if your work is saleable at all, and can change that decision at any time.

    Comment by Amy Blankenship — April 9, 2010 #

  11. I think much of the confusion is over two possible readings of “originally”. This particular sentence makes more sense if you don’t interpret “originally” as “from or in the beginning”, but rather as “in a novel and inventive way”. In other words, Objective-C code must spring from the creative source of the idea, and not just an automated uncreative translation of that idea. Technically this doesn’t prejudge that a piece of software could be a creative source of ideas, but clearly Adobe’s translation framework is *not* an idea generator. If Amy were not working in a novel and inventive way, but instead just following a well-defined algorithm, then technically she would violate this license agreement as well.

    Whether you like these terms or not, I find your implication that cross-platform translation layers provide “a consistent user experience” laughable. While such a system is theoretically possible, history so far has only supported the notion that “cross-platform UI” has meant second-rate, at best. I’d prefer that Apple left the market to work this out for itself, but this new clause in the agreement will probably increase the average quality of apps in the App Store (possibly just by banning a lot of the crap). Given the huge number of apps available and the difficulty navigating the selection, I’d call that result a net positive for users.

    Comment by Rob — April 9, 2010 #

  12. “My programs are originally written in the shower.” – priceless! I totally agree with you, especially concerning the aspect of using computer programs to write other programs (Is using an editor to write code in Objective-C legal?). If Apple actually tries to prevent developers from raising the level of abstraction and using tools like code generators or cross compilers to make them more productive, the whole industry will laugh at Apple for trying to stop the idea of re-use. That’s just ridiculous. If they want to have their private war with Adobe, they should just write “you’re not allowed to have Flash on the iPhone.”

    Comment by Peter Friese — April 9, 2010 #

  13. It’s true that programming begins in the mind. But intangible things amount to almost nothing. The written code is what really matters. I think most of us are overreacting, and this is coming from me, with mostly a Flash development background. What’s wrong with using only Xcode? Is it really that inadequate and I’m just imagining all these great apps created with it installed in my iPhone right now? Is using a free tool like Xcode trampling on my freedom as a developer?

    Compare it with Nintendo’s development authorization process:

    At least with Xcode I can create programs in the comfort of my own home and be broke while doing it. I guess all this animosity only stems from an irrational and deep rooted hate of Apple as a brand and as a company and it’s not really helping us advance.

    Comment by Rico Zuñiga — April 9, 2010 #

  14. iPhone OS 4 SDK Licence Agreement Clause 3.3.1…

    For those of you living in a cave of some sort, the big tech news yesterday was the iPhone OS 4 announcement, and specifically a “small†change to the developer license agreement, in which Apple decided to say a big fu…

    Trackback by codemonkey uk from Hulver's site — April 9, 2010 #

  15. So, if I port my favourite scripting language (interpreter written in C) to iPhone, it is a C app, and then I can write my app logic in the scripting language, or at least prototype it rapidly, profile it, and decide what to bother optimising by writing in C/C++ and exposing as a scripting library. Sweet!

    (Yeah, I know, they’re alto trying to stop me binding their APIs into the scripting language and calling their APIs from the scripting language. Stupid. I could work around that, develop a Qt like model for interaction between app logic and UI, but I don’t want to.)

    Comment by john — April 9, 2010 #

  16. Hey…. this is realy a good point…

    But… is not more actual…

    Now, in this april 8 Apple (also know as jobs… :p) show the new iPhone OS4…

    In the midst of many innovations, he talked about the new Enterprise, which will share APPs via wireless, without being in the AppStore … this is undoubtedly a great opening.

    I imagine, of course, it will have its limitations. But for what seemed like … Unity with APP produce CS5 or Flash and distribute them via wireless is possible.


    Comment by Diney Bomfim — April 9, 2010 #

  17. *
    produces APPs with Flash CS5 or Unity and distribute them via wireless is possible.

    Comment by Diney Bomfim — April 9, 2010 #

  18. Rico, I think you’re wrong, I never hated Apple before, but I do now.

    Excellent post, btw.

    Comment by Marcus — April 9, 2010 #

  19. I choose Amy too, as the iPhone packager in CS5 has all of that baggage that goes with the Flash IDE. There are generations of family problems buried in that thing – only an alcoholic would have created something called “tell Target”. Shit, tell Target what? Liquor is cheaper in bulk at Costco anyway. Now, I may not know all of Amy’s baggage, but since she can write games in Objective-C, we would get along very well.

    Great post by the way.

    Comment by 8bitjeff — April 9, 2010 #

  20. It blows my mind that the inevitable reaction from the faithful to Apple’s totally bizarre policies on app development and deployment is “oh this just ensures better quality apps.”

    If you think even 50% of the apps in the app store are “good quality apps,” I’ve got a bridge to sell you. Hint: Sturgeon’s Law applies everywhere, especially in software.

    Comment by Brian — April 9, 2010 #

  21. What a joke! Can they really do that?

    Don’t they run the risk of incurring the wrath (and the sarcasm) of the Developer community?

    They last comment about the “no publicity” is the last straw…

    Comment by Vasudev Bhandarkar — April 9, 2010 #

  22. […] over this little clause in the new iPhone developer SDK terms is erupting all over the internet: 3.3.1 — Applications may only use Documented APIs in the manner prescribed […]

    Pingback by Tao Effect Blog » Blog Archive » Dear Apple: The iPhone deserves a better SDK — April 9, 2010 #

  23. or what about game engines where a portion of the code is written in something like lua? And if that were acceptable, what makes that any different from a javascript/whatever runtime?

    Comment by max justus — April 9, 2010 #

  24. Apple’s terms don’t have significant metaphysical implications, because “writing” isn’t a metaphysical event.

    Writing is a physical act of inscribing: I do it with a pen or a keyboard, but not merely with my mind in the shower.

    You could argue that your program was inscribed in a private language of thought, but that view is metaphysically questionable and, more to the point, no court or arbitrator would accept that view.

    Comment by Dan Fabulich — April 9, 2010 #

  25. I’m sorry to interrupt, but is there anything in the ToS that specifies what they call “C”, “C++”, and “Objective-C” ?

    If I ask, it’s because I just created in my garage a brand new language based on ActionScript, and I called it “C”, because, you know, C is after A, and the single letter is pretty cool. I’m not sure if they refer to _MY_ C language or any other C language.

    What also embarrasses me, is that I just had an idea for another great scripting language, and I’d like to call it “Objective-C”, because it’s far from being subjective, and it’s also based on my own C language. Is there any legal contraint to that ?

    Thanks guys for helping me understand all this legalese stuff!

    Comment by anon — April 9, 2010 #

  26. Rob: you are making the wrong assumption that programs written in some “other” language and then translated into iPhone object form (perhaps through an intermeduate machine-generated Objective-C form even) would also by necessity be using a cross-platform UI toolkit.

    That is not the case at all. Consider for instance these two possibilities, which are very real currently:

    1) One writes an app from scratch only for the iPhone. One writes it in C#, using MonoTouch, which provides bindings for the CocoaTouch API. Note that the CocoaTouch bindings are the only GUI API MonoTouch contains. No “emulation” of whatever other GUI toolkit is provided. The GUI is designed with Apple’s Interface Builder, which *is* the normal and documented way to do it when using MonoTouch.

    2) One writes the GUI parts of an app in Objective-C, and designs the GUI with Interface Builder. In addition, one uses a platform-independent library (containing no UI code at all) written in some other language (like, uh, Fortran) that can be compiled into iPhone object code. (OK, so maybe Fortran is a bit far-fetched, but you get the point.)

    Comment by tml — April 9, 2010 #

  27. Great post, Joe!

    I can also add that I don’t originally write any programs in an assembly language of a specific processor – my Java or ActionScript programs are converted into it automatically. There is always a middleman between myself and a processor.

    I like the analogy someone posted, “We won’t sell your MP3 song via iTunes Store cause it wasn’t recorded in GarageBand”.

    Comment by Yakov Fain — April 9, 2010 #

  28. I think that Gruber got it right…

    Comment by Lemontree — April 9, 2010 #

  29. Gruber didn’t get it right, that is the weakest argument ever.

    BTW, isn’t apple marching towards its own demize the more it tries to integrate HTML5 into its devices since it could mean “Apps” anywhere on any device without istore?

    Comment by byron miller — April 9, 2010 #

  30. Why don’t we all go ahead and code in 0’s and 1’s :). That would solve the problem.

    Comment by helebek — April 9, 2010 #

  31. As someone who has a side-interest in the metaphysics of computer programs, I have to disagree. Your point is that programs are originally written in the ‘language of thought’ before being translated into, say, Java or Objective C or whatever.

    This doesn’t fit with our use of the semantics of English. We say something like “I had an idea, then I wrote it down on paper”. Better yet: “I had a dream last night but didn’t write it down.” Well, under your interpretation of that sentence, it would always be false because to think something, you would have already written – that is, instantiated one or more sentence tokens in Thought Language. So you would have to say something like “I had a dream last night but didn’t translate it from my Thought Language into written English.” That is a bit of a mouthful, so we generally use the predicate “to write”. Whether you choose to think that “to write” is to translate from Thought Language into English or Python or whatever or not is your business. The fact is such a predicate can be used to describe what is going on.

    Now, without getting into mental problems, there is a metaphysical problem with defining a programming language. I’m in the middle of writing about this. The problem is just this: take the sentence “I ate many piece of candy”. It has a grammatical error. “I ate many pieces of candy” does not. This does not mean it is not in English, but just that it is an English sentence with a grammatical error.

    Some philosophers have tried to define a program (or a ‘program-script’ to use the term used by some philosophers of computing) as a valid string in a Turing complete language. Quite what is a language though? Imagine a language called “Liar’s C”. Liar’s C is just like C except that after some particular time T the compiler ignores all conditionals and just runs with the first available branch in if and switch statements. This is like the grue paradox: there is no way to know from the syntax whether or not the program is intended to be compiled with C or Liar’s C until after a particular date. It seems – for reasons I have yet to spell out in detail – that languages like Liar’s C may throw some hurdles up for attempts to define programs in terms of languages.

    Comment by Tom Morris — April 9, 2010 #

  32. Very interesting comment about “Liar’s C”. Apple should allow apps on the App Store written in that language, provided that they can prove that they actually are written in Liar’s C :)

    BTW, I’m not saying there is a mentalese “language of thought” that has internal tokens, etc. I’m aware of the many problems with that view. I’m just saying there is a mental state that contains in it the set of intentions and ideas that ultimately are expressed as the external tokens we call “code”, and that a developer’s arrival at this state is what many of us would consider the true “code writing” process, not the typing part.

    I’m further saying that this process itself can be an intermediate stage in a larger set of steps that begins with code in language A and ends in language B, rendering Apple’s proscription subject to all kinds of definitional craziness.

    Comment by joe — April 9, 2010 #

  33. I guess that means lex/bison are dead. So too are regular expression compilers (no ragel or re2c). Gambit scheme toast. Any library that was originally written in a non-C language and translated to C…no more. C macros should be outlawed too. They are not technically part of C, C++ or Objective-C. Antlr, is speared. Assembly is illegal too. Any interpretive code in your code is illegal.

    Where does this madness end?

    Comment by Objective Me — April 9, 2010 #

  34. Accepting your interpretation, then it would seem that even a native Objective C app targeting the Cocoa Touch API would be in violation if it was a port from an another language (like Java) and platform (like Android).

    Comment by eas — April 9, 2010 #

  35. Does this mean you can’t use Uml during the development process? That could be an improvement ;)

    Comment by Peter Mahlknecht — April 9, 2010 #

  36. […] is contiguous and continuous with the information in our heads, and in the world. ” … Joe Berkovitz on Apple’s restrictive development rules, making an Andy Clark-esque Extended Mi… (H/T […]

    Pingback by hyper-textual ontology » The Extended Mind — April 9, 2010 #

  37. “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’m confused, because C, C++, and Objective-C go through an intermediary translation to assembly and then object code before linking to the Documented APIs.

    It sounds like effectively you cannot write any applications for the iphone at all with this license!

    Comment by Noah — April 9, 2010 #

  38. I’m surprised to find myself defending Apple’s position. (At some level I know the defense is hogwash because all Apple really intends to do with these clauses is screw Adobe, but set that aside for the moment.)

    Let’s suppose you’re an art dealer selling the paintings of a famous artist. One day you discover that the artist has subcontracted his work to a sweatshop in China (to pick a place at random) which otherwise does t-shirt art, Elvis on black velvet and dogs playing poker. What will be the damage to your reputation when customers discover the means of production? There is actually a precedent for this: Most of Andy Warhol’s “art” was produced factory-style using a team of semi-skilled silk-screeners. In that case, prices held up. But suppose further that your customers discover that “factory seconds” signed by the famous artist are on sale at deep discounts in art fairs around the world. There must be a point at which you, the dealer, drop the artist like a hot potato.

    All Apple is asking is that applications on its iPlatforms be original works of art hand-written by the artist and custom-designed for the platforms. It’s a crude standard, in that hand-written, custom-designed apps can be awful, too, but it’s a standard that goes directly to the heart of the artist-dealer relationship: Am I getting your best work? Am I getting your most original work? If I put your work in the spotlight, will you embarrass me by selling copies on Microsoft and Nokia phones?

    The truth that every righteously incensed commenter is ignoring is that cross-platform apps are crap, and they are at their absolute crappiest on Apple platforms. Apple has a unique, constantly evolving vision of how an application should look and feel that no cross-platform code generator can duplicate. The least common denominator GUI just doesn’t cut it. If you don’t buy this, then by all means leap into the Mac OS application market by developing all your apps in Java using NetBeans.

    Comment by Bob Foster — April 10, 2010 #

  39. Once again, there’s nothing to do with technicalities as there was nothing to do with performance or battery life Re the Flash blockade. No collab happened between Adobe and Apple to work out the issues. We can well see the result of the possible partnership in the form of Open Screen Project and its debuting Flash Player 10.1 which rocks fine on Android phones and is of course stable on desktops as well. Even in the RC status.

    As the article well proves it, the above restriction is absurd tech-wise and is only there over Apple’s corporate policies to ban any developments coming from 3rd parties, e.g. Adobe.

    Comment by Ain Tohvri — April 10, 2010 #

  40. If you use this line of reasoning, which I do think is valid, then it should be fine to use Flash CS5 for creating an iPhone app. I’m taking a bit of a different angle here, but we’ve reached the same conclusion. Think of it this way, CS5 itself is “originally written” in C. So maybe because that tool was written in one of Apple’s specified languages they couldn’t defend not using it to generate content for their devices. Where do you draw the line between “my program” and the tools I use for my program? So, you don’t even have to get that metaphysical, and your reasoning still makes it so that Apple has no case to stop folks from using CS5 to create an iPhone app.

    Comment by Chris Allen — April 10, 2010 #

  41. @joa well written!

    I love the ending too
    Oops, close call. Good thing I didn’t click “Accept”.

    This is also a good related post everyone should read:
    “Apple makes its own compiler… illegal!”

    Comment by Bruno Fonzi — April 10, 2010 #

  42. […] have long been verboten, it’s a disturbing escalation.Although apps are often originally written under the shower, it’s useful to consider how GPL defines source code: it’s what you use to maintain your app. […]

    Pingback by Apple to developers: get your meta programming tools off my lawn! | StoryComplete — April 10, 2010 #

  43. @Rico
    Good for you, but maybe I don’t want to buy or can’t afford a decent development machine from Apple?

    I don’t really feel like tour argument holds up. Andy Warhol questioned the ideas of authorship, originality and authenticity. He essentially made the point that his works were just as original and authentic even though he re-appropriated imagery from pop culture and hired other people to execute his ideas. The demand for his art continued and people continued to buy it at whatever the price. Art created in this manner still served its purpose for the clients who bought it. So what else matters other than giving the client (user) what they want? Nothing, unless you’re Steve Jobs. This is Apple’s way of giving them an easier way of denying apps. Naturally, the more translation tools that become available the easier it will be to make apps and more apps will be submitted to the market. The more apps that get submitted, the more “crap” they will probably get. I can sympathize with this, but is that fair? Doesn’t matter. Its their platform. They can do what they want until some argues its anti-competitive.

    Additionally, does the language used to write the application dictate if the experience is good or not? Of course not! We all know good apps and good experiences are few and far between. But just because my app doesn’t include iPhone OS user interface elements and/or controls doesn’t mean its a “crap” application. However, Steve Jobs might think so because his brand message might be missing from my app. Thats his prerogative and sadly a platform I don’t want to be involved with.

    Comment by Matt W — April 10, 2010 #

  44. @Chris:
    You and I are in agreement. The metaphysical arguments are a set of extreme cases that I am using to point out the silliness of the notion of “originally written language”, and the indignity of being forced to be creative within a set of meaningless boundaries.
    From a practical point of view the real outrage should be directed at Apple’s apparent prohibition of an very broad set of what have now become traditional programming practices. Many world-class applications over the years have included intermediate translation as a vital aspect of their design. As a previous poster said, are we really going to not use lex, yacc, bison? How about the many special-purpose languages that are invented for expressing a unique concept, which then are translated to some other target language as part of an app’s build process? Is Apple really going to stomp on decades of evolution in computer science, in the name of a petty corporate feud?
    I don’t know how to define what “code” really is, or what “originally written” is. Nor do I care — the questions are meaningless. What makes me mad is that a computer company would get into that game by attempting to legislate which programming practices I can use, when all I really want(ed) to do was to use their platform.

    Comment by joe — April 10, 2010 #

  45. @Matt W, CS5 at $699 is more expensive than the Mac Mini at $599.

    Comment by Rico Zuñiga — April 11, 2010 #

  46. I don’t agree, and I think your analogy insults our intelligence. Programming is not about writing a program in your head and then translating it into code. Not any more than building a business is about thinking of every job function it could perform and hiring all the staff in one go. Programs, like businesses, are built by progressively interacting with the world, the compiler, and the customers.

    Section 3.3.1 is about moving the development effort closer to the real platform, which is far more important on pocket-sized battery-powered devices than it is on a laptop. This is noting more than the realities of a constrained runtime environment forcing restrictions in the development process.

    This is nothing new. These restrictions have existed on embedded systems all the way back to the first programmable calculators.

    Comment by C. Lawrence Wenham — April 11, 2010 #

  47. Bob Foster wrote:
    “The truth that every righteously incensed commenter is ignoring is that cross-platform apps are crap, and they are at their absolute crappiest on Apple platforms.”

    Agreed. For example, look at apps such as iTunes and Safari; the Mac versions of these apps are absolutely horrible compared to the Windows versions. If the company that makes these apps would just follow Apple’s advice and refrain from making cross-platform apps, the Mac platform would be better for it.

    Comment by Doodpants — April 11, 2010 #

  48. […] has an article on Apple’s decision to limit development to Objective-C, C, C++, or JavaScript is quite interesting. […]

    Pingback by Apple takes a stand on iPhone/iPod touch/iPad development » MyAppleAnd.Me — April 11, 2010 #

  49. […] Joe Berkovitz’s impressions at a philisophical level (“When does programming really start?”): […]

    Pingback by Apple versus Cross-Compilation Terms of Service Links « Jufa — April 11, 2010 #

  50. Rob (comment #3): while you can get a refund for App Store apps, the developer is charged the full cost while Apple keeps its 30 %. Wanting your money back when an app is removed/blocked through Apple’s capriciousness is a reasonable response, but the practical effects are less reasonable.

    Comment by Jens Ayton — April 11, 2010 #

  51. @Joe Been giving this a ton of thought lately. While this decision by Apple obviously hurts Adobe, it goes way beyond that. The SDK legal language is very bad for 3D games on the iPhone platform too. Steve Jobs talks about apps as if games didn’t exist (in his comments to TaoEffect:, and they are pushing very hard to make their platform the best in gaming.

    I can’t think of one good 3D game out there that doesn’t use an intermediary tool. Most 3D toolkits give their developers/designers a higher level language to work with too. EA uses Lua for their engine, Unity 3D uses C#, JavaScript and Boo based on Mono. I can’t imagine that Apple is going to force EA to change their tools for creating great games for iPhone simply because of this legal nonsense. So, how can they put this on to folks like Adobe or Unity?

    Comment by Chris Allen — April 11, 2010 #

  52. Are we forgetting something here, for starters this is the mobile arena, not the desktop. One thing Apple appears bent on is to avoid introducing the same elements to their young (only 3yrs off the ground) mobile platform, that the desktop arena is facing. This means killing the fork in the road before it gets any wider and placing everyone down the same path. Are we running cross-compiled apps on our desktops, so why would we want them in mobile?

    If I’m a C# developer that wants to develop on the Mac, it would be in my best interest to learn the coding ENV of a Mac and best practices. Wouldn’t it be a little retarded to make the .NET CLR “MacOS aware” and tell everyone to just sit their windows applications in this harness and they’ll just work on a Mac. Honestly, if Apple says cross-compiling is ok then what’s stoping someone from building a layer to bind the .NET CLR to cocoa touch, and port on over windows applications. It’s the same scenario, a runtime (exe) within a runtime (the CLR). Hell, let’s make an eclipse plugin, ‘JVM for iPhone’ and then we can compile our Java+Swing Jars into our custom JVM runtime and compile it down to machine code for the iPhone. Sheer genius, no? No!

    I have no sympathy for the heat and attention that Steve Jobs has placed on Adobe. Maybe i’m the only person that didn’t wake up yesterday but mobile has been around for quite some time. Smart phones didn’t arrive yesterday and before that were PDAs. This is not an Apple-only thing. Where was flash for WinMo, Blackberry and Treos? The cross compiler is lazy and even worse it makes the developer lazy for believing in it.

    If you want to develop for the platform then do just that, develop for the platform. correct me if I’m wrong, but when I learned to write software I was told “one of the greatest caveats to being a developer is that you’re constantly learning, and if you’re not that type of person the development isn’t for you.” this certainly still applies

    Comment by ImJusIncredible — April 11, 2010 #

  53. Apple are in fact evil. They also happen to control access to the gushing torrents of money from their mindless thralls to your pockets.

    What’s stopping iPhone developers rebelling en masse against these ridiculous restrictions? I’d suggest it’s the prospect of enough money that they’d eat a bug on video if the Apple agreement required them to. Android doesn’t quite offer that yet. Munch munch munch.

    Comment by David Gerard — April 11, 2010 #

  54. @Lawrence I agree with your statement, Programs, like businesses, are built by progressively interacting with the world, the compiler, and the customers. But this statement applies just as much to code in C as it does to code in some declarative mini-language to be translated to C (now outlawed by 3.3.1), and as it does to the mental constructs that precede coding. Any representation of a program is incomplete and in a state of evolution. For me, programming is very much about putting together something in my head and then turning that into code. It is not a waterfall process, though: it is iterative.

    But that’s not the main point. Where we truly disagree is on your opinion (and Gruber’s) that 3.3.1 helps Apple. Sure, I understand that cross-platform tools sometimes produce shabby results, and for all I know iPhone Packager could be one (I personally haven’t tried it). But 3.3.1 throws every single baby out with the presumed bathwater. There are many ways to use translators that are incredibly practical and lightweight — see Chris Allen’s insightful comment above on 3D games — and Steve Jobs is hurting his platform by using a shotgun approach to control this problem, not helping it.

    Comment by joe — April 11, 2010 #

  55. […] » Apple Dev Program takes stand on nature of consciousness – Is the iPhone SDK really just a turing test in disguise? You decide. […]

    Pingback by » Links for April 11th — April 11, 2010 #

  56. @Rico
    Don’t forget you need a display and to pay the SDK License fee ;)

    Comment by Matt W — April 12, 2010 #

  57. Somewhat in response to this post, Howard Stearns has written a very language-geeky, philosophy-of-software article on Wetmachine that kinda-sorta comes down on Apple’s side — but not really.

    Comment by John Sundman — April 12, 2010 #

  58. They accept C, but you can use tools like lex and yacc to generate C source code. Would this also invalidate the clause? If not, let’s all use translators from our languages of choice to one of their approved ones. Or will they draw a distinction of degree between program generators and language translators?

    This is one of those times I’m glad I never have anything to do with Apple’s closed platforms. I’m happy to let them paint themselves into an expensive corner of irrelevancy.

    Comment by Jason Catena — April 12, 2010 #

  59. […] with reactions from the profane to the pedantic to the metaphysical to the insightful to the whoa, […]

    Pingback by The Great Section 3.3.1 Debate at Under The Bridge — April 14, 2010 #

  60. Joe-

    Thanks for the clever writeup. The metaphysical aspect is part of the underlying argument that I make on my blog that the use of “original” in 3.3.1 does not have true legal meaning. If I decide to prototype my program with carrot sticks and olives on a yellow legal pad am I disqualified from the App Store? If I eat the evidence, who will know? ;-)

    Combine your argument with the fact that Apple’s agreement clearly states that your code is entirely your own property and you have Apple attempting to modify property law with ill-defined terms. I also agree that cross-platform and other transformation tools do not automatically equate to “bad” software and in certain situations, such as Chris Allen presents, it improves the end result.

    But we can toss all these arguments aside as everyone who has signed on as an iPhone Developer accepted Apple as the final arbiter, for any reason or none at all, on whether an app gets into the store. People were hoping Apple would be gentle in this regard, but with this clause Apple is broadcasting the message that you can drop the adjective from benevolent dictator.

    Comment by Ira Hochman — April 21, 2010 #

  61. CORRECTION: In my argument above, I should have said that Apple’s agreement clearly states that your code is your own & the relationship is one of independent contractor.

    Comment by Ira Hochman — April 21, 2010 #

  62. I’m a bit surprised, by reading the comments it seems there are not many programmers here. So every app that uses a cross-platform library is crap, huh? Every game made in Unity or that uses say Box2D or OpenGL is crap, cause they are cross-platform? Cause You don’t even NEED to write a CP app to use CP libraries. As a programmer I learned early to not reinvent the wheel, and that code reuse is good. Apple is basically saying that if I wrote an awsome library originally in say Java, and I want to port it to C to use on my iPhone app I can’t and that’s a “GOOD THING”? How does that make any sense?

    By the way, great article, even though you dont “write” in your mind, you could just write a mockup of your thoughts on paper in pseudo code, and that would be the “original” language you wrote your programm, so that clause doesn’t hold up at all anyway.

    Comment by David — April 22, 2010 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Entries and comments feeds. Valid XHTML and CSS.
All content copyright (c) 2006-2007 Joseph Berkovitz. All Rights Reserved.