Darwin's Theories Blog

New Theories for a New Time

OpenMoko and Android

Two approaches to an open-source cell phone
A few people have asked me at various times for a comparison of the  OpenMoko and Android cell phone projects. Given that I advocate for the former, and also for Java which is (and is not) the base language of the latter, I am expected to be able to say something intelligible by way of comparison. So here goes.

Android is a project spearheaded by Google to make an open-source phone. It uses Linux and its own Dalvik virtual machine, and applications are written in Java against the Android API and compiled down to Dalvik bytecode. Android does not expose the rest of the Linux services. Android phones are available from a few carriers [Update: quite a few now!]

Openmoko, funded by Openmoko.com, is at the other end of the spectrum: it also uses Linux, but exposes all of it to the developer. The "main" stack of phone apps has been re-written several times, using various X-based toolkits. The "official" OM2009 stack is in large part written in Python. C/C++, Java and Perl are all available. Openmoko phones are available only from Openmoko.com. [Update: only from https://projects.goldelico.com/p/gta04-main/[Golden Delicious]. However, because it is all open source:
  • you can run Android on Openmoko hardware;
  • you could (people have) run Openmoko software on other devices, including Palm PDAs, other Linux phones, and software emulators;
  • you can probably run Openmoko software on Android hardware;
  • you can run QTopia on Openmoko hardware;
  • you can run one of half a dozen Linux distributions on your Openmoko hardware;
  • you can (eventually) run other OSes such as OpenBSD on Openmoko hardware;
  • etc.
From one point of view, they are not enemies. Both support the open source model. But as Openmoko developers have pointed out some time back, Android sits on top of Linux, abandoning most of the open source world and reinventing its own universe. Openmoko embraces all existing open source projects and any new open source comers. As a single example, communicating to your Openmoko phone from a desktop/laptop computer consists merely of running the industry-standard ssh and scp programs, included with every *Nix and readily available for those other OSes that need them. Talking to your Android phone requires finding, installing, and figuring out how to use an Android-specific program called "adb" (at least the third use of this name, after Unix' Algol/Another DeBugger and Apple's Desktop Bus).

From another point of view, of course, they are competing. Competing for market share (neither has made much inroads in the consumer space [Update: Hey, I wrote this in 2009. What can I say?]). Competing for developer mindshare. Android tends to get a lot more press, partly because of the "big G" lineage.

People sometimes ask if I think Openmoko should just fold up and go on to something different, given how far ahead Android has moved? I've never been a fan of quitting while you're behind. Imagine if Linus Torvalds had quit while Unix was ahead; his then-little school project would never have seen the light of day, and we'd all be running BSD and System V. Nothing wrong with those - BSD was already on its way to becoming a full open source *Nix, as represented today by OpenBSD, FreeBSD and NetBSD - but things would be rather different in what is now the Linux community, to say the least. Or if Bill Gates had quit while IBM was ahead. Or if Steve Jobs had quit while MS-Windows was ahead. Or if the U.S. had quit the space race when the Russians launched Sputnik. You get the idea. Don't quit while you're behind, nor when you're ahead. As Nathaniel Branden once put it, "a beating heart is a living heart" - so keep on pumping!

And, at any rate, the "real" release of Openmoko software, OM.2009, is almost upon us; I am running a beta of it on my Freerunner (GTA02), and it's actually usable as a cell phone. Butt-ugly compared to some of the earlier releases, but it "just works". Formal release is expected this summer.