In yesterday's WWDC keynote Steve Jobs talked about the three foremost reasons Apple rejects submitted apps from the App Store. These were: apps that don't do what they are supposed to, apps that crash, and finally apps that use private APIs.
The rationale Steve gave for the API related rejections was simple. If Apple introduces changes to its OS, they make sure that all their SDK APIs get tested in advance and work properly. Very likely however, many private APIs won't work after the update. Not necessarily, but often very likely. To avoid the hassle and blames by end users that it's all again Apple's fault, they decided to reject apps using 'private' APIs. Is that so wrong?
I don't think so. Apple is long known for writing splendid software that fits perfectly their own hardware and is extremely efficient and easy to use. Interface elements like fonts, buttons, controls, animation effects, functions, menus, are all very consistent. Therefore, Apple's applications are easy to learn [especially by first time users], and work with intuitively. The way to do that is by creating an (extremely) API rich development platform (SDK), whereby developers eventually put their creativity to better use [that is, developing the actual functionality of their own apps, rather than reinventing the wheel, doing things Apple already put in the SDK]. As an example, the new iOS 4 will be adding in excess of 1500 new APIs to the already crowded SDK. So, whereas a skilled J2EE developer memorises a great deal of framework APIs, a skilled ObjC developer is an expert in searching Apple's API library for the right programming component that fits his/her design... Makes sense, doesn't it?
However, many developers think otherwise. Open source developers love to do the job of the 'platform authors' instead, creating cool interface elements and putting them out there in the 'cloud' for free GPL use and enhancements, whereas the majority of the developers' community works within frameworks like Apple's SDK and try to adhere to the imposed rules and standards. However, most available frameworks, (like .Net and Android) will tolerate many more freedoms than Apple... Apple is rather obsessed about using it's own APIs in the very strict sense.
On the long run, His Jobness is right, however. The most terminal cancer of any computer code is proprietary and undocumented logic encoded in private APIs (subroutines to the oldies among us) that look like Mama Leone's sauced spaghetti... The billions of dollars spent in the maintenance of such systems in the last fifty years would be enough to get us out of the current financial mess, both in Europe and the US. And will still be enough left to go clean BP's oil spill in the Gulf!
IMHO, El Jobso's obsession about blindly and unequivocally using the thousands of Apple libraries and components as the only mechanism to develop apps for Apple's devices may bother some 'creative' developers but is the right strategy. Compare to this... Java, Windows, Linux and Android are all platforms focused upon developers, their freedoms and their creative expression, and much less upon the rest of us, unfortunate end users. Such platforms allow developers to create their own worlds, often from the ground up, (I worked once during three months for such a company offering CRM 'solutions' and eventually decided to quit instead of wasting any more of my precious life trying to make them think otherwise) and then end users are left with many different things to learn, to accommodate the developers' views of the world.
Unfortunately, casual app users have usually far less "power" than developers. Developers call the shots and poor users have got to eat what they get served on the plate. Therefore, for all practical reasons, the world is dominated by libertarian developers who always think they know it better than anybody else and enjoy the freedoms offered to them by opportunistic platform creators. Microsoft is notorious about this (developer stroking)... I was naively hoping Google would be far better on this issue and would start a new wave of proper development habits, but in vain. They just copied the status quo, and, other than offering many of their their goodies in a mostly 'free' business model, they are just like Microsoft and all the rest...
And this is why, despite initial market penetration successes, Android will never become like any of the iconic trendsetters that Apple's iOS or most of its other products always have been. This, despite how much more dough evil Largey and Squirrel Boy are going to pour into the project. Monkey Boy could write volumes about his experiences on that...
I have a rather simplistic way to describe the problem to the silent crowd: Computer languages are like alphabets. APIs are like words. You use the letters of an alphabet (programming languages) to write down spoken words (the APIs). We, humans, tend to communicate with each other using known words of a given natural language (thesaurus). We don't make up our own words just for kicks! Nobody would be able to understand what we're talking about if we did, right? Text Authors do not usually invent new words either; as a rule, and as sophisticated in their expression they wanna be, they will still use the alphabet and thesaurus of the natural language they use to express their ideas and arguments. When Jobs urges developers to use Apple's APIs, he actually sez to them: dudes, use our alphabet and dictionary, with the words it contains, like you won't be inventing new words if you were to describe your app in any given natural language, right? It's not much to ask, innit?