Penguin calls

Last Friday, OpenMoko launched its highly anticipated FreeRunner smartphone, a Linux-based handset that's completely open in both hardware and software, and is designed to encourage third-party modification and customization. Although the FreeRunner's software platform is still incomplete, the device has attracted considerable attention from mobile software developers and Linux enthusiasts.

The FreeRunner handset is obviously a powerful tool for prototyping mobile software, but it isn't clear yet whether it's also ready for adoption as a personal smartphone. We won't have a conclusive answer until we get a handset to test, but we decided to take an early look at the OpenMoko software platform to get a glimpse of what it offers at launch.

In many ways, OpenMoko's platform strategy mirrors the diversity of the Linux desktop software ecosystem. There are a multitude of parallel options with many layers and varying degrees of overlap. This provides end users with an enormous amount of flexibility, but it also creates a lot of complexity. The choices are difficult to navigate, and the lack of a cohesive direction contributes to fragmentation and redundancy. OpenMoko's potential for success will be heavily predicated on the ability to turn choice and diversity into an asset rather than an impediment.

There are currently three separate software stacks that are available for OpenMoko handsets. The original OpenMoko software environment was built on top of GNOME Mobile and Embedded technologies including the GTK+ toolkit. As the FreeRunner launch date approached and the development priorities began to shift towards a stronger emphasis on mainstream consumer adoption, OpenMoko reevaluated its approach and decided to build a new stack on top of Trolltech's proven Qtopia mobile environment. The third stack, which will implement the FreeSmartphone.org APIs, is part of a long-term framework initiative that OpenMoko hopes will eventually ameliorate the problems created by fragmentation and redundancy while still offering developers a full range of choices.

Because the FreeRunner is a completely open device, users will be able to choose which platform they want to use. They will also be able to adopt any third-party software platforms that emerge in the future. We have already seen an impressive variety of Linux desktop environments and graphical shells ported to Nokia's Internet Tablet devices, so it is likely that we will see similar innovation on OpenMoko's handsets. Indeed, developers of the KDE desktop environment have already started working on experimental OpenMoko ports.

OpenMoko's GTK-based stack

The GTK-based OpenMoko stack, which is referred to as om2007.2, offers a moderately conventional finger-oriented interface and a variety of standard productivity, Internet, and entertainment applications. It is a reasonably intuitive environment and it adheres to a very high level of visual consistency. There are a lot of similarities between om2007.2 and Nokia's Maemo platform—both are based on GTK+ and use OpenedHand's lightweight Matchbox window manager. OpenedHand also developed several other important pieces of the om2007.2 stack, including the personal information management suite, which is called Pimlico.

The om2007.2 web browser uses Apple's open source WebKit rendering engine. As many readers are already aware, I'm a big fan of the GTK+ WebKit port and I've been very impressed with its small footprint and excellent support for standards.

In addition to all of the standard applications one would expect to see on a smartphone, a terminal application that supports entering commands with an on-screen keyboard is also included. Users have full root access to a BusyBox shell with all of the standard scripting tools like sed and awk. The stack also comes with a multitude of games, a media player application, a calculator, a package manager for installing additional software, and other tools.







Booting om2007.2





The home screen





The dialer interface





OpenMoko's WebKit-based browser





The application launcher





The media player





The terminal utility

To build new applications for om2007.2, developers will need to set up a cross-compilation toolchain on a Linux system. The OpenMoko wiki offers detailed instructions for this process and also describes how to compile and package a program. Developers who want to go further and modify the underlying platform can use the OpenEmbeded infrastructure, which provides an elaborate build engine for generating package sets.

The platform exposes phone capabilities through the gsmd daemon, which sits between the GSM modem and userspace applications. Instructions can be sent to the daemon through standard UNIX sockets. The libgsmd library is an abstraction layer that wraps the instruction protocol with a simple API. There is also a gsmd command shell tool for testing and debugging that gives the user interactive control over the daemon. A wide range of functionality is accessible through the daemon, including the ability to dial and answer calls, toggle the phone's vibrator, detect signal strength, read and send SMS messages, and retrieve the phone's battery status.

For rapid prototyping and avoiding the hassle of having to set up a compiler toolchain, developers can use Python to create OpenMoko applications. Python isn't officially supported, but the interpreter is available from the main repositories and GTK+ bindings are available from third-party repositories. The Python library for interfacing with gsmd isn't there yet, but there are already several useful Python-based utilities for OpenMoko that send instructions to the daemon by using the command line gsmd control utility. These include the SettingsGUI tool and the SMSTool.