Smorgasborg - Random Objects

April 11th, 2010

I have been watching iPhone development for a while. I’ve played in it and with it and been fascinated by it.

The latest changes, where Apple is proposing to disallow alternate languages and runtimes to make iPhone apps. What it says is:

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).

Not calling private APIs is not new. They don’t want you to do that. When I attended the last BarCamp, Chris Hughes (twitter: @chews) said that probing undocumented iPhone APIs by decompilation was essential to being a good iPhone developer–that doing so assures you can see where the platform is going.

The tricky bit is “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).” So, what happens to things like MonoTouch or Adobe’s nascent Flash Packager for iPhone? MonoTouch uses C#, and Adobe’s tool that releases tomorrow uses Flash (so, ActionScript).

This change made some people crazy. Lee Brimelow is a Platform Evangelist at Adobe focusing on the Flash, Flex, and AIR developer communities. is what TheFlashBlog says. Mr. Brimelow basically turned Apple’s policy change into an opportunity to lose his mind, spectacularly. Here’s his post: Apple Slaps Developers In The Face. He ended it with:

Go screw yourself Apple.

Comments disabled as I’m not interested in hearing from the Cupertino Comment SPAM bots.

Despite it being called “TheFlashBlog” and him being an employee, since that post the other day a disclaimer and several redactions have been made:

This is my personal blog. The opinions expressed here do not necessarily reflect those of my employer.

My guess is those changes kept him from getting fired.

Meanwhile, Jon Lech Johansen, better known as DVDJon called out Steve Jobs on this issue:

In defending recent changes to the iPhone SDK agreement, Steve Jobs made a general argument about platforms:

We’ve been there before, and intermediate layers between the platform and the developer ultimately produces sub-standard apps and hinders the progress of the platform.

Since iTunes for Windows uses non-native APIs such as CoreFoundation and CoreGraphics, Steve Jobs is effectively calling iTunes for Windows a sub-standard app.

Is iTunes hindering the progress of the Windows platform by not taking advantage of the latest native Windows APIs? By Steve’s logic, Microsoft should start banning apps such as iTunes from Windows.

It should be noted that Mr. Johansen makes an iTunes competitor called doubleTwist. His point is a good one. Windows, whatever one thinks of it, has been a vibrant ecosystem in part because developers cannot be prevented from using other-than-official Microsoft toolkits to make their applications.

Monotouch, meanwhile, has a much more reasonable point of view, and views the changes as merely proposed and not final:

This is an update from the MonoTouch team at Novell to the MonoTouch community.

Many have contacted us about reports on the changes in the iPhone Developer Program Agreement and while we can not comment on the specifics of a confidential agreement, we want to address some of the points that are being brought up.

We believe that MonoTouch brings an impressive value to the Apple ecosystem.

MonoTouch’s C-powered runtime blends the power of native code and Apple’s iPhoneOS APIs with type safety, automatic memory management, and other benefits that years of runtime innovation have delivered to the ISO Common Language Infrastructure.

We are reaching out to Apple for clarification on their intention, and believe there is plenty of room for course-correction prior to the final release of the 4.0 SDK.

MonoTouch’s programming model exposes the iPhoneOS API to the C# language to give developers the same control and access that Objective-C developers get.

If Apple’s motives are technical, or are intended to ensure the use of the Apple toolchain, MonoTouch should have little difficulty staying compliant with the terms of the SDK. MonoTouch runs only on Mac OS X, and integrates tightly with XCode and the iPhone SDK. Applications built with MonoTouch are native applications indistinguishable from native applications, only expose Apple’s documented APIs and uses a rigorous test suite to ensure that we conform to the iPhoneOS ABIs and APIs.

With this in mind, the MonoTouch team remains excited about the potential for Enterprise and AppStore-deployable applications developed for the iPhone and iPad. Support for iPhoneOS 4.0 on MonoTouch will be arriving soon.

More sinister is the reaction of Dan Grigsby, of Mobile Orchard, an excellent blog and podcast about iPhone development. He has decided: I’m Abandoning iPhone Development. Mobile Orchard To Stop Publication. This is about the most drastic reaction from an iPhone developer I can think of. He has read the tea leaves of Apple’s actions and decided that the greater opportunity is in Android Development.

Meanwhile, iPhoneWax is a framework that lets you write iPhone apps in Lua. It bridges Objective-C and Lua using the Objective-C runtime. With Wax, anything you can do in Objective-C is automatically available in Lua! The reaction by developers in the iPhoneWax group is confusion, anger, and disappointment: Thread: Section 3.3.1.

Ansca Mobile has Corona SDK, a commercial software development toolset, is in a similar position. They seem to think they’re okay: Corona and iPhone OS 4.0:

First and foremost I want to thank all of our Corona developers, friends and family for their support regarding the new Apple 4.0 OS Terms of Service Agreement (TOS) on how it could affect you, our developers, and us, as a tools company.

Let me reassure all of you that we will do whatever it takes to make this work, just like we have been doing since Corona first started shipping.

I believe that Corona will be fine, and we are committed to delivering the best tool for multi-platform game and app creation for Apple and Android devices, and we will continue to add new features to Corona and to make it better every time we put a new release out.

I, along with my co-founder Walter Luh, have reached out to Apple both officially and unofficially, and we continue to do our diligence in regards to the new TOS. We have also been in touch with other companies that are in the same situation we are.

John Gruber explains the changes a bit more in his post Why Apple Changed Section 3.3.1. Mr. Gruber is always worth reading for thoughts on Apple, but he says:

Flash CS5 and MonoTouch aren’t so much cross-platform as meta-platforms. Adobe’s goal isn’t to help developers write iPhone apps. Adobe’s goal is to encourage developers to write Flash apps that run on the iPhone (and elsewhere) instead of writing iPhone-specific apps. Apple isn’t just ambivalent about Adobe’s goals in this regard — it is in Apple’s direct interest to thwart them.

Rafe Colburn, who I’ve been reading for many years, has a nice summation of all of this as well: Apple kneecaps competitors and partners. He brings up the parallel of Java, which seems especially apt:

I am reminded of Microsoft’s reaction to Java, specifically the early hype about Java. We all think of Java as a boring server-side language now, but the initial idea behind Java was that software developers could write applications in Java rather than writing them for Windows, and that those applications would work everywhere, thus defanging Microsoft’s desktop OS monopoly. Microsoft took various steps to prevent that from happening, but they lacked a tool like App Store that would enable them to just ban Java. Apple has that card to play, so they’re playing it.

I think Apple pissing off developers is a gigantic mistake. These are engaged, smart people who believed very strongly in the iPhone platform. Pushing them away means that Apple is taking the decision to encourage them to go with another platform. At the moment it looks like Android would be that platform. Other contenders for taking that iPhone business: webOS, though Palm is struggling; maybe Symbian‘s phones will be more “Smartphone-y.” Blackberry or Maemo. I am hopeful and interested to Apple makes a course correction on this.

The AppStore is both a strength and a weakness for Apple. It’s a source of revenue, and there vetting of official iPhone apps, but it also is slow, and is much criticized. Here’s a random article with criticisms: 10 Reasons Why Apple’s App Store Policies Make No Sense.

If their concern is for application quality or platform stability in light of the fact that they are also introducing multitasking–why not simply include disclaimers about the fact that applications may be less stable. Or maybe allow developers to push “questionable” apps into a “beta” mode. Apply disclaimers to these apps, and let users and developers see and decide. I may be naive, but there may yet be a creative solution that protects Apple but still allows independent developers to do their thing.

I’m interested to see if Apple makes changes in light of the pushback from independent developers. It would be a shame if all these creative developers were simply kicked out the door. In light of software history though, that may be exactly what happens. Luckily, the industry is still young, and these developers have alternatives. But pushing away developers can’t help but ultimately hurt the iPhone platform.

Now, all that said, it’s possible the reason for phasing out everything but C, C++, and Objective-C is part of a larger shift. Here’s an interesting theory that it has more to do with a shift in underlying processor: Like the change from 68k to PowerPC, or PowerPC to Intel. iPad’s now sport custom processors, maybe there’s something like that afoot. I’m not technical enough to know the merits of this possibility, but if so it’s possible a shift in platform strategy may be inferred by this developer-angering development.