Apple makes its own compiler… illegal!


”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 the very bad (sad) addition (restriction) to the iPhone developers program everyone is talking about right now. And I feel very concerned about this… and now everyone is wondering if software like the Flash-to-iPhone packager, Mono or Unity are definitely banned from the iPhone programming tool-chain.

I never talked about it before, but Aerys is working on a project targeting the iPhone and the iPad (among a lot of other platforms). And this very project is leveraged by some home-made code generation tool. Therefore, we are very scared of what this kind of restrictions might imply for our business.

But as scary as this statement might look at first, it is actually even funnier when you understand it makes any iPhone/iPad application illegal. And it gets even better because even Apple’s standard tool-chain finds itself… prohibited!

The reason is very simple: Objective-C, C or C++ never “link” to any library providing the Documented iPhone APIs. Objective-C, C or C++ actually never link to anything. When compiling your code, the compiler creates an intermediary representation of your program in order to make it easier to (eventually cross-)compile it. In the case of GCC, the compiler used to build such applications, those intermediary languages are:

(Source: Wikipedia – Intermediate language)

This very intermediate representation is built before the symbols resolution and before any linking is done. Thus, linking against the “Documented APIs” has always been done “through an intermediary translation or compatibility layer”. And it won’t change anytime soon! But, still, I wish good luck to Apple’s engineers in their future work to patch GCC and make it “compliant” (sic!).

To me, it is the most obvious sign that Apple doesn’t care about its developers (but I was still pretty thrilled to eventually become one of them about a few days ago…). Not because it bannishes any interesting cross-compiling software venture. And not even because any iPhone/iPad developper who knows about other platforms openness and ease of production will feel sick just by reading this kind of restrictions.

No. To me, Apple is losing it all simply because this kind of idiocy can only be written by someone who doesn’t have a clue about how a computer/compiler works! Apple started building casual devices and ends up targeting casual developers. Could this be the first sign of how (so called) intuitiveness – when enforced by completely hermeticly closed devices – finally makes people… dumber? So now the real question is “What happens when your developers program EULA is written by a marketing control-freak moron?“.

