Overview
History of the Mojo Project
The great power of open-source software is the tremendous number of available software programs and libraries. The great frustration of open-source software on embedded devices is that, although all of that open-source software is available, you generally have to cross-compile it yourself. As bug fixes and security updates occur, you must patch and rebuild the software.
In 2007 it occurred to us that mobile and embedded devices aren't really that small anymore. With the advent of MMC and SD cards in the 2 GB range and RAM space upwards of 64 MB it is possible to run full-size open-source software distributions. Now it's true that running an entire GNOME or KDE desktop distribution on small-screen device is probably not a great idea. But having a consistent and large set of compiled binary packages with appropriate security and bug-fix feeds---now that's useful.
Thus was born the "Handhelds Mojo" project. Our objective is make available complete, standard desktop distributions for mobile and embedded devices.
Core Ideas
Rebuilding entire desktop distributions for embedded and mobile devices requires careful planning unless you wish to patch each and everyone one of thousands of packages.
Principle #1: Minimize changes to source packages
We started with the core Debian and Ubuntu software distributions. With thousands of available packages, it was clear that we should only modify only the absolute minimum number necessary to get the distribution to compile. That meant that our build system had to function on unmodified Debian packages. It turned out that the easiest way to meet this requirement was to build all of the software on native host machines.
Principle #2: Optimize distributions for specific processor variations
Embedded and mobile devices don't have a lot of processor power and they do come in many different variations. Some variations may be nothing more than better pipelines or extra instructions available in the processor. Others, like the existence of floating point support, may make a great different in the performance of certain packages in a distribution. To maximize the distribution performance, we decided that we should compile each distribution for a number of different specific processor variations so that users could select the best binary fit for their device.
Where we are now [March 2008]
We have a functioning build system and a cluster of native ARM-based computers that we are using to build distributions. It took a fair amount of experimentation and testing before we came up with a stable platform, a solid toolchain, and a build system that we could reliably turn loose against a distribution.
Our first distribution, Frisky (based on Ubuntu 7.04 "Feisty") was initially compiled for the ARMv5EL instruction set. We're now working on further architecture variations of the Frisky distribution and have started compiling further Ubuntu distributions.
