We’re preparing for our weeklong extravaganza of mobile and embedded development next week. Android Builders Summit  kicks off Monday and ELC follows on Wednesday, taking place February 15-17, 2012. For the really hard-core, we’ve even lined up some hands-on mobile and embedded Linux training courses over the weekend. I'm especially looking forward to the Yocto Project crash course. 
This is a great way to kick off our annual events calendar for 2012, and it provides me a good excuse to share my take on the state of embedded Linux.
The face of embedded software development is changing fast. The power and functionality of mobile and embedded devices are reaching new levels of performance previously found in general purpose systems, such as desktop and mobile computers. The classic definition of an embedded system being "a computer system designed for specific control functions within a larger system" may still hold true for control modules found in cars, machinery and other core embedded applications. However, the lines are becoming blurry when it comes to mobile devices, Smart TVs and other consumer electronics products. These devices now allow users to customize their look and feel and user experience, installing third-party software applications, downloading media, and more, which a few years ago was only possible with personal computers.
Following is a breakdown of the trends I see shaping the embedded Linux area and the ways that engineers write software for these systems in the year ahead.
Convergence of development and deployment platforms
If you are a veteran embedded engineer you very well know that the systems you once utilized to develop software were substantially different from the systems you were developing for. In the majority of cases, the target systems had a different processor architecture, different I/O functionality, substantially less processing power, different or no memory management, and many other diverging characteristics. System-on-Chips (SoC) integrating processor cores of general purpose CPUs with peripheral devices typically found in embedded systems into a single chip allows software developers to tap into a large software pool previously written for general purpose CPUs. The most prominent example is certainly the Linux kernel.
Before the advent of SoCs, Linux was not a good choice for embedded or mobile systems. General purpose CPUs required too many external peripheral devices to be economically used in an embedded system, and microcontrollers typically used in such systems did not fulfill the memory management requirements of the Linux kernel. A second hurdle for Linux in embedded system design was the need for a read/write file system. Not too long ago, file system meant the use of hard drives, which are not practical for embedded and/or mobile use. Memory Technology Devices (MTD) are now closing the gap. SoCs and MTDs are enabling the use of Linux in embedded and mobile devices.
The utilization of Linux for embedded devices is naturally bringing deployment and development platforms together. Now, developers can use the exact same software development tools they are familiar with on their Linux development system to write software for a Linux-based target. The same processor architecture on development system and target may even make the use of cross-development tools unnecessary. In some cases, developers are even given the possibility of directly developing software on the target itself. Many SoCs have integrated graphics and USB ports, making connecting a display, keyboard and mouse a breeze. Development boards available for most processor architectures provide all the necessary functionality in single board computer form factor to jumpstart embedded software development.
Emulation and simulation
In the past, embedded hardware and software development were mostly serialized. Software development did not start until the first prototype of the hardware was available for the software engineers. Emulators allow software engineers to test new features even before they are accessible in the form of hardware. For example, the QEMU open source machine emulator and virtualizer can easily be used to test new CPU instructions and compilers to create code for these instructions long before the first silicon gets in the hands of software developers. Simulation can be utilized to test new APIs for sensors and other hardware devices. GUI simulators facilitate rapid prototyping of user interfaces.
The original intent of the Java platform was to provide a hardware independent platform for interactive television. It was too advanced for the digital cable television industry at the time but its adoption by the Android mobile operating system as application development and deployment platform proved that the concept of virtualization for embedded and mobile systems is fundamentally correct. Virtualization provides several benefits for embedded and mobile systems: secure partitioning of applications, migration of legacy applications, platform-independent application ecosystems. Depending on the focus for the virtualization, different solutions are appropriate. Secure partitioning of native applications can be achieved with a hypervisor. A hypervisor may also be the solution for migrating existing and consolidating existing software on a new platform. Ecosystems for third-party applications are a major differentiator for mobile devices. While Java is Android's technology for building an application ecosystem, web browsers, WebKit, HTML5 and other web technologies provide the abstraction layers necessary to build application ecosystems that extend across many different device types and categories using a variety of hardware technologies, processor architectures and operating system.
Ecosystems for third-party applications are a vital part of mobile device platforms and will undoubtedly influence purchasing decisions for other consumer electronics products such as Smart TVs, and potentially cars, in the near future. The more applications that are available for a particular platform, the more valuable it becomes in the perception of the consumer. If you trust the forecasts of market analysts, then the battle of the ecosystems has just begun. And within the next couple of years, two to three prevailing software platforms (with their respective ecosystems) will evolve as the winners. The winners will bring on board the critical mass of application developers providing a steady stream of new applications to maintain the attractiveness of the platform to consumers. In my opinion, HTML5 will make the discussion about the winning mobile platform moot and end the predicted battle of the ecosystems.
A major headache for mobile application developers is the rapidly increasing number of variances in devices, form factor, screen resolution, operating system versions, etc. An application designed for a mobile phone with a 4" screen typically viewed in portrait orientation will most likely not provide the same user experience on a tablet with a 10" screen commonly viewed in landscape orientation. Current mobile software platforms and their respective application development environments do not provide an adequate solution. HTML through CSS, allows easy separation of presentation from business logic making it straight forward for developers to change the visual layout of their applications and have it automatically adapt to the form factor and orientation of the device. HTML and CSS also give developers more freedom to design their own look-and-feel. Current SDKs for mobile applications are rather limiting in how developers can create differentiating user experiences.
New markup tags introduced with HTML5 further close the gap between native and web applications. Web applications can now access sensors, cameras and other hardware devices found on mobile platforms, store application-specific information on the device and play media through standardized tags and objects.
With these features, HTML5 provides a unique opportunity to create an application ecosystem for embedded and mobile devices that is truly independent from the underlying hardware and software platform. This ecosystem will benefit all parties involved with the value chain: the device manufacturers, the application developers and the consumers. None of them will have to make the decision for a particular platform wondering if the investment will be voided by becoming obsolete before returning the expected value.
Security and privacy
A steady and rapidly increasing number of embedded devices are either directly or indirectly connected to the Internet. This poses new challenges for embedded system developers. Even if an embedded device is only connected to a private network, engineers now must keep security in mind since other devices on the private network could act as bridges, deliberately or involuntarily, providing outside access to those devices. For instance, an engine management module in a car connected to the vehicle's private network could potentially become exposed to the Internet through an infotainment head-unit connected to the same private network while also being connected to the Internet via data modem and cell phone network. Encrypted data communication on private networks and embedded firewalls to protect them will soon become standard for embedded systems.
The widespread proliferation of smartphones may enable botnets of entirely new dimensions. Access to platform sensors, such as GPS, makes it easy to physically locate the bots and aggregate the ones close in location for attacks in specific areas. For example, thousands of compromised smartphones in a Super Bowl stadium could be used to create a mass panic or do other harm. Embedded and mobile device designers must devise technologies to protect the platforms against viruses, Trojan horses and other malware.
As more and more users of smartphones use them for online banking, financial transactions at store checkouts and to unlock their cars, among other applications, the protection of the private data stored on these devices becomes mandatory. But not only the data that the user explicitly stores on the device is at risk. but also the data that the user indirectly creates while carrying and using the device: the places he visits, the stores she pays, the pictures of places and people he takes, the tunes she plays, etc. While each piece of data by itself may be meaningless the combination of it together with information found online through social media networks and personal websites may expose the person to identity theft and more. It is not a trivial task to enable user convenience and at the same time keep the user's personal information safe from unauthorized access.
Embedded and mobile system developers must learn to understand the threats, be aware of them and proactively design their software accordingly. There is no absolute security and privacy; however, a simple message during installation that an application accesses the user's contact list, the data network, the camera, etc., and asks the user whether to proceed or not is not merely a security concept but simply an excuse.
The Future Belongs to Embedded and Mobile Computing
The future of computing is in embedded and mobile. Orders of magnitude more of these systems will be deployed and used for a myriad of applications than have ever been for PCs or other computers. The possibilities and opportunities seem limitless but so seem the challenges. However, lessons learned from the personal computing era and the Internet still apply. As embedded and general purpose computing platforms converge, embedded and mobile developers must adapt to harvest the benefits and meet the challenges.