Hacker News new | past | comments | ask | show | jobs | submit login
Letter to Steve Jobs (probablyinteractive.com)
142 points by blahpro on April 12, 2010 | hide | past | favorite | 45 comments



While I appreciate his letter, I think he needs to realize that quality of apps is an incidental reason.

As John Gruber stated, the real reason behind the band is to prevent someone from establishing cross platform development tools that will trivialize the choice between getting an iphone and another phone/OS.


It's all well and good to say such and such is the reason, but that's not what the license actually says.

What's to stop a tool developer producing an Objective C library and compiler that can target both iPhone and Android? The original source would still be in Objective C. If it was developed specifically for the iPhone, and only later for Android, it wouldn't be a compatibility layer - only the Android port would count as the compatibility layer, with the iPhone original being the native one.


If it comes to that, Apple will ban it's use. No biggie. As long as Apple thinks they have no competition to fear they can limit developers as they wish.

So let's all hope Android (or any other mobile platform) is very successful. Yes, you iPhone-Developers, too should wish for Androids success!


I don't think Apple would, or even could ban anything of the sort. I think they want people to develop for iPhone first, and if you want to automatically convert that code to Android and get the cross-platform inferior experience there, then so be it.


I agree with this as well... I'm sure Apple wants more apps for the Mac, and if someone were to create a 3D modeling tool targeted for iPhone apps that could produce cross platform Android apps, they'd welcome it into their Mac family.


I see this the same way. The TOS states that you are not allowed to use an intermediary layer to call the iPhone OS API. A C++ or C library that would abstract the underlying OS' API would clearly be such an intermediary layer and if there would be sort of a QtMobile or wxPhone or whatever framework that would allow you to write cross platform mobile applications in C++, Apple could ban it based on their new rules - even if you were sticking to the approved set of programming languages.


We're light years away from that happening.

I think Apple isn't used to being in control. Cross platform on OSX generally means poor versions of programs designed for other platforms. That isn't an inherent factor of cross platform tools, its because OSX is a minority OS. For instance in all the complaints about Firefox on OSX noone has stopped to think that Firefox on Windows is equally developed on a compatibility layer.

With the iPhone OS dominance in handheld software compatibility layers, Android and other platforms will be the minorities dealing with poor ports. Cross platform tools will be designed for iPhone OS.

Having said all I've said against section 3.1.1, I'd have to say I support banning Flash CS5 from the App Store, there is just no need to blanket ban compatibility layers. Maybe Apple should institute a framework whitelist - it'd certainly be up their alley in terms of control, and would let decent platforms like Unity continue.


If there had been a whitelist in place all along, none of these cross-compilers would exist. A whitelist would stifle innovation as much as a blanket ban.


Sure, I'm just thinking of options that Apple might approve of.


He never goes into how he uses Lua, but if he's still targeting Apple's libraries (rather than some cross-platform transition layer), they might not even be able to tell he is using Lua in the first place.


The author of the open letter is behind iPhone Wax: http://github.com/probablycorey/wax

It may also be worth nothing that the particular case of Lua was already prohibited under the iPhone DPLA section 3.3.2 which states that no interpreted code may be included unless it's run by Apple's interpreter(s). Wax embeds a third-party Lua runtime that does just that.


This is stated again and again on HN, but it is just not true. You could run interpreted code, it just wasn't allowed to download and run modules, everything had to be linked into the application.


That was true given early revisions of the agreement. If you revisit the language you'll find that the phrase "download and run" has been replaced with "download or run."

That said, there was talk about moving Wax to llvm-lua such that the resulting application would be compiled machine code. The new clause precludes this option entirely.

The only uncertainty left, now, centers around enforcement. There are a number of PhoneGap and Wax powered apps already in the store, and PhoneGap was even blessed as an approved framework. Only time will tell if that blessing stands.


I'll take a guess - Lua isn't there to abstract the iPhone. It's just there to make development faster. Apple won't clamp down on better apps, they will only target cross-platform abstractions. But it's still a bit worry.


Leave it to the suits to create artificial barriers.


Disclaimer -- I am not an iPhone developer, why? Two reasons: 1.) I don't own a Mac and 2.) I don't know objective-c.

Even though I can't build iPhone applications, to me this ban makes sense for the following reasons:

1.) Limits the total number of applications. Apple knows that the "100,000+ apps" is just marketing. How many unit conversion applications do you need or does Apple want clogging up their approval process.

