Maemo Architecture

3.1 Kernel
Maemo uses a Linux 2.6 operating system kernel. Linux is an open source operating
system developed by thousands of volunteers and companies that share their work under
GNU GPL license. Architecturally Linux has a monolithic kernel. All kernel code
is run under supervisor mode. Kernel can be extended at runtime by dynamically loadable
kernel modules. Various APIs exist for device driver, file system and networking
protocol modules. Developers can add new kernel modules.
The maemo kernel is based on the ARM kernel branch and can be modified, recompiled
and flashed by a developer. The Kernel Guide for maemo[34] gives details of
these procedures. Some of the modules like WLAN come as binary only which means
that the module APIs should remain unchanged if kernel is changed by a developer.
3.2 Base distribution
Maemo is based to a large extent on the same open source components found in the
Debian[7] Linux distribution. Maemo builds on GNU/Linux for operating system core
and GNOME/GTK+ for user interface architecture.
Maemo uses the same component packaging system as Debian - dpkg-tool’s binary
packages. New packages can be installed, old ones can be removed and the whole system
can be upgraded by the package management framework. The file system structure
also comes from Debian.
In order to run the software on a Internet Tablet, various optimizations and enhancements
have been made. These include power management related issues, touchscreen
input, performance and size optimizations. In order to reduce space maemo uses a shell
and command line tools from Busybox[4].
Also notably the maemo platform adheres closely to the GNOME Mobile
Platform[16]. At the time of writing, maemo uses all the same components as this
platform except for service discovery,The maemo architecture guide[39] goes gives more detailed information of the overall maemo architecture.

3.3 Application framework
The purpose of an application framework is to help application development by providing
a standard structure for an application. Applications that have a graphical user
interface tend to have a similar structure, e.g. the event-driven runtime model. The
events are triggered by the user, for example, by touching a button on the touchscreen.
Events can also be triggered by the application engine itself. An example is when
new data is received from the network. The application framework of maemo is called
Hildon. It is partially based on the same technologies that GNOME framework is built
on, most notably the GTK+ components.
Hildon has several additions and enhancements to GNOME/GTK+ including
Hildon widget set, Sapwood theme engine and image server, task navigator, Hildon
control panel and status bar. Some of the changes to standard GNOME like Sapwood,
for instance, are to reduce memory requirements and to improve speed on a small
hand-held device. In addition, Hildon framework has many features to support mobility
like automatic state saving, touchscreen input methods, and window management
on a physically small device.
The programming APIs are familiar to GNOME and GTK+ developers. The framework
has GLib and GObject object management system underneath. The GTK+ widget
set is provided with Hildon extensions. The interprocess communication is done using
D-BUS messages. The user files are accessed through GNOME-VFS and multimedia
applications can use GStreamer to get accelerated support for various codecs. User
configurations are stored via GConf and an XML parser API is available.
The figure above illustrates the most crucial components and their dependencies
that the maemo application developer must deal with.

3.4 maemo compared to desktop Linux distributions
Ubuntu[71] is a popular Debian based Linux distribution for the ordinary desktop. The
Ubuntu wiki[70] lists the key differences of Ubuntu and Debian. As one of the design
principles of maemo has been to be as close as a traditional desktop Linux as feasible,
here the differences between Debian/Ubuntu and maemo are explained in detail.
3.4.1 CPU architecture differences
Where as Debian supports multiple CPU architectures, Ubuntu’s set is a bit more restricted.
Compared to that maemo is an embedded ARM EABI[2] distribution. Maemo
is also cross-compiled instead of natively compiled like Debian or Ubuntu. Maemo also
uses different versions of toolchains (GCC, glibc[19] etc.) than Ubuntu or Debian for
ARM feature support and maturity differences between architectures.
3.4.2 Security model differences
Instead of a multi-user system such as a traditional Linux desktop, maemo is considered
a single user desktop system. The security model in maemo is focused on protecting
the user from remote attacks and from his/herself, not from other users. Maemo also
uses suid root binaries and /etc/password where as Ubuntu enforces the use of sudo
and shadow passwords.
Unlike Ubuntu, maemo makes use of a root account like Debian does but has a trivial
default password. The user should really change the root password before installing
e.g. OpenSSH to the device with root login.
3.4.3 Base system differences
The greatest difference in the base system is that maemo uses a lightweight BusyBox[4]
replacement for the essential GNU utilities[20] on the device e.g. ls and sh. In maemo
kernel and initfs reside in separate partitions and cannot be updated with a package
manager like with a common desktop Linux. Programs in initfs use uClibc[72] instead
of glibc. Ubuntu has Perl and Python languages as essential packages, Debian has only
Perl and maemo has neither. Maemo has no debconf. Ubuntu uses Upstart for device
startup instead of SYSV init scripts used in maemo.

No comments: