In his response to the Section 3.3.1 changes, Steve Jobs makes a very valid point that has been largely glossed over by the Apple vs Adobe narrative that is playing out on the web right now:
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.
There are two arguments here:
- Intermediate layers produce sub-standard apps.
- Intermediate layers hinder the progess of the platform.
Most people seem to be rebutting the first argument without addressing the latter. I do think their rebuttal is valid: developing an app in Objective-C doesn’t provide any guarantee of quality, and app quality should be vetted during the approval process regardless of the language used. So the first argument does not hold water, but what about the second?
I think Job’s second argument is valid: intermediate layers hinder the progess of the platform.
Imagine a scenario where Apple releases a bunch of new features in their iPhone SDK. Developers using the native platform have access to the new APIs immediately, and can begin incorporating those features into their applications.
Developers on an intermediary platform have to wait for the intermediary platform vendor to implement the new features and expose it in their APIs. The best case scenario is that the intermediary platform vendor figures out how to implement the new features in a timely fashion, allowing their developers to take advantage of them quickly.
Vendors with slow release cycles (I’m looking at you Adobe) end up creating an additional delay before developers on their platform can take advantage of the latest and greatest features from Apple. This is no good if Apple wants to be on the cutting edge.
And of course, the worst case scenario is that the intermediary platform vendors never get around to implementing the new features, preventing all of the developers on their platform using those features.
I can definitely see how that hinders the progress of Apple’s platform, and why they would want to take steps to prevent that from happening.
Exhibit A: Block Objects
It’s no coincidence that these SDK license changes came with the announcement of iPhone 4.0’s multitasking features.
The multitasking API relies on block objects, a language feature added to Objective-C 2.1, which first shipped with Snow Leopard. Note that the introduction to blocks specifically states (emphasis mine):
Blocks are available in GCC and Clang as shipped with the Mac OS X v10.6 Xcode developer tools. The blocks runtime is open source and can be found in LLVM’s compiler-rt subproject repository. Blocks have also been presented to the C standards working group as N1370: Apple’s Extensions to C (which also includes Garbage Collection). As Objective-C and C++ are both derived from C, blocks are designed to work with all three languages (as well as Objective-C++). (The syntax reflects this goal).
You should read this document to learn what block objects are and how you can use them from C, C++, or Objective-C to make your program more efficient and more maintainable.
Essentially, the new features Apple shipped in iPhone OS 4.0 rely on core improvements to C, C++, and Objective-C, the three languages that Apple now wants you to build your apps in. How shocking!
Forget the crazy “sky is falling” pronouncements of how Apple wants to control how you think. Forget the reactionary claims of Apple slapping developers in the face, or how Steve Jobs has just gone mad.
Perhaps there is a much more straightforward, practical reason for their actions. Perhaps they simply want you to work in those languages so you can take advantage of the improvements they are making to them, and the new features they are shipping?
Imagine another scenario where Apple adds some fancy new iPhone OS feature that relies on a new programming language construct they’ve added to C, C++, and Objective-C. Now we’re no longer talking about intermediary platform vendors simply having to expose some new APIs. They might have to fundamentally alter their programming language in order to support those new features before their developers can take advantage of them. How much longer will that take? In some cases, will it even be possible?
The predominate narrative on the web right now is of Apple attacking Adobe over Flash CS5 in an attempt to protect their hold on their platform, with developers getting caught in the middle. But I think there is a much more practical reason for their actions: they are evolving (and will continue to evolve) the programming languages on their platform to support the new features they want to build, and waiting for intermediary platform vendors to eventually implement those features will hinder the progress of the platform as a whole.
That’s a lot less sensationalistic, don’t you think?
Comments