2.) Reduces the velocity of the application submissions. Having a more controlled ecosystem means that everything isn't done at once. This is core to Apples strategy. Roll things out in phases; build features that people want over time. Cut&Paste, Multi-tasking...

3.) Forces people develop iPhone applications on Mac hardware.

4.) The more layers between you and the developers building the applications increases compatibility issues, which are out of your control.

5.) The more layers between you and the developers building the applications decreases the speed at which applications can take advantage of new features. Apple releases a new api now any developer using a 3rd party framework needs to wait for that framework to support the new API. This impacts the significance of the new feature.


#5 makes a lot of sense and is often overlooked. The argument often is that it is not the tools that determine the quality, of the app, but let's see: Adobe CS5 Flash2iPhone is developed without iPhone OS 4 in sight. The main target users for it are those who are not familiar with iPhone OS and frameworks and would enjoy just pushing a button and letting the tool to do the rest. The timing is such, that a flood of apps developed this way would arrive just in time iPhone OS 4 comes out. End user does not know and does not care which tools the App was developed in. No surprise this does not look pretty in Apple's eyes. I and cannot imagine Flash2iPhone style of app producing anything about mediocre. If it targets Android too — even more so. This way all you can get is unisex, unisize sportswear. Apple wants tailor suits and designer dresses.


What if my app doesn't need all the latest features? I don't see how this argument makes sense. After all, competing SDKs don't force their users to stick to them. If somebody has already written a couple of Flash apps for iPhone, but now wants to program a 3d shooter, nobody is stopping him from switching to Objective-C.


The needs of the many outweigh the needs of the few, or the one.


I don't understand the logical step here, I am afraid?


If Apple wants to limit the total amount of applications and at the same time improve the quality, they could get rid of the literally thousands of trivial books that are each an individual application. This could be for example done by forcing them to use in-app payment for loading new books or finding another organization principle.

There are relatively few conversion applications in comparison. Conversion applications are really not a problem.

How about the twenty or more music sequencer applications? Currently I would not easily find out which one is really good. Should Apple limit people submitting these applications? I'd rather have the market decide and have users rate these applications and an effective way to search for applications that are above some rating level.

Apple should think harder about presenting these applications to the user in such a way that finding and evaluating gets easier. It might also want to think about the rating mechanism and how it works.

Apple should spend less time in legal battles or building fences.


I disagree with (1) and (2) - why would Apple want to limit Apps? It seems to me that App #'s are one of the biggest things the iPhone has on its competitors and they don't want anyone to catch up. Android nearly doubled it's Apps accepted from February to March and I'm sure Apple are aware of it. They can already control App acceptance through their review process yet they've allowed 60+ fart apps.

Also, I think there needs to be:

6.) Prevent the possibility of Adobe gaining ground with an iPhone IDE. While I think it's unlikely, Apple would be hurting if masses decided Flash was a more productive way to create the many basic Apple Apps (such as fart apps, conversion apps).

7.) Hurt the Adobe CS5 launch. Days before release, really?


Have you seen the app store lately? Check out this link:

http://appshopper.com/music/a003-guitartube

Scroll down to see the other apps created by this developer. They're all cookie-cutter apps, each one for a slightly different genre of user. He has a Picasso video lounge -- for all those users who want to join the Picasso social networking video channel. I think the number of apps is pretty meaningless when you have dozens of crappy apps like this.


Speaking of compatibility layers, there is one very direct consequence of being inefficient on a mobile platform: battery life. I've become somewhat sensitive to what I'm doing on my computer since I started using a laptop at home instead of a desktop computer. I usually avoid watching long videos or generally using any Flash app not only because it eats up power terribly when it works, but I may find a defunct Flash process hanging there eating up some 20% of CPU even after I close the page with Flash. The problem seems to have gone away lately, but bugs are bugs, you can't expect exceptional quality from Adobe. Neither from any other developer, especially if we are talking about cross-platform runtimes.

Apple's decision starts making some sense to me now (I don't develop for iPhone, so the ongoing drama is rather distant for me). The choice of languages - C/C++/Objective-C - clearly indicates that Apple wants efficiency, not just quality. Just add one layer between the language and the CPU (e.g. a virtual machine) and your phone's battery will die 5 times faster.

I'm sorry for the dynamic language folks, but we are back to the era of bits and bytes, at least when it comes to smaller mobile devices. I think smarter manufacturers of mobile devices will do something about it pretty soon, once they see the boost of quality in the iPhone market. Provided that actually happens, of course.


That's also 'Unfug'. Flash is just bad - especially if it does not use any hardware acceleration offered by the machine for video decoding.

Battery life is not much affected by a dynamic language. Because no one with a clear mind will implement things like decoding of video in a dynamic language. But what people want is to implement GAME LOGIC in another language and not in C.

The real battery life that matters is based on costly processes (like flash) and using costly services.

Navigation is such a thing. There are many many applications for Navigation. ALL of them are a huge source of emptying your battery.

I have used a single navigation application presenting a map and recording my track - battery life goes down to two hours. The reason is the screen, the internet connection for the map and the GPS receiver - all demanding power.

But people want to use those things. So in a car the iPhone gets electricity from the car. On a bike there are electricity adapters also.

There is NO reason to assume that a software written in a high-level language and translated to C will empty battery five times faster.

YOU CAN WRITE BATTERY EMPTYING SOFTWARE IN ANY LANGUAGE - AND SOME OF THESE APPLICATIONS ARE VERY USEFUL - LIKE NAVIGATION APPLICATIONS.

Take for example a program for the iPad that plots complicated mathematical formulas.

Apple forbids translating the formulas to machine code on the iPad - because that would implement another programming language and runtime on the iPad. So Apple's restriction SLOWS things down. At the same time besides computing the formula the plotting application does mostly calling UI function (drawing, 3d stuff, etc.) and waits for user interaction (zooming, rotating, ...). You can write that part in any language - it is mostly calling platform functionality. So in this domain it either don't matter (because the UI code is mostly calling to the platform) or is getting worse because of Apple's policies (because you can't compile complicated formulas on the device, because that would violate Apple's developer restrictions).


There is NO reason to assume that a software written in a high-level language and translated to C will empty battery five times faster.

Do you know how (a + b) works in different languages? Have you ever looked into Python, Ruby, Java, C/C++ (and (+ a b) in Lisp if you wish)? The difference is huge.

In dynamic duck-typed languages (a + b) means checking the types of the operands before you can decide what + means and before you actually do something, for example add integers, or maybe float's, or maybe concatenate strings, or maybe throw an exception if anything's wrong with the operands. Let alone variables take up more space - and that's another source of power consumption - because they can be of any type.

From my observation, dynamic languages are 3 to 10 times less efficient. And I wouldn't bet on developers' "clear mind" like you said.

Edit: and I'll let you go with "bullshit" (which you edited later) and a lot of irrelevant, emotional demagogy.


Most code in these languages is not computational intensive. That's not what they are for. Much of that code is calling platform functionality and library functions. Try to check some Perl on text processing vs. hand written C code. There is not much difference, because the Perl core routines are written in C anyway and optimized for that task. If you look at Python, it's again the same pattern. The core logic of some application is implemented in Python and the computational expensive parts are written in C (or even assembler) and called from Python. That's why these languages are often GLUE or SCRIPTING languages.

(+ a b) can be optimized in Lisp. You might not know it, but Lisp has type declarations and several compilers are making good use of it. This widens the range of software that can be written in Lisp. Typically this allows the core logic to be written in plain Lisp and more challenging parts in Lisp with type inference and type declarations - the yet more challenging parts can be written in C or assembler - some Lisps have inline assemblers or inline C - all have extensive interfaces to call routines written to C calling conventions.


I know applications may rely on API calls and may not be computational intensive. This is exactly why Python is not 100-200 slower than C, but only 3-10 times.

(+ a b) can be optimized in Lisp

(a + b) in C is always as optimal as it can be on a given platform. You don't put special effort to make it optimal ("oh, maybe I should declare a and b as typed... let's ask this on the forums if my compiler supports it and in what way").


what is a + b with two arbitrary large numbers in plain C? It can't even add correctly and implements something else than a plain addition. How can it be 'optimal'?

