A little over a week ago, Apple announced the "iPad":http://www.apple.com/ipad/. Unsurprisingly, after weeks of rumors, people were disappointed. With so much hype leading into any Apple event, it's hard for them to not disappoint people. Whilst there are many complaints about the iPad, I'm not going to go over all of them here; it's ground that has been well-trodden in the last week and I have little to add to what has already been said.
Needless to say, I shall be buying an iPad on release day -- not just because I want to develop for the platform, but because I'm genuinely excited about owning one.
There is, however, one issue I want to talk about: multi-tasking. People have wanted multi-tasking on the iPhone for a while. As of writing, it's the number one request on "pleasefixtheiphone.com":http://pleasefixtheiphone.com/ and a lot of people were disappointed to find the iPad doesn't support multi-tasking either.
h3. Multi-tasking vs multi-process
Let's be clear about something: the iPhone, iPad and iPod touch all support the ability to run more than one application at a time. They all run OSX and are no different in that respect.
What you cannot do is run more than one application in the foreground at a time, and only Apple's pre-installed apps can run in the background (or run some kind of background-helper utility process). This is why, for example, when you quit the iPod application, the music keeps on playing or why MobileSafari is able to re-open so quickly.
When discussing the issue of multi-tasking, I feel it's important to make a clear distinction between the ability to run processes in the background and the ability to switch between more than one application without quitting and opening another one. When people talk about "multi-tasking", I feel that they often mean a mixture of the two and this simply conflates the issue. For the purposes of this discussion, let's call the latter multi-tasking.
I firmly believe that multi-tasking on the iPhone or iPod touch makes little sense. They are clearly resource-constrained devices and I don't think the ability to multi-task adds a lot. However, there is a clear argument for being able to run (digitally-signed, tightly resource-managed) background processes.
h3. Background processes; a better push-notification service
When Apple announced their push-notification service (APNS) it seemed like a reasonably elegant solution to _some_ of the problems developers faced when it came to getting updates from their web-based service to the end-user. The reality is that there are a number of other problems that the APNS does not solve well and let's not forget the additional infrastructure overhead of running a push-notification service.
For many of the things people use as an argument for multi-tasking, the ability to run a background process has an advantage over the APNS (or in some cases, the APNS is of no use at all): music apps such as Spotify and Pandora could open their audio connection in a separate process that persists while the UI process is closed _(note: I'm deliberately ignoring the issue of how this would interact with the native iPod app)_; RSS readers could download updates in the background on a periodic basis; applications could schedule alerts at specified times (although some kind of Calendar API would perhaps be more useful here).
Fortunately, OSX already ships with a service designed specifically for running and managing these kind of processes: launchd. Developer Jim Dovey covers this in "much more detail":http://quatermain.tumblr.com/post/318771792/iphone-4-0-hope-background-tools-via-launchd and I think (I hope) he's on the right track.
h3. So what about the multi-tasking, huh? It's the UI stupid!
Now, for the iPad, the same argument for background processes remains; however, with a bigger screen and more processing power, multi-tasking seems to becomes more useful. I'm less interested in the debate over why it would be useful (personally, I could live without it) but more; will it happen and if so why hasn't it happened already?
My current belief is that we will see multi-tasking on the iPad in some form or other come this year's WWDC. I believe the iPad has enough resources to multi-task to some extent. Clearly the OS is capable of doing so. But here's one thing that people frequently seem to forget: it's not just an engineering problem; it's a user interface problem.
On the desktop, this problem has been solved many times - Cmd/Alt+Tab; Expose, the Dock, the Task Bar etc. The iPad has none of this. The iPad is all about multi-touch, so some kind of gesture-based solution would seem to make sense; but which gesture? What would the UI be? How would you avoid conflicts with app-specific gestures?
If Apple were to implement multi-tasking, these are just some of the questions they have to find the answer to. Look at how long they took over Cut/Copy/Paste. They could have rolled it in to an earlier release with a half-baked UI but they took their time. They waited until they thought they had it just right. This is how Apple operates.
h3. On the horizon?
A lot of people seem to believe the next major iPhone release (4.0) will bring this functionality to the iPad and iPhone. I'm undecided.
I'm yet to be convinced that Apple will ever implement full multi-tasking on the iPhone (remember Steve Jobs poking fun at task managers during the original iPhone launch?) but I believe it will come to the iPad in some form sooner rather than later.
With that said, it's important to understand the complexity involved; multi-touch is a relatively young technology and multi-touch multi-tasking is a brand new problem. If anybody can solve it well, I believe Apple can. Time will tell.
fn1. OK, the iPad and iPhone both have "docks" but you still need to exit the current app to get at it.
fn2. I'm loath to use the word _paradigm_.