Embedded Linux and Android: Friends or Foes?
Which operating system is the better OS for embedded systems is an ongoing debate among embedded systems developers. Android developers see things one way and hardcore embedded Linux developers see things quite differently. Of course, the OS you select has a great deal to do with the end device you are designing. But still, there are some distinct advantages and disadvantages to each of these immensely popular operating platforms.
There is not much debate over whether to use Android or embedded Linux for a cell phone or a mobile device like a tablet. Android is a clear winner in this space. The real question is, what OS do you use for a traditional embedded software project where the software that you put on the device is static for the life of the device? Should you use Android for your smart refrigerator, toaster, or media player? Is Android a complete replacement for embedded Linux in modern devices?
For the most part, embedded Linux is defined as the software you’d run on a fixed or limited function device, allowing the device to take full advantage of the processing power and related peripherals. In a fixed function device, embedded Linux shines when it comes to operating efficiency in terms of memory footprint, power, performance, and ease in using the device for its intended purpose.
However, when you look at the volume of embedded devices running Linux, a majority of them are smartphones and tablets. These devices are definitely not fixed function devices and they are going to skew the traditional definition of embedded Linux. As a result, as the capabilities of the hardware increases the definition of embedded Linux is bound to change as well, since there will be fewer limitations in storage and processor capacities; to attempt to create a strict definition of embedded Linux would be an exercise in futility.
On the other hand, Android is a desktop-like Linux mobile operating system and platform that allows users to define their own usage patterns and also allows vendors to dynamically update and upgrade the platform. Some folks categorize Android phones and similar devices as consumer “portal” devices, primarily designed to provide a view of data stored elsewhere. But the distinctions between embedded Linux and Android get easily blurred.
One example of blurred definitions might be a set-top box, which used to be a fixed function embedded Linux device. Now, the set-top box TV/DVR can be as dynamic and as functional as the user wants via Android app downloads and software upgrades. Just as the embedded Linux definition is bound to change, the same can be said about Android – it’s no longer just a mobile communication and tablet operating system.
The real differences between Android and embedded Linux
Contrary to what many people think, Android runs the same kind of Linux kernel that embedded Linux runs. The focus of Android lies in the vertical integration of the Linux kernel and the Android user space components. In many respects, Android is just one “flavor” of embedded Linux. Every embedded Linux deployment is different and is tailored to the CPU architecture, SoC support, peripherals, and purpose of the device (Figure 1).
Android is attractive in the embedded Linux space because while each deployment is different, there are common components and standardized APIs all the way up the stack. Essentially, this comes down to a more consistent application development environment. The downside of this consistency/standardization is that the Android core images have very large footprints and large vulnerability profiles.
Most fixed function devices still require the ability for their operating system to be customized and optimized in ways that Android does not allow. At Mentor, we have seen increased requests for Android to be used in fixed function devices, and our response is usually, “Really, you need Android to run your coffee maker?”
As you customize Android for a limited-function embedded device, Android ceases to be Android from a compatibility standpoint. When Android can no longer pass the Compatibility Test Suite (CTS), it loses the ability to take advantage of the application ecosystem. Whether it is a perceived value or not, customers like to know they are developing applications in a consistent environment, and they insist on having that option.