The effect of type declaration on numeric operations is pretty much the same for all Common Lisp compilers that support that. The type declarations themselves are standardized. What is often different is the amount of type inference a compiler does.

    * (defun twice (a) (declare (fixnum a)) (the fixnum (+ a a)))

    TWICE
    * (disassemble 'twice)

    ; disassembly for TWICE
    ; 02AB2CBF:       488D0C12         LEA RCX, [RDX+RDX] 
    ;       C3:       488BD1           MOV RDX, RCX
    ;       C6:       488BE5           MOV RSP, RBP
    ;       C9:       F8               CLC
    ;       CA:       5D               POP RBP
    ;       CB:       C3               RET
You think this will be five times slower than C?

Actually I would prefer C code to be slower and more safe by default. For that I would trade speed in a lot of places.


Fine. Back to the original discussion, I will be left guessing why languages like Lisp and Pascal were left out, even though they may be as efficient as C. Let's say, for example, because of the lack of iPhone-specific infrastructure (APIs etc). Supporting 5 rather than 3 languages would be too much, I guess, considering the 2 are not terribly popular.


Apple is not supporting them anyway. These platforms mostly support themselves.

Guess what, Lisp and others have C FFIs and Objective C bridges and can call Apple's library.


Very very well put.


This is a good example of approaching the subject like a non-idealogue that people can take seriously. The Salem remark was probably a bit much but at least it's near the end. Ending with a jab is always very tempting.


So, should Steve Jobs respond, "Well, I didn't expect the Spanish Inquisition..."? I think the author ruined his letter at that point.


In general it is transition time in business world. I doubt that future ventures will be able to “successfully” act in a similar way.

The only reason Apple is welcomed/accepted to do so by many (developers and users) is the excellence in their execution. Apple is not an “open” company - it never has been.

Especially as a developer one should have understood from the beginning that using their tools might possibly be somewhat of a Faustian bargain.

Sometimes I myself feel quite guilty for having chosen this path (trying to become an iPhone/iPad indie) but then I remember myself that the benevolence of this “dictator” is not really targeted at me as a developer but the users.

I admire that approach and that is why I am not sure if users will really benefit from these particular kind of policies/politics. I was planning to partially use iPhone WAX not only because I really like Lua (and it’s highly embeddable scripting capabilities) but because of productivity reasons as a one-man team. In spite of introducing additional layers of abstraction I think it wouldn’t have significantly impacted performance (Lua is fast).

I never cared about Flash nor any Adobe tools though and I am still among the ones who don’t care that much if they have to use C/ObjC because I like to use that set of technology but I see myself for the first time to become more than a little wary.


I doubt that section 3.1.1 means that you can't embed Lua anymore. People have been doing this for a long time, specially in games, and Apple has never seen that as a problem.

This is all about using C# and Flash to create complete apps.


I've seen it stated a few times that "EA uses Lua on the iPhone" - but my googling hasn't revealed any evidence to support this. Does anyone have a cite for this?


I think the extension of the ban can result in a pretty big deal. I think the bigger issue is that now, Lua itself seems to be entirely banned for use in any app for the iPhone OS product family, even if the app itself is written in Obj/C/++ and just using the Lua engine for internal stuff - a perfect example would be Lua's popular use for "scripting" NPC actions and game events in f.e. World of Warcraft and many, many other online games; World of Warcraft is not written in Lua, it's written in C/++, but uses Lua as a component for "internal" stuff. By this new decision, all apps building on similar functionality would be rejected.

I still maintain my stance regarding the main culprit in this debate, being that Flash should be set fire to and urinated on for the shitty product it is, but I definitely feel that the collateral Apple is causing here is a potentially much larger problem than the Flash problem they solved by the ban.


A letter to "a letter to Steve Jobs" letters

Yeah new policy sucks, Steve won't change it even if you send thousand of letters, sometime he might bother to answer, but it'll be the same thing.

Although if he answers, that's great, because then you can publish it again and HN can be flooded with more "letters to Steve" and "Apple stole my teddy bear" stories.


I have written a letter about specific techniques that I suspect are covered under the ban that should not be. I don't intend to publish either it, or if I get a response, the response. Frankly, one shouldn't be publishing these notes without permission from Steve Jobs; this is no different than publishing other email.

I'm hopeful that my letter causes change, but I haven't asked for an outright removal of the ban, but a clarification on these techniques.


This is probably the only open letter that'll get a reply...

... saying you and your apps are banned.


Odds that Steve Jobs will read or care one whit about this letter: 0% (with a margin of error of ±0%)


For crying out loud people... The sun's still shining, the beer's still cold, in some parts of the world people are still dying due to lack of clean drinking water, to go short... in the big scheme of things; Apple's recent decision DOES NOT MEAN A DAMN THING. Get some perspective, perhaps cry like a baby for 30 minutes or so and get on with your life... You'll be OK!


SERIOUSLY people, stop all the freaking letter to steve jobs post.. It's really overdone and doesn't get you much other than this response, sorry I just had to, go ahead and down vote me.


It's quite ironic that, in the week after the release of the iPad, this here is the only subject with a buzz among computer geeks on the internet.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: