I actually predict that this will be a major problem for Apple in the
future, but probably won't impact their bottom line for their mobile
platforms. Programmers never forget things. They are notorious for
not updating basic knowledge they believe and for spreading myths
and rumors about technology for decades. I can actually see a situation
building where programmers who maybe wouldn't have worked on an
iPhone application would still avoid targeting Apple products simply
because of the stories about Apple doing "A Section 331" on them.
This.
Despite my personally benefitting from the new policy change, (I write Obj-C comfortably and will benefit from the reduced competition,) I think Apple is making a grave mistake trying to extend their review checking process in a manner that can only be done in reality by visiting each and every developer. I'm not convinced Apple's in-house analysis tools will be able to capture violations in a manner consistent with their current license wording.
It's just going to degenerate into a cat-and-mouse game with the larger and/or more tenacious middleware developers, leading Apple to waste resources and R&D money on license enforcement, driving down profits and adding significantly to the large pile of ill will Apple has accumulated in the last few years. Apple is still living down past quirks and excess of their platforms, like "Cult of Apple evangelism" and "one-button mice," that are no longer true, but hang around their necks like a long decaying albatross. In short, this could help cause Jobs to lose control of his platform's message to the masses if the people able to recommend their hardware and platforms keep sticking "asterisks" to their recommendations.
I don't think Apple have any interest in strictly enforcing this rule. It's meant to be a catchall clause. Most likely App store reviewers will first use some subjective criteria like whether an app feels like a native app or whether it fits certain performance requirements. If an app fails to match the subjective criteria it will be submitted for further inspection. And just then, if it fails to pass that one too, it will be "objectively" rejected for a subjective reason.
I'm not defending the rule or the inconsistent enforcement of it. I'm just pointing out why DLWormwood's apocalyptic prediction of "a cat-and-mouse game with the larger and/or more tenacious middleware developers, leading Apple to waste resources and R&D money on license enforcement, driving down profits and adding significantly to the large pile of ill will Apple has accumulated in the last few years" will most likely not come true.
Although I am amongst the first to disagree, maybe not necessarily with Apple's goal, but certainly with the language they are resorting to to achieve that goal, I have to object to the following statement:
What I believe programmers are truly angry about is that Apple broke their long standing promise of supporting multiple languages when they originally attracted them to the platform. They're really saying:
"You told me if I bought a mac, and an iPhone, and an iPad, that you would create LLVM and MacRuby and Python bindings so I can code in my favorite language. You lied!"
Nobody is really saying that because neither Apple nor any of their employees have ever told anyone such a thing. On one hand the ban of interpreted code, except for Javascript, has been there since day one, so no sane programmer has had the illusion that they can use Ruby, or Python, or whatever to write iPhone apps. And on the other hand there is absolutely nothing preventing Apple from amending that clause in the license agreement once the technical limitations, e.g. garbage collected Objective-C runtime, behind toll-free, ahead of time compiled wrappers like MacRuby disappear. Especially since MacRuby in particular is an Apple run project.
No, I think the problem is that until now it was a kind of a tacit assumption by developers that no company is really interested in restricting something as arbitrary as the way that you code.
I see this as a sort of bizarre breach of social norms on apple's part.
I thought that the rule against interpreted code was a little weird from the start. I understand the reasoning behind it (you can't very well allow someone full use of what you sold them, it would be anarchy).
But now, you also can't use other non-interpteted languages. From the perspective of anyone who knows anything about computing, compilers, programming etc. It seems completely nuts. The only real difference is that in a better language I have an easier time writing the damn code.
The ban that was there since the beginning wasn't against all interpreted code, was it? It was against being able to run interpreted code that wasn't originally shipped with the app. So I don't think (before the recent 3.3.1 changes) that Ruby or Python would have been against the rules. Please correct me if I'm wrong.
Commodore 64 app is still on the App Store. It was taken off briefly when it was found to be able to run interpreted code that wasn't originally shipped with the app (specifically, code the user typed into the emulated C64's BASIC interpreter).
So it's hard for me to see why an app that was written in Ruby or Python would have been disallowed before the recent changes.
And it seems the C64 app (the one that's up now, that can't run arbitrary code) will be disallowed after these changes go into effect.
Lots of other games are ports using VMs. Escape from Monkey Island is one notable example. Another is the Frotz (interactive fiction) port for the iPhone.
Yeah. It's going to have to be reworded ... or, at the very least, a statement issued clarifying what's meant to be included vs. what isn't (a Steve Jobs "executive signing statement").
I'd sure like to hear ideas of how that could be worded. I strongly doubt they'll back down and allow the Flash compiler at this point. But they obviously want to keep Monkey Island, and perhaps even Unity 3D. How could they possibly word a new version of the clause to make this distinction clear? Can a formal distinction be made?
Actually you are right, the ban (i.e. clause 3.3.2) that was there since the beginning was not against all interpreted code. Originally it said:
"An Application may not itself install or launch other executable code by any means, including without limitation through the use of a plug-in architecture, calling other frameworks, other APIs or otherwise. No interpreted code may be downloaded and used in an Application except for code that is interpreted and run by Apple's Published APIs and built- in interpreter(s)."(emphasis mine)
However it was changed, with OS 3.0 SDK I believe, certainly before the OS 4.0 SDK changes, to its current wording:
"An Application may not itself install or launch other executable code by any means, including without limitation through the use of a plug-in architecture, calling other frameworks, other APIs or otherwise. No interpreted code may be downloaded or used in an Application except for code that is interpreted and run by Apple's Documented APIs and built- in interpreter(s)."(emphasis mine)
I still maintain my position that for quite some time now developers should have had no expectations to be able to write applications for the iPhone in Ruby or Python, or some other interpreted language or at least to be able to distribute them through Apple's app store. Although in reality there seem to be plenty of applications in there that have some scripting component or another.
I can't get the taste out of my mouth about 331. To the point that this is actually making me study other platforms because of the spookiness of Apple's propensity to be arbitrary. I'm two weeks into developing a game I had hoped to port over to Android after releasing for the iPhone. Now, I'm looking harder now at WebKit and Android (and have glanced a little at Windows Phone, gasp).
In this case I think they could be sued or investigated the same way Microsoft was regarding their unfair business practices in licensing.
No, they can't, because the predicate for the Microsoft enforcement action was their monopoly position in the desktop market, and the cause of action was their attempt to use that monopoly to create new monopolies.
Apple has nothing close to a monopoly on smart phones (they are crushed by RIM).
I'm also confused by the thesis of this blog post, which seems to be that there was a bait-and-switch pulled on the Apple dev community writ large. The vast, overwhelming majority of iPhone apps are written in ObjC, and Ruby is no more a second-class citizen on OSX today as it was last year.
15 comments
[ 3.1 ms ] story [ 32.5 ms ] threadDespite my personally benefitting from the new policy change, (I write Obj-C comfortably and will benefit from the reduced competition,) I think Apple is making a grave mistake trying to extend their review checking process in a manner that can only be done in reality by visiting each and every developer. I'm not convinced Apple's in-house analysis tools will be able to capture violations in a manner consistent with their current license wording.
It's just going to degenerate into a cat-and-mouse game with the larger and/or more tenacious middleware developers, leading Apple to waste resources and R&D money on license enforcement, driving down profits and adding significantly to the large pile of ill will Apple has accumulated in the last few years. Apple is still living down past quirks and excess of their platforms, like "Cult of Apple evangelism" and "one-button mice," that are no longer true, but hang around their necks like a long decaying albatross. In short, this could help cause Jobs to lose control of his platform's message to the masses if the people able to recommend their hardware and platforms keep sticking "asterisks" to their recommendations.
Stupid rules are not improved by selective enforcement. The randomness, the unfair application of them makes it worse.
What I believe programmers are truly angry about is that Apple broke their long standing promise of supporting multiple languages when they originally attracted them to the platform. They're really saying:
"You told me if I bought a mac, and an iPhone, and an iPad, that you would create LLVM and MacRuby and Python bindings so I can code in my favorite language. You lied!"
Nobody is really saying that because neither Apple nor any of their employees have ever told anyone such a thing. On one hand the ban of interpreted code, except for Javascript, has been there since day one, so no sane programmer has had the illusion that they can use Ruby, or Python, or whatever to write iPhone apps. And on the other hand there is absolutely nothing preventing Apple from amending that clause in the license agreement once the technical limitations, e.g. garbage collected Objective-C runtime, behind toll-free, ahead of time compiled wrappers like MacRuby disappear. Especially since MacRuby in particular is an Apple run project.
I see this as a sort of bizarre breach of social norms on apple's part.
I thought that the rule against interpreted code was a little weird from the start. I understand the reasoning behind it (you can't very well allow someone full use of what you sold them, it would be anarchy).
But now, you also can't use other non-interpteted languages. From the perspective of anyone who knows anything about computing, compilers, programming etc. It seems completely nuts. The only real difference is that in a better language I have an easier time writing the damn code.
So it's hard for me to see why an app that was written in Ruby or Python would have been disallowed before the recent changes.
And it seems the C64 app (the one that's up now, that can't run arbitrary code) will be disallowed after these changes go into effect.
I'd sure like to hear ideas of how that could be worded. I strongly doubt they'll back down and allow the Flash compiler at this point. But they obviously want to keep Monkey Island, and perhaps even Unity 3D. How could they possibly word a new version of the clause to make this distinction clear? Can a formal distinction be made?
"An Application may not itself install or launch other executable code by any means, including without limitation through the use of a plug-in architecture, calling other frameworks, other APIs or otherwise. No interpreted code may be downloaded and used in an Application except for code that is interpreted and run by Apple's Published APIs and built- in interpreter(s)."(emphasis mine)
However it was changed, with OS 3.0 SDK I believe, certainly before the OS 4.0 SDK changes, to its current wording:
"An Application may not itself install or launch other executable code by any means, including without limitation through the use of a plug-in architecture, calling other frameworks, other APIs or otherwise. No interpreted code may be downloaded or used in an Application except for code that is interpreted and run by Apple's Documented APIs and built- in interpreter(s)."(emphasis mine)
I still maintain my position that for quite some time now developers should have had no expectations to be able to write applications for the iPhone in Ruby or Python, or some other interpreted language or at least to be able to distribute them through Apple's app store. Although in reality there seem to be plenty of applications in there that have some scripting component or another.
The curtain has closed; Apple is now evil... move on.
No, they can't, because the predicate for the Microsoft enforcement action was their monopoly position in the desktop market, and the cause of action was their attempt to use that monopoly to create new monopolies.
Apple has nothing close to a monopoly on smart phones (they are crushed by RIM).
I'm also confused by the thesis of this blog post, which seems to be that there was a bait-and-switch pulled on the Apple dev community writ large. The vast, overwhelming majority of iPhone apps are written in ObjC, and Ruby is no more a second-class citizen on OSX today as it was last year.