In the days of bit banging and single-threaded loops, programming a microcontroller meant grabbing a C compiler (or even before that, an assembler) and some libraries and writing bare metal code. High performance networking and multi-tasking was usually the purview of heavier real-time operating systems (RTOS) or, if an MMU was available, embedded Linux.
The IoT has changed everything about software, which now has to take issues of connectivity, security, code size, and power management head on. Necessary protocol support enabling IoT connections has mushroomed. Open source has made the IoT a free-for-all, literally, with a herd of incompatible solutions.
A short list of IoT-friendly operating systems includes Contiki, CodeTime mAbassi, Express Logic ThreadX, FreeRTOS, Google Brillo, Mentor Graphics Nucleus RTOS, Micrium uC/OS, RoweBots Unison, RIOT, and Wind River Rocket.
Incompatible? Hyperfragmented may be a better word for the situation. Outside of varying degrees of POSIX threading support and broad classes of kernel services, these operating systems are wildly different. IoT operating systems are generally still ported to particular microcontroller targets, very closely coupled with a specific architecture and its nuances. A good indicator of the problem was the latest introductions from Google and Wind River; instead of scaling existing products with all their baggage, they launched new ones for the IoT.
ARM tried to set a standard with CMSIS-RTOS, a lightweight service layer with conceptual similarities to POSIX tuned for ARM Cortex-M. In theory, CMSIS-RTOS would abstract application code, allowing developers to use a standardized API for classical services instead of (or at least along with) a proprietary API from their favorite RTOS vendor. Needless to say, ARM was plowing straight into the RTOS brownfield and got a lot of blowback. One of the bigger objections was limited threading capability with only seven priority levels – however, threads are not free, and in the real world not too many applications on a microcontroller need or can afford memory for more.
Hyperfragmentation still presents an opportunity for ARM, with the IoT and maker communities at stake. Rather than wait for broader CMSIS adoption, and sensing a need to coalesce mbed developers targeting bare metal from a web-based IDE, ARM has been developing mbed OS. It is a ground-up effort for the IoT, keeping the scheduler even simpler in the current Technology Preview release. (Note: mbed RTOS mbed OS, at least not yet.)
The lesson of open source is to open everything. By abstracting both the hardware layer and the application layer, it is possible to replace the mbed OS kernel with something more robust. The folks at Express Logic have made good on their promise of mbed OS support with ThreadX and its much more advanced scheduling system. (Not without precedent: the earliest releases of VxWorks actually had a VRTX kernel inside before Wind River developed their own.)
Rather than launch the dreaded YAOS (yet another operating system), collaboration like this around mbed OS opens a whole new range of possibilities for the IoT and makers. ThreadX is bulletproof, worked out in millions of HP printers and other applications including Broadcom WICED. The IoT expertise from ARM’s acquisitions of Sensinode and Sansa Security are driving the roadmap for connectivity and security. Combining those capabilities with ARM Cortex-M expertise sets the effort apart from other OS vendors, who tend to stay “vanilla” in order to support their code on multiple architectures.
Interestingly, the Freescale FRDM-K64F – pin compatible with Arduino R3 shields – is the common platform supported between the ARM mbed OS Technology Preview and Wind River Rocket. There are several experimental microcontroller implementations in the Technology Preview, so I’d expect full support for more parts in future releases.
Will this shake up the IoT landscape? Probably not yet. Opportunities are still very project driven, especially where passionate makers and open sourcers are involved. This is a long game for ARM, very similar to how they added a hardware multiplier and showed how software could use it for hard disk, CD, and audio decoding applications early on. With TrustZone coming soon for Cortex-M, and other enhancements for the IoT probably not far behind, ARM could provide configurable software de-risked for corporate project tastes. This might get them into the Wind River and Mentor Graphics circle, where customized IoT silicon eventually requires value-add services. Some other kernel vendors may follow Express Logic’s lead here to keep pace with the communications stack developments.