Processor architecture

The purpose of this page is to answer the following (reasonable) questions that come up in the community quite frequently:

  1. Is it possible to make <some Windows application> run on Maemo?
  2. Why or why not?
  3. Why do the technologies I choose to use and support matter?

It attempts to do this by explaining about computer processor architecture, and relates that to maemo software and hardware.


[edit] PCs: x86 architecture

Most PCs are powered by processors produced by Intel or AMD that are referred to as x86-compatible. Pentium to Core2, Athlon to Phenom, all of these are CPUs (Central Processing Units) compatible with the x86 instruction set. Software that works on one will work on another.

[edit] Compiled Applications

What that means is that, no matter what form the applications take, in the end they have to be presented to the CPU as x86 instructions. The most efficient applications are often the ones that are compiled directly into a listing of these x86 instructions. For that reason, the most core parts of the operating system and the most demanding applications are usually distributed and stored as a binaries of this compiled state.

[edit] Mobile devices: ARM architecture

There is a much simpler instruction set called ARM and, because of its simplicity, many mobile devices use an ARM-based processor. (Note that "simpler" does not necessarily imply "better" or "worse" for the end user: ARM processors are typically smaller and thus easier to make.) This is true of devices that run Maemo. Because the instruction set is different, most applications that will run on a PC will not directly run on maemo without recompiling. Recompiling requires the original description of the application in some human-readable computer language (the source code) and this is not available for most commercial, proprietary applications (which are therefore referred to as closed source).

[edit] Emulation

The only way to use the compiled binaries for one architecture on another architecture is through a translator. This is called an emulator; it emulates the desired architecture for the software so that it is compatible. This can be a very inefficient process, with the emulated processor a few to tens of times slower than the native processor. In the context of the portable maemo devices with limited processing power and battery capacity, it means that emulating complex PC software is generally not practical. This is true of Microsoft's Windows operating system, and applications that run in Windows.

See the emulators page for more specific details on what architectures and systems can be emulated in maemo.

[edit] Conclusion and Relevance

What this means to you, the user, is that open standards and open source are your friend. Given enough time and enough demand, most anything that is "open" can and probably will be brought to maemo.

It also means that unless the owner of proprietary products sees value in releasing their product for maemo, it will probably never be available. Consider whether you are supporting open standards and open source when you make decisions what technology to use on projects so that you can use your maemo device most effectively.