PS : The title of this article was desgined to attract the eye. It is my interpretation of the latest Apple’s developers program EULA additions and I might be completely off or wrong. Anyway, the doubt and worry caused by this very fuzzy and unclear addition stands as a major issue for all the companies and developers targeting the iPhone and iPad platforms.

  • Pingback: Tweets that mention Apple makes its own compiler… illegal! | Promethe's Blog -- Topsy.com()

  • you say this as if there was some kind of problem for apple. it is their tos, and they are free to ignore it. you are not. basically, tos reads “do not use other technologies”.

    • You didn’t read it right: there is no way to build iPhone applications without having an intermediate layer. This is how the compiler works. There is no way to build an application that actually respects those terms.

      Intermediate representations are commonly use to produce better and refactored code. Any decent IDE provides code generation. What is the difference between the class creation wizzard of Eclipse and the features they are hereby prohibiting? None.

      This is why we use Objective-C, C or C++ instead of pure ARM machine code in the first place. Any abstraction on the top of those languages can produce even more efficient applications just like those languages makes it possible to build better applications than pure and simple ARM machine code.

  • So you think the iPhone’s intuitiveness makes people dumber, and yet you want to develop for it? Stop biting the hand that feeds you.

    It’s pretty simple actually. You don’t like the iPhone, you don’t like the iPad? Don’t code for it!
    I don’t complain that I can’t develop .NET apps on my Mac.

    • The problem is not whether you can or can not. The problem is whether you are allowed to or not.
      You don’t complain you can’t build .Net applications because you don’t want to. But if you wanted, you could. And why couldn’t you? It’s supposed to be your computer after all!

      As a computer science engineer, you should know for a fact there is absolutely no reason to enforce such restriction.

      To say “it’s pretty simple” and sum it up like you just did is an act of pure craziness. It is the very sign of the idiocy that birth with the idea that, instead of making people brighter and educating them on how to enlarge their perception of the unviverse, as complex as it is, “its pretty simple” to make it look like you just have to push a button to launch a rocket and pretend its better because everyone can do it!

      Well I’m sorry. But I don’t want to build a Facebook-fart machine! And for the new user experience I want to provide, I need more than Objective-C from scratch. I need build tools, and some of them imply code generation.

      The iPhone has a good penetration rate and has become a solid mobile platform. This is a fact. It’s a shame developers are not allowed to express themselves to make it more than just a glossy black box. Your comment reminds me of the dark ages, when technology was called black magic. It wasn’t done for no reason. And Apple has started its witch-hunt…

  • Funny that Alexandre brings up .Net apps on Macs, because there’s a project called Mono that allows you to do just this:
    http://www.mono-project.com/Main_Page

    It’s actually a variation of this project, MonoTouch that allows .Net developers to program apps in C# for the iPhone. I haven’t seen any end user being able to tell apart an app made with MonoTouch and understand that there’s a number of them right now in the app store.

    It’s one thing to ban a particular technology from a device, but it’s something completely different to ban competing development tools where the end result is the same as any app made with Apple tools and has to be decompiled and inspected at the byte code level to tell them apart. There’s now talk about whether the new agreement opens them up Apple for a lawsuit. Hank Williams has blogged that he thinks the new licensing agreement is a very clear example of restraint of trade, a basic tenet of contract law.

    • Thank you Matthew for your comment! I know about Mono and MonoTouch but I wasn’t sure it was already up and running.
      It’s interesting to see that Alexandre, who claims to be a Mac and a .Net developer, doesn’t know about such software!

      Apple calls it “quality control”, I call it obscurantism.
      Any decent computer science engineer should feel insulted by such limitations.

      In the end, the legal aspect might do a big difference here indeed!

  • Pingback: Roundup from an angry Flash-o-sphere morning « ManMeng’s Lifepad()

  • Pingback: Another iBrick in the Apple Wall » Just Another Rant()

  • Pingback: TwittLink - Your headlines on Twitter()

  • @Promethe

    I’ve never said I was a .NET developer? Haha no thanks. I just said I don’t complain that I can’t be one. But I’m wrong about this apparently. I didn’t know about Mono.

    In the end the only way a developer has to show his discontent is simply to stop programming for the platform!

  • @Alexandre

    Don’t get me wrong, I love the iPhone. I want to be able to develop on that platform. So ok, Apple is completely right about the fact that it will be easier if you follow their guidelines, and surely, lead to a better user experience.

    What is wrong is that it is *forbidden*. If Apple is right, then any application written in a “foreign language” will sure look dumb next to Tweetie-style apps. Just leave the developer the choice. You can’t say there aren’t any badly designed apps coded in native Objective-C with Cocoa Touch, so why can’t there be any good application in C# / Flash / Ruby / Haskell / your mom’s language, as long as it is technically feasible.

  • Pingback: Most Tweeted Articles by Flash Experts: MrTweet()

  • @Alexandre: You can’t possibly say that any rule enforced by Apple so far has garanteed anything close to an equivalent quality in the validated applications.

    That’s what the whole system is about: offer and demand. If nobody likes utter crap applications, they will go down the ladder and won’t make any money.

    The language used to build an application has never implied any quality insurance (or concern for that matter). It’s the man that matters, not the language.

    Unlike you, we are not Apple fanboys so we don’t want to target the iPhone/iPad platform because it’s “cool” and “hype”. But because it has a good penetration rate and it’s a good occasion to introduce new uses and features. We want to target such platforms because we have ideas on how it might become more than what it already is. And to leverage our creativity, we build tools that are more complex and high level than just raw Objective-C. That’s a shame we are not allowed to use them.

  • They could come up with a single-pass compiler. Finally iPhone developers could enjoy programming in Pascal 🙂

    • @Joa yeah! Because Pascal makes so musch sense compared to Objective-C, C or C++ 😀

  • zwetan

    someone explain to me how not allowing the use of pinch to expand in an iPad application give a better user experience ?

    http://www.appleinsider.com/articles/10/04/07/apple_rejected_ipad_app_for_using_pinch_to_expand_gesture.html

    Also I would be curious to know why some undocumented API are OK to be used by Apple but not by others ?
    http://www.marco.org/500743718

    list all the reasons why app have been rejected or banned from the app store in the last 2 years or so and you’ll see that almost none was about “quality” or “better user experience”

  • Pingback: The Great Section 3.3.1 Debate at Under The Bridge()

  • d’s

    Is any of this unconstitutional? Is choice of programming language akin to free speech?

  • CodeJockey

    When do we stop developing platforms and start building cool apps to use and things to do with these devices? It’s 2010 and we’re still bickering about “my platform is the best” instead of just building kick ass applications that ANYONE can develop and use! When I started developing (a long time ago) I did it because I saw an opportunity to make some cool/fun things. I personally could give an F about what language I code in, except I hate anything that restricts me to a certain platform OS (Windows/Mac) or hardware. Apple is forcing business to spend more if they wish to develop for a larger audience than just the Apple fanboy base. The idea that I have to develop and application for iPhone seperately from the identical app for Android and WinMobile is retarded! Evolve people! We should be able to write once and run anywhere by now!

  • They could come up with a single-pass compiler. Finally iPhone developers could enjoy programming in Pascal 🙂

  • Ark-kun

    Alexandre :I don’t complain that I can’t develop .NET apps on my Mac.

    Of course you don’t complain since you actually can develop .Net apps on a Mac. Even apps for iPhone.