I have pondered before the appropriateness of Linux for embedded applications. My initial stance was clear enough: I could see very little sense in it. Why use a desktop operating system in such a completely different context? Over the years, the popularity of embedded Linux has increased, the technology of embedded systems has moved on and I have reappraised my views accordingly. With Mentor Embedded offering comprehensive support for customers using Linux and Android, I thought it was worth revisiting the philosophical debate …
So, what are the upsides and downsides of using Linux for an embedded application?
There are plenty of reasons why it is attractive. A great many programmers are very familiar with both the API and the kernel itself. So getting skilled people, who need little training, is not so hard. The very wide use of Linux means that a vast array of drivers and middleware components are available, offering many opportunities for reuse, keeping costs down. And, of course, the OS itself is free, so there are no worries about recurring license costs etc.
But there are downsides. Linux is not intrinsically deterministic and, hence, not really suitable for hard real time applications. It carries quite a large memory footprint. And, although there are no license costs, there are legal issues, which could result in an obligation to make application software available as open source.
The good news is that, although these downsides may sound damning, Linux can be a good choice, if its use is approached correctly. Some applications do not need a true real time response and are not overly sensitive to memory footprint. And anyway, by using the right tools, the performance and memory utilization can be optimized. Tools and the right backup can also avoid problems with legal issues and make the deployment of a Linux based system straightforward and cost effective.
Going forward, there are bigger challenges, such as systems which are implemented using multiple cores, some of which may be running Linux, whereas others utilize an RTOS. In this context, the right OS can truly be selected for each job. For multicore and multi-OS, tools and support to implement and optimize a system are no longer optional.