Chapter contents:


This chapter decomposes the maemo platform into components and describes the scope of those components in the platform. Also the overall design is shortly introduced, with the most commonly needed programming APIs.

Overall design

Maemo is a Debian GNU/Linux based embedded operating system designed for networked mobile devices, called Internet Tablets. Being based on Linux and Debian which support the ideology of sharing the source code, collaboration and open development model, maemo is also open source.

Maemo runs on a recent 2.6 version of Linux kernel. The user space software links with the GNU C library, glibc. Maemo aims at being as much compatible with the mainstream Linux systems as is possible, reducing the time and effort needed for porting existing applications and developing new ones to maemo platform.

The package management framework comes from the Debian distribution, simplifying and automating the process of installating, upgrading, configuring and uninstalling software packages.

The user interface architecture is based on GNOME framework, especially on GTK+ widgets. GTK+ has been further extended by Hildon to better suit the needs of an Internet Tablet. The actual user interface engine under GTK+ is X Window System (X Server) with Matchbox window manager. GUI applications are built using Hildon framework and GTK+ widgets, although using X Server directly with Xlib API is possible, but not recommended.

Below is a picture of the software "stack" for the maemo platform:

[ Software stack of the maemo 4.x ]

Core components

Linux kernel

The Linux kernel is the heart of the maemo platform. The kernel is loaded at very early stage during the boot process by a bootloader. Maemo platform is based on Linux kernel version 2.6 and current Internet Tablets utilizing the maemo platform use the OMAP chipset containing a ARM processor and a DSP unit. The kernel implements the memory management, process management, networking services as well as hardware specific device and bus drivers. The device drivers include e.g. USB, LCD and WLAN. The bus drivers include e.g. I2C and Flash bus. Part of the kernel functionality, such as device drivers, network protocols or file system support can be implemented as loadable kernel modules which can be loaded or removed during runtime. Kernel is stored on a separate flash partition on Internet Tablet, called kernel partition. User space applications communicate to the kernel using system calls.

It is possible for developer to modify or configure the default kernel, as the sources for kernel are available. There is a guide at maemo community website describing the process. Modified kernel can also be flashed back to the device, but when doing so developer must take into account the size of the kernel partition on the Internet Tablet, as there is no way to change its size.


At the last state of the kernel boot process the initial file system, InitFS, is mounted as the root file system. InitFS is a small file system used during the boot time, containing necessary binaries to bring the Internet Tablet normal state. After the boot scripts on InitFS are done, the final root file system is mounted from flash and the InitFS is mounted into /mnt/initfs.

Base system

The root file system includes the basic filesystem hierarchy of a Debian system and Debian based core distribution with few exceptions. The coreutils and Bash (shell) has been replaced with size-optimized Busybox, which combines many common UNIX utilities into a single small executable. Few utilities have also been dropped out because of space saving.

As the maemo platform includes all the basic UNIX utilities and a shell, it is possible to create and run shell-scripts and combine those small but powerful utilities to solve complex tasks easily. The user accounts and groups are handled just like stated in the first chapter. Internet Tablets have predefined user accounts, user and root. The root account should be used for administrative purposes only and is protected by default.

The file system hierarchy follows Filesystem Hierarchy Standard (FHS) quite well. All applications are normally installed under the /usr directory and must use the hierarchy described for /usr in FHS. In addition to the directories specified in FHS, the following are placed under /usr:

The user's home directory (/home/user) can be used quite freely, with the exception of the directory /home/user/MyDocs which is reserved for user's own files (e.g. documents, images) visible through the GUI.

File management operations for user files must be performed through an API provided by the application framework as maemo platform manages file operations case-insensitively, even when Linux file systems are case-sensitive.

Below is an image of different partitions and their relational sizes on the internal flash of the Internet Tablet:

[ Partitions on Internet Tablet internal flash ]

Generic programming libraries

Below is a list of the generic programming libraries used for developing applications on maemo platform, and a short description of them.

GUI programming interfaces

When developing GUI applications on maemo platform, following libraries are essential:

Audio and Video programming interfaces

The maemo platform includes several APIs to handle multimedia (audio and video) in applications:

Communication interfaces

The Internet Tablet contains WLAN and Bluetooth hardware for connecting to the internet wirelessly, as well as the USB port for cable connection. The maemo platform contains several APIs to handle the connectivity in the application:

Other components and interfaces

The maemo software stack image contains a lot more applications and interfaces than the generally used listed above. Here is a short description of the most important ones:

Copyright © 2007-2008 Nokia Corporation. All rights reserved.