Why Apple Changed Section 3.3.1
daringfireball.net
daringfireball.net
Where he gets it wrong is here:
IPHONE DEVELOPERS: No change. If you’re a developer and you’ve been following Apple’s advice, you will never even notice this rule. You’re already using Xcode, Objective-C, and WebKit. If you’re an iPhone developer and you are not following Apple’s advice, you’re going to get screwed eventually. If you are constitutionally opposed to developing for a platform where you’re expected to follow the advice of the platform vendor, the iPhone OS is not the platform for you. It never was. It never will be.
There are many good applications written in something other than C, Objective-C, C++ or JavaScript available for iPhone. In Apple's hubris to strike down Adobe and other opponents, they've caught many well-meaning developers in the crossfire. Especially in regards to independent and startup developers, being able to choose your tools -- tools that otherwise obey every other rule in the developer program -- is hugely important. I think most HN readers will resonate with this claim.
I can't stand Flash. I also don't much like plain JavaScript. I prefer to write applications in a mix of C, Scheme/Lisp, or Haskell. I can probably write faster and more stable iPhone apps with these tools than a 10-man-strong team can with C and Objective-C. I definitely cannot write faster and more stable iPhone apps with C and Objective-C than a 10-man-strong team can with C and Objective-C.
Apple's banning of languages other than "The Three Cs" strikes developers as egregious because we know how much the language you use affects how you think. Apple is telling us, now, how we should be thinking when we solve problems. They are asking us to agree to use only an approved set of thoughts.
They have a right to, it's their platform. We also have the right to walk away from this self-imposed kiddie pool, and go back to the ocean to ride the big waves.
Any examples? I'm genuinely curious since I've heard that a few times already today but haven't heard of any specific examples.
Quartz 2D is written in the C preprocessor language, not primarily C. To use it, you mostly use C preprocessor directives, not C. It's then translated into C by a compiler, before being compiled by the actual C compiler.
I still haven't seen anything specifically mentioned that's not written in C.
Other people have. Tons of applications, probably tens of thousands at the very least make direct use of some kind of abstraction tools. Hundreds of thousands (or all) if you take Apple's clause literally.
You mentioned using Lisp & Haskell to write iPhone apps, which ones are those?
I'm not obligated to tell you.
Who else is doing this and which apps have they published?
Is this a serious question?
My own apps: I'm not obligated to tell you. If that pisses you off, sorry, then just ignore that part of my claim, I don't care.
Who else is doing this: Any game made with Unity. Any game made with Mono. Any game made with Lua. Any game made with its own runtime. Any game made with Python. Any game with an advanced preprocessor. Any game that manages its own memory.
Any software with a parser not written directly by hand with C arrays (i.e. any that are worth a shit.) Any software that uses C macros (all of them.) Any software that uses garbage collection. Any software that uses Core Data (violates their own rules.) Any software that has linked in a regex library.
Things that would not have been created had their creators had to work with the same limitations they now impose on others on their platform: every single part of their toolchain. Objective-C, graphics, the compilers, everything.
(also, nicely done. the iPhone port is very slick)
Microsoft would never do this. They are the "developers, developers, developers" company, after all. They even invest money in programming language research and actually make the academic stuff production capable.
Apple just adds half-baked features to dead languages. "Yay."
Have you?
If so, would you say it was a function of the quality of the other programmers, or could it be distilled to purely tools?
Genuine interest (since I love languages for their own sake and the expressiveness they allow): what tools + languages did you use?
This is where he goes wrong. Using multiple layers of abstraction has always been a win for programmers, and not just for compatibility across platforms.
This move by Apple is equivalent to IBM saying in 1970 that programmers couldn't use high level languages-- that they had to write programs only in IBM 360 machine language. The loss would not have been only in portability.
I think their loss is about to be in the form of an exodus of developers.
Plus, they have so many apps, even if they lose a lot of their high-quality developers, that'll probably just be a tiny blip when it comes to total apps being submitted. It might take a long time to notice that the quality of apps has gone down, since it's so hard to quantify, and there no doubt will still be some quality apps. And them noticing quickly is what we need so that they'll reverse this rule.
But the reason the iPhone became popular is not because there was a very high quality app version of wolfram alpha or a gold game, but because there were reasonably good quality apps (at a good price) that scratched relatively small, (dare I say it?) long tail, itches.
You can be relatively sure as a new iPhone owner that you'll be able to find your fishing lure guide app, or your app to order emergency socks or whatever. I'm willing to bet that lots of those apps were not written in one of the approved national languages of the Union of Soviet Apple Orchards.
This was true when an exodus from Windows started. Windows still has a lot of committed talented developers, but it is also true that a lot of developers moved away from Windows and it hurt them long term.
"It might take a long time to notice that the quality of apps has gone down, since it's so hard to quantify, and there no doubt will still be some quality apps. And them noticing quickly is what we need so that they'll reverse this rule."
I personally would hope that Apple does not change this rule for years (and add more dickhead rules) till a more open/dev friendly competitor has sucked up all the devs who move away and achieves critical mass.
Don't distract your opponents (and evil people in general) when they are doing something stupid.
You can be sure that if Unity games are taken out of the app store, people will notice.
Which just shows that some people go to great lengths to explain Apple's anti-competitive behavior ... "it's OK, it doesn't affect me" ... maybe not in the short term.
So yes, one less developer for iPhone (except as a web platform, if they are lucky). Also one less MacBook pro sale for Apple (probably, because I'm so steamed about this.. though .. heh, maybe lets see how the refresh looks next week and then we'll see)
CS5 also targets android.
Nope, we're good.
What's your definition of 'normal'?
What if you abstract out your logic with a DSL that compiles down to iPhone native code? This is in violation of their terms of service.
What if your DSL just generates C code? That also looks like a terms of service violation.
Now what if that DSL is a yacc grammar for a network protocol or configuration file? Not an abnormal use anymore, is it?
And that makes Apple evil. At least, it does in the sense that Google uses the term in "don't be evil" - I believe pg translated "evil" as something along the lines of "trying to compete by means other than making the best product and marketing it honestly".
And the point about the quality of apps generated is complete bullshit and he should be ashamed of saying it. The quality of Unity3D and other frameworks is probably above the average for the App Store. In fact the whole point of these frameworks is making generating higher quality programs easier.
What really pisses me off with Gruber's post is in defending the indefensible he's making it harder for Apple to realise that this is a mistake and correct it.
Apple should really just have said what they really want - you can't put anything in the App Store if its available for another platform. The problem being they don't want to exclude the big players, so they just make it hard and unpleasant for the little developers, yet again.
Edit: I mean cross platform application frameworks. Of course there are cross platform things have become de facto standards.
However, cross-platform frameworks that don't try to replicate platform's native UI experience, have been and are successful, mainly in games. And Flash can be seen as a one and by far the most succesful contender in that space. After HTML/JS that's it.
Does html count? Posix? It could definitely happen.
Instituting a blanket ban on all frameworks (regardless of crossplatform status - which 3.3.1 doesn't mention) and restricting languages for fear of being displaced is ludicrous. Even if Apple's fear was legitimate there are plenty of other measures they could take if this problem actually occurs.
Whatever Apple's intentions this wording is a mistake and they need to revisit it. Good frameworks that make the App Store better are going to be pushed out by this.
Renderware made every cross platform game made in the PS2/Gamecube/Xbox generation look like garbage because the PS2 ended up being the lead SKU.
I am in no way defending the change to 3.3.1 though, I think it's bullshit.
As a developer, I'd LOVE to write-once, compile everywhere, and be done, but as a user, I know that creates terribly inferior product.
i.e. it is rational for them to optimize the number of Apple products get used.
He's wrong about MonoTouch; It lets you code in the .NET language, yes, but it still targets the iPhone APIs. By the same logic, they should ban C and C++ because you can write iPhone applications and Windows applications in it.
He says "Adobe’s goal isn’t to help developers write iPhone apps" which is just silly. Adobe's customers are developers and it's in their best interest to help their customers make iPhone apps. Their technology is Flash so that's how they do it. It's really Apple that doesn't want to help developers by restricting their choices.
Good lord, advice? He's making it sound as if it were some conventional programming suggestions on how to avoid buffer overflows.
This is a silly thing to say. From what I've seen of MonoTouch the UI looks like the same Apple chrome to me. Unity seems like a good choice for gaming and most of the games look great.
The irony here is that Titanium apps are fully native and make use of iPhone-only features, and they’ll be rejected. Alternatively, you could open up a web view in Objective-C, and pop whatever slow, non-native crap you wanted in there, and not be in contravention of the rules!
http://developer.appcelerator.com/blog/2010/04/iphone-os-4-0...
I don't see how the user experience would be different for an app written in Haskell versus an app written in Objective-C, except that the Haskell app will run faster and crash less (in general). "Platforms" have nothing to do with it; programming languages are just a way to convince the CPU to do stuff for you without telling it about every memory load.
Anyway, it's scary to watch the Reality Distortion Field affect otherwise rational people, like Gruber. Perhaps I just misread.
He's let himself be thoroughly trolled by all the gadget blogs that alternate between calling the iPhone the best/worst thing that's ever happened in search of pageviews and as a result became very defensive and self-righteous lately. The world has been divided into those who "get" and those who don't "get" the iPad.
Nobody should be using the original script, and unfortunately many of the other implementations out there are direct transliterations that copy all of its absurd bugs, like where if you mention the MD5 hash of another token in the document, the hash will be replaced with the token, because it uses that as an inline escaping mechanism!
See the changelog for what started as a PHP transliteration and turned into a rewrite that squashed 123 (!) unacknowledged bugs: http://michelf.com/projects/php-markdown/
The worst part is that he outright refuses to either disclaim or fix his implementation, and he's repudiated everyone else's attempts to do so. He's a terrible programmer, and a worse maintainer. I'm not saying he should be forced to steward a community, but barring that he should at least have the decency to take it out back and shoot it.
Is Gruber a programmer?
Why would it matter? I don't see how the user experience would be
different for an app written in Haskell versus
an app written in Objective-C, except that the
Haskell app will run faster and crash less
(in general)
I assume you wrote some apps for iPhone and did some benchmarking, right? "Platforms" have nothing to do with it
This is where you are really wrong. Platforms and cross-platform development
makes are huge difference in user experience. Take Android: if you try to
target as many devices as possible you aim at the lowest common denominator.
That means that more capable devices will provides lesser experience than they
are capable of. Now if your tool allows to target Andorid and iPhone it gets
even worse. Gruber's example with Kindle apps is spot on, it's ugliest app for
Mac I've ever used.How are those as-fast-as-C Python networking scripts built around epoll coming along?
It's a pretty standard line: Apple does it better by scrupulously maintaining identity of interface design and conventions; Linux or Android or Windows is less good because there's so much more variety (visually and in terms of what buttons do what). (Please note: I'm describing a common argument, not taking sides on it one way or another.)
So in that sense, he's not really talking about programming languages so much as UI toolkits and I suppose the conventions that go with them. If there were a way to turn Haskell code into a perfectly Cocoa UI, he might very well like it fine. Though, actually, in my experience, he usually finds a way to side with Apple no matter what else is the case...
That is true, but not all of it - if Apple allowed code generators there would be a glut of cross-platform apps being written in this middleware as developers try to write-once for multiple platforms (Android, BB, etc).
With this you will also see apps that do not follow Apple's HCI guidelines, eschewing Apple's aesthetic and workflow standards for lowest-common-denominator cross-platform UI. This would be a death blow to Apple's platform, since its primary advantage is having better UI than everyone else (this includes 3rd party apps).
IMHO this is more frightening to Apple's continued dominance than simple tools/language lock-in. If you didn't like Obj-C, Apple is not terribly pained to see you use something else... but if you bring Android-calibre UI onto Apple's platform Steve will be very sad.
With this you will also see apps that do not follow Apple's HCI guidelines, "
Good points but do they really matter as long as Apple controls the AppleStore ? It is not as if anyone can sell or deploy these without Apple's approval. I am not disputing your larger point (which is a good one), but how would an app that broke the HCI guidelines (say) get approved? Do such apps get approved today?
Apple could simply use its approval process to block apps if they started using non-native widgets anyway, and that wouldn't be contrary to its current HIG.
But it goes without saying that Cocoa and Objective-C are still small potatoes compared to Flash and C#/.NET, despite the iPhone's recent popularity with developers. Platforms are always competing for developers, so it shouldn't surprise anyone that Apple would take steps to protect the viability of their development platform.
I'm apologise in advance as I strongly dislike the term, but Gruber is a fanboy. You have to keep that in mind and know to bring a sack of salt to daringfireball.net. That said he gets enough right on the money to keep reading. Just don't forget the salt!
Seems more like an explanation of their motivations rather than a defense.
Not to be a Gruber apologist.
And if your explanation includes claiming, falsely, that all those affected were producing shitty apps then that's not an being an explainer, it's being an apologist.
Just like they didn't flee because of restrictions on which Apps got into the app store. Certainly no one liked it, but they kept writing apps just the same.
The iPhone has sexiness and installs on it's side, that will keep the vast majority of programmers chugging away at C / C++ / Objective-C despite their misgivings.
On the other hand, when I develop with Flash CS5 I don't download iPhone SDK and read no License.
Could the same legal argument, in some way, be applied to the new section 3.3.1 of the iPhone Developer Program License Agreement(iDPLA)? Someone with a legal expertise could say something about the matter? If I'm not wrong the iDPLA is a American contract, and also it's not an electronic device, so I'm confused.
This is a real question, I do not want to criticize or praise Apple or the iPhone or whatever else.
If that is indeed Apple's instruction and what developers need to abide by, lets lobby the processor manufacturers to mandate that apps for their processor must be "written" in their assembly.
Also if "you" as a company hire someone to "write" an iPhone app which you submit to Apple, then technically you didn't "write" it either.
Any physical interpretation of "write" doesn't work. Even if they changed it to "type", I can generate program B and literally retype it into the computer to satisfy the legality.
In simpler words, the requirement seems just plain stupid and invalid to me. Fire the lawyers who "wrote" that :)
But the contract term as it currently reads certainly seems sloppy.
What if I hire a human to do the translation? If even that would violate the agreement, then the "original written language" of every program is the plain language specification document (that is, if you write one).
Heck, XCode has project templates that "write" starter code for you. So, technically, no iPhone developer "wrote" every single line of copyrighted code.
.. and (someone else mentioned) copy pasted public domain code, apps ported from other platforms, are all ruled out.
Basically, it seems that this clause reeks of a lack of understanding of the nature of software.
The moral of the story is, "Don't work with assholes when it can be avoided."
Anyway, it all depends on what exactly they want to accomplish with this clause and it is poorly worded at the moment for whatever that purpose be. Hope Apple clarifies soon.