raganwald
(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Monday, January 22, 2007
  There's a Cross-Platform Tempest in Apple's Teapot. Again.


So the iPhone won’t run Java. Specifically, no applets, no desktop applications, and none of the JavaME games and applications that are already running on 80% or more of the world’s existing smart phones.

Well, we’ve seen this before. Do you remember that the Macintosh did not run DOS applications? For good reason: a DOS application is nothing like a Macintosh application. And guess what? A JavaME application is nothing like an iPhone application.


iPhone applications have been carefully designed. They use the new iPhone interface. They integrate with each other. The entire purpose of the iPhone is to make phone applications work, make them useful and accessible for the vast majority of people who are not gadget enthusiasts.

Of course, someone out there loves their XYZ application and will say, “the reason to run JavaME is so that I can buy an iPhone and run XYZ.” Sorry, that’s not a reason. That’s a reason for that person to stick with their existing handset. Lesson one of product design is to decide who is not your customer as well as who is your customer. People who want to run their DOS applications on a shiny new iPhone are not part of the iPhone’s target market.

People who buy a phone, but don’t use 95% of its features, much less install new applications, are the iPhone’s market. People who buy a phone, learn how to use most of its features, and then install even more features by downloading JavaME programs? They are not a priority.



Although that makes compelling sense to me, there’s a much more important reason it doesn’t matter whether the iPhone runs JavaME. It’s the same reason It isn’t important whether Apple opens up development to third parties or whether there’s a FORTRAN-to-Cocoa bridge for iPhone. The reason is that native API development is so last century. Well, not really “last” century, but try raising VC funds (or YC funds) for your great desktop application idea.

Let me put it another way: the iPhone does run Java applications like ING Direct’s online banking (a personal favourite). It also runs Ruby applications like 37 Signals’ Basecamp. And Python applications like Tabblo. It’s 100% open: anyone can write an application for iPhone. In fact, this weblog is available to read on every iPhone sold. Right out of the box, no fancy installation!

Although the idea of skipping from WiFi sites to Cingular network and back and forth seems a little sketchy, I have a feling that the WiFi connectivity will turn out to be the killer application for iPhone. There’s lots of free public WiFi around, enough to make web servers a reasonable platform for iPhone applications.

So instead of worrying about whether iPhone runs the JavaME version of Tetris, why don’t we see how much of flickr works on an iPhone? Seriously, for every person who wants their JavaME XYZ application, how many people might use their del.icio.us bookmarks, their Google docs and spreadsheets, or even their office time tracking application on an iPhone?

Exactly.
 

Comments on “There's a Cross-Platform Tempest in Apple's Teapot. Again.:
Yeah, I couldn't care less about JavaME applications, personally.

But it still pains me that the iPhone will be closed to third-party developers. I can think of some pretty cool applications that need more than Safari itself can provide: Phone integration. Camera integration. Local storage, synchronized to a web site.

And if I could actually get access to the OS X APIs, well, then I could hack the phone into all sorts of sweet new things.

It's sort of like the difference between old-school Compuserve and the Internet: More crazy stuff always happens when you invite the world to play, even if some people want to do ubergeeky things.

So there is some reason for programmer (and end-user) sadness here. But even if we can only write web applications, it might turn out to be a pretty interesting platform.
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

Books
What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /