Comprehensive Survey of The Iot Open Source Oss: Iet Wireless Sensor Systems October 2018
Comprehensive Survey of The Iot Open Source Oss: Iet Wireless Sensor Systems October 2018
Comprehensive Survey of The Iot Open Source Oss: Iet Wireless Sensor Systems October 2018
net/publication/328031606
CITATIONS READS
2 1,886
4 authors:
Some of the authors of this publication are also working on these related projects:
Data Offloading Framework Using Mobile Small Cells and Urban WiFi View project
All content following this page was uploaded by Mahmoud H. Qutqut on 17 June 2019.
Review Article
Abstract: The Internet of things (IoT) has attracted a great deal of research and industry attention recently and is envisaged to
support diverse emerging domains including smart cities, health informatics, and smart sensory platforms. Operating system
(OS) support for IoT plays a pivotal role in developing scalable and interoperable applications that are reliable and efficient. IoT
is implemented by both high-end and low-end devices that require OSs. Recently, the authors have witnessed a diversity of OSs
emerging into the IoT environment to facilitate IoT deployments and developments. In this study, they present a comprehensive
overview of the common and existing open-source OSs for IoT. Each OS is described in detail based on a set of designing and
developmental aspects that they established. These aspects include architecture and kernel, programming model, scheduling,
memory management, networking protocols support, simulator support, security, power consumption, and support for
multimedia. They present a taxonomy of the current IoT open-source OSs. The objective of this survey is to provide a well-
structured guide to developers and researchers to determine the most appropriate OS for each specific IoT devices/applications
based on their functional and non-functional requirements. They remark that this is the first such tutorial style paper on IoT OSs.
With the tremendous progress of IoT, more and more objects/things 3.9 Supporting multimedia
will be connected to the Internet. So, it is essential to ensure a
secure data channel between the participated devices in IoT [39]. Some IoT applications may require that OSs support time
Also, it is a must to have a secure and reliable connection between constrained data types such as streaming media applications,
heterogeneous devices in IoT environment [19, 39]. The IoT distributed games, and online virtual environments. Most
entities will mostly neither be a single-use, nor sole-ownership traditional OSs are incompatible with these timing constraints, and
solution. The devices, things, and the control policies could have a they are also poorly matched to the multimedia processing since
different use, policies, administration, and connectivity domains. user requirements changing dynamically. Moreover, supporting
Consequently, devices will be ordered to have open access to some commercial real-time multimedia software has the additional
data users. On the basis of the fact that the collected information requirement that the OS must provide for controlling and
may contain personal information of the users, so it is essential to communicating resource usage among independent real-time
ensure the security of the devices in IoT. Generally, these IoT activities. Moreover, audio and video sources generate data that
devices are limited in the resources, memory, and computational needs exhaustive processing to be compressed and decoded for
power. Moreover, they are more susceptible to attacks than other streaming. The data exchange occurs from these sources to other
endpoint devices such as computers, tablets, or smartphones. One destinations such as loudspeakers and video situated on the
of the challenges facing the security of IoT is its components spend computer or at another remote station. Multimedia data is
most of the time unattended, so that they can be physically processed on the way from the source to the sink through copying,
attacked. Another challenge is that most of the communications in moving, and transmitting operations. OSs manage the resources
IoT are wireless, which makes eavesdropping extraordinarily easy. where the data processing occurs. The OS must be able to process
Also, IoT devices cannot apply complicated security schemes due audio and video, and the amount of data that has to be transferred
to their limited capabilities [40]. can be substantial [45].
Security is a top priority and should be considered in the Fig. 1 summarises the main features and aspects discussed in
hardware too as similar to conventional desktop computers, severe this section. We use these design and development aspects to
challenges exist. IoT devices will be expanded to most aspects of evaluate the open-source IoT OSs discussed in our survey.
our lives, so we have to overcome these difficulties and challenges
[41]. 4 Classifications of IoT OSs
To provide security, there are several traditional security
techniques such as patch upgrades, security scanning, virus OSs can be classified based on different criteria. For example, they
checking and killing, intrusion detection, and other security can be classified by their source code either open or closed. Also,
techniques. However, these techniques and tools can be used for a they can be categorised according to the purpose of their design
small part of the IoT system that can hardly overcome with the into either specially designed IoT OS or customised version of an
rapid growth of security threats and attacks. Trusted platform existing OS. Another classification for OSs is to divide them into
module (TPM) security system of IoT is a technology designed to Linux based or non-Linux based. Finally, OSs can be classified
provide hardware-based and security-related functions. TPM based on the targeted devices whether high-end IoT devices or low-
hardware chips can be used with any OS [42]. A TPM chip stores end IoT devices.
cryptographic keys to be used for encryption that set on computer's In open sources, the source is available to anyone so that the
motherboard. When enabled, the TPM provides full disc user can use the freely distributed code, and modify it even for
encryption capabilities. It becomes the ‘source of trust’ for the commercial purposes to fit a particular requirement such as Linux
system to provide integrity and authentication to the boot process. OS. Closed source OSs use code that is implemented by private
It holds hard drives locked until the system completes an parties and is kept unpublished to have full control over the OS and
authentication check or a system verification. The chip includes the keep its proprietary [9]. An OS is usually classified into two
following trusted modules: user, perception, terminal, network, and different software ecosystems. The first is Linux based, and the
an agent. These modules are specially designed to avoid the second is non-Linux based. Linux OS is an open-source cross-
different security threats in the applications of IoT [42]. Moreover, platform based on Unix OS that can be installed on PCs, servers,
security problems of IoT can be described from the network layer and other hardware. On the other hand, non-Linux OS is not based
such as sensor attacks, sensor abnormalities, radio interference, on Linux or Unix; rather it depends on other OSs such as Windows
network content security, hacker intrusion, and illegal and ReactOS.
authorisation. However, IoT may face many security issues at the The last classification of IoT OSs is based on the capability and
application layer such as database access control, privacy performance of IoT devices; they can be classified into two
protection technology, information leakage tracking technology, categories. The first category is for high-end IoT devices which
secure computer data destruction technology, and protection include single-board computers such as the Raspberry Pi (RPi).
High-end IoT devices can run traditional OSs such as Linux. The
second category is for low-end IoT devices, which have limited needed to setup hardware [47]. Different components are grouped
resources and cannot run by traditional OSs. An example of low- with the scheduler to run on the mote platform. The mote platform
end IoT devices is Arduino. has very insufficient physical resources depending on which
In this paper, we target the most used and state-of-the-art open- components are active. Typical TinyOS motes consist of a 1
source IoT OSs due to the limit on the number of pages. For the microprocessor without interlocked pipeline stages (MIPS)
closed source IoT OSs, we recently published a paper on this topic processor and tens of kilobytes of storage. A component is an
[46]. Fig. 2 shows a proposed taxonomy of open-source IoT OSs independent computational element that shows one or more
based on low-end or high-end IoT devices, and on Linux based and interfaces. Components have three computational abstractions:
non-Linux based from a high-level perspective either. commands, events, and tasks. Mechanisms for inter-component
communication are commands and events, whereas tasks are used
5 OSs for low-end IoT devices to express intra-component concurrency. A command is a request
to perform some service while the event signals represent the
In this section, we will describe the most widely used low-end OSs completion of service [27, 47]. Fig. 3 shows the architecture of
for IoT devices from the aspects and criteria presented in Section 3. TinyOS. The scheduler schedules operation of those components.
The main objective of this section is to provide an exhaustiveness Each component consists of four parts: command handlers, event
understanding of each low-end IoT OS. handlers, an encapsulated fixed-size frame, and a group of tasks.
Commands and tasks are performed in the context of the frame and
5.1 TinyOS operate on its state. Each component declares its commands and
events to allow the modularity and easy interaction with other
TinyOS is an open-source non-Linux-based OS designed explicitly components [32].
for low-end IoT devices, embedded and wireless devices such as
sensor node networks, smart buildings, and smart sensory
platforms [47]. TinyOS is built based on a set reusable software 5.1.2 Programming model and development
component [47]. It is written using NesC programming language, environment: TinyOS supports an event-driven concurrency
which has a similar syntax to C language [47]. Each TinyOS model which consists of split-phase interfaces, deferred
component has a frame and a structure of private variables. These computation, and asynchronous events [31]. TinyOS is
components have three computational abstractions: commands, programmed in NesC for memory limitations of sensor networks
events, and tasks [47, 48]. Commands are used to call a component which are similar but not compatible with the C language. It allows
to do a specific task. Events are mechanisms for entering writing pieces of reusable code which explicitly indicates their
component communication, while tasks are used to represent dependencies [47]. Also, TinyOS uses a mechanism called Trickle.
component concurrency [49]. Trickle is an algorithm used for propagating and maintaining code
updates when needed. Trickle applies a polite gossip policy, where
nodes occasionally broadcast code to all neighbour nodes, and
5.1.1 Architecture and kernel models: TinyOS has a monolithic remain silent. When a node hears an older summary of its own, it
architecture and uses a component-based architecture that depends broadcasts an update rather than sending a network signal with
on the application requirements. This reduces the size of the code packets. Then, the algorithm manages the process of sending, so
IET Wirel. Sens. Syst. 5
© The Institution of Engineering and Technology 2018
each node only hears a small trickle of packets which is just
enough to stay up to date. Trickle propagates new code within
seconds and makes the maintenance cost less in terms of time
(propagation of new code to all neighbours’ nodes) [35]. The
primary challenge in TinyOS development is the creation of
flexible and reusable components [49].
5.1.5 Communication and networking protocols 5.1.10 More about TinyOS: TinyOS applies fully non-blocking
support: TinyOS has built-in support for common network split-phase operations that enable developers to re-define the kernel
protocols such as transmission control protocol (TCP), user API by choosing an existing set of operations or by implementing
datagram protocol (UDP), ICMPv6, IPv6, IPv6 over low-power one system call stack. In this method, all I/O operations that last
WPAN (6LoWPAN), IPv6 routing protocol for low-power and longer than a few hundred microseconds are asynchronous and
lossy networks (RPL), and constrained application protocol have a callback known as deferred procedure calls [47].
(CoAP), in addition to hydrogen routing protocol that is used for
reliable communication [51]. 5.2 Contiki OS
5.1.6 Simulation support: To validate the analysis model of Contiki is an open-source non-Linux-based OS for low-end IoT
TinyOS applications, a TinyOS Simulation (TOSSIM) simulation devices designed especially for IoT. It is lightweight, highly
environment has been developed. TinyOS simulation (TOSSIM) portable, and multitasking OS that runs on tiny low-power
provides a high flexibility simulation of TinyOS applications which microcontrollers with minimal memory. Contiki OS is written in C
work by replacing components with simulation implementations programming language. It uses 2 kB of RAM and 40 kB of read-
[47]. Moreover, TOSSIM provides developers an integrated only memory (ROM). Nowadays, Contiki can be run on various
environment of the network and troubleshooting capabilities. hardware platforms such as Alf and Vegard RISC processor (AVR),
Server-side applications can be connected to a TOSSIM proxy only MSP430, and Z80 [31, 52, 54].
if it is a real sensor network. Hence, facilitating the transition
between the simulation and real deployments [47]. TOSSIM also 5.2.1 Architecture and kernel models: In contrast to TinyOS.
provides support integration for troubleshooting and debugging Contiki OS has a modular architecture [25]. The core of Contiki
applications directly on the mote. Unfortunately, TOSSIM does not OS mainly consists of multiple lightweight event schedulers and a
support gathering power measurements [47]. polling mechanism. The event schedule is responsible for
dispatching events to run processes and periodically calls
5.1.7 Security: TinyOS uses TinySec library which was processes’ polling handlers, which identifies the action of the
developed using the NesC programming language and polled process [31]. On the other hand, the polling mechanism
implemented by the link layer to provide confidentiality, message identifies high priority events. Polling mechanism is used by
authentication, integrity, and semantic security [52]. The default processes that operate near the hardware to check the status
block cipher encryption in TinySec is Skipjack algorithm that is updates of hardware devices. All processes that implement a poll
used with cipher block chaining (CBC-CS) method. Skipjack has handler are requested in order of their priority [54]. Fig. 4 shows
an 80 bit key length that provides immunity to brute force attacks the architecture of Contiki OS. Contiki OS contains sensor data
[52]. Skipjack generates message authentication code (MAC) handling, communication protocols, and device drivers as services.
method which utilises CBC-MAC [52]. However, CBC-MAC has Each service has its interface and implementation.
security lacks since it furnishes semantic security with an 8 B
introduction vector which includes only a 2 B counter overhead per 5.2.2 Programming model and development
packet [52]. TinySec holds <10% energy, inactivity, and transfer environment: Unlike TinyOS, the programming models in Contiki
speed overhead [52]. support both multithreading and event-driven using protothreads.
The main advantage of protothreads is their very minimal memory
5.1.8 Power consumption: TinyOS provides efficient low-power overhead with no extra stack for a thread. Since events run to
consumption operation and limited storage using a simple completion, Contiki does not allow interruption of handlers to post
execution model [44]. TinyOS execution model is based on split- new events, and it does not allow process synchronisation [27].
phase operations and interrupts handlers. It allows the scheduler to Programming models with Contiki are defined by events in a way
decrease its random access memory (RAM) utilisation and easily that all tasks are executed in the same context [52]. Protothreads
maintains sync code. This avoids the need for threads and allowing mechanism runs on top of the event-driven kernel. A protothread
all programmes to execute on a single stack. However, it implies process is invoked whenever a process receives an event, and the
that if one sync code runs for a long term, then it prevents other protothreads mechanism decides which memory should be
sync code from running; which can negatively influence system allocated [55]. Contiki is implemented by system libraries which
responsiveness [44]. are connected with programmes. Programmes can be connected
with libraries in three ways. The first way, the programmes can be
5.2.4 Memory management and performance: Unlike TinyOS, 5.3.1 Architecture and kernel models: In contrast to the other
Contiki supports dynamic allocation or deallocation of memory OSs such as TinyOS or Contiki. RIOT has a microkernel
through mmeb() and mmem() as well as malloc(). The memb() architecture, which has been designed to work on several IoT
memory block allocator is the most frequently used. The mmem() platforms with different CPU architectures (32 bit, 16 bit, 8 bit)
managed memory allocator is used infrequently and it uses the such as ARMv7, ARM Cortex-M0 + , MSP430, and some recent
standard C library malloc() heap memory allocator [58]. In AVR microcontrollers. The microkernel architecture of RIOT OS
addition, Contiki uses Contiki coffee file system technique for data was developed using C + +, and it supports full multithreading that
storage inside the sensor network. It allows multiple files to exist provides a developer-friendly API and allows C + + and ANSI C
on the same physical onboard flash memory [58]. application programming. RIOT kernel will never crash because it
supports error device drivers. The architecture design of RIOT also
5.2.5 Communication and networking protocols contains POSIX compliance [42, 68]. Fig. 5 shows the structure of
support: Contiki OS supports many protocols such as CoAP and RIOT, which is divided into four layers. The first layer is the
the message queue telemetry transport (MQTT) [59]. In addition to kernel; which consists of the scheduler, inter-process
that, the two main communication stacks are uIP and Rime stack communication, threading, thread synchronisation, supporting data
that consists of a set of custom lightweight protocols for power structures and type definitions. The second layer is platform
constrained wireless networks [59]. Contiki supports a full IP specific code (CPU boards), which contains the configuration for
network stack with standard IP protocols such as UDP, TCP, and that particular CPU. The third layer is device drivers, which consist
HTTP [60]. Also, it has support for 6LoWPAN adaptation layer, of the drivers for external devices such as network interfaces,
the RPL IPv6 multi-hop routing protocol, and the CoAP RESTful sensors, and actuators. The fourth layer comprises of libraries,
application-layer protocol [61]. network code, and applications for demonstrating features and
testing. Moreover, this layer includes a collection of scripts for
various tasks as well as predefined environment documentation
5.2.6 Simulation support: Cooja simulator supports Contiki, (doc) [67].
which is a useful tool for Contiki OS application development.
Cooja makes simulation colossally less demanding by providing a
5.4 LiteOS
Fig. 5 Architecture of RIOT OS (reproduced from [66]) LiteOS is an open-source Linux-based lightweight OS designed to
run on low-power devices. This makes LiteOS suitable for a wide
5.3.2 Programming model and development range of areas including wearable, smart homes, connected
environment: RIOT is similar to Contiki that it also supports vehicles, and microcontrollers. LiteOS can be installed on devices
preemptive multithreading. RIOT is developed using standard that run by Google Android OS, and it can connect with other
programming languages such as ANSI C and C + + [69]. With third-party devices. It is developed purposely to provide a Unix-
RIOT, developers can code the application once and run it on like OS for IoT developers and to provide programmers with
various IoT hardware devices. Moreover, RIOT provides common familiar programming paradigms such as a hierarchical file system
programmer APIs such as Berkeley software distribution (BSD) developed using LiteC programming language and a Unix-like
sockets or POSIX thread (pthread) functionalities [70]. Besides, shell [27, 74].
RIOT can run and debug the same as in Linux and MacOS using a
set of popular debugging tools such as GNU Debugger (GDB) and 5.4.1 Architecture and kernel models: In contrast to RIOT,
Valgrind [67]. The C + + programming capabilities used in RIOT LiteOS has a modular architecture divided into three subsystems;
allow RIOT to use powerful libraries such as the Wiselib, which LiteShell, LiteFS, and the kernel [32] as shown in Fig. 6. LiteShell
contains algorithms for routing, clustering, time sync, localisation, is a Unix-like shell that provides support for shell commands such
and security. RIOT has other programming features such as as file management, process management, and debugging.
dynamic linking support, Python interpreter, and energy profiler LiteShell resides on a base station or a PC. This leverage allows
[71]. Also, RIOT provides virtualisation, where the code and more complex commands as the base station, or PC has abundant
application can run as a simple Unix process. RIOT uses Wireshark resources. The LiteShell can only be used with user intervention.
for packet analysing [67]. Some local processing is done on the user command by the shell
and then transmitted wirelessly to the intended IoT node. The IoT
5.3.3 Scheduling: Together with Contiki. RIOT implements node does the required processing of the command and sends a
preemptive priority-based and tickless scheduling, where each task response back which is then displayed to the user. When a mote
has a priority in execution that helps the scheduler to select the does not carry out the commands, an error code is returned. The
highest priority task to run on CPU. RIOT tasks with the highest second architectural component of LiteOS is its file system,
priority are executed first, and if there are more than one high LiteFS, which consists of sensor nodes as a file and it mounts a
priority tasks, a round-robin (RR) mechanism will be used [71]. sensor network as a directory and then lists all one hop sensor
nodes as a file. A user on the base station can use this directory
5.3.4 Memory management and performance: In RIOT OS, structure just as the traditional Unix directory structure and can
both dynamic and static memory allocations are provided for also use legitimate commands. The third subsystem of LiteOS is
applications [72]. RIOT OS does not have a memory management the kernel which resides on the IoT node. The kernel supports
unit (MMU) or floating point unit. However, it has a low memory concurrency multithreading, dynamic loading, and uses RR and
footprint in the order of a few kBs [66, 68]. priority scheduling, which allows developers to register event
handlers through callback functions [27].
5.3.5 Communication and networking protocols
support: RIOT OS supports several networking protocols 5.4.2 Programming model and development
including TCP/IP v4 and v6 and the latest standards for connecting environment: LiteOS is a multitasking OS that supports
constrained systems to the internet engineering taskforce (IETF) multithreading. In LiteOS, processes run applications in separate
6LoWPAN [72]. In addition to that, RIOT has built-in support for threads. Each thread has its allocated memory which helps in
other IoT-related network protocols such as CoAP and RPL [73]. protecting the memory. LiteOS also provides support for event
handling [27]. Also, it supports dynamic reprogramming and
replacement mechanism through the user application.
5.3.6 Simulation support: At the time of writing this paper, RIOT Reprogramming can be performed either if the source code of the
OS does not have a simulator. Rather, we can have a full-scale OS is available or not. If it is available, it will be easily recompiled
simulation for RIOT applications from Contiki–Cooja simulator for with new memory settings, and all pointers of the old version will
IoT [67]. be redirected, whereas if the source code is not available, it uses a
differential patching mechanism to upgrade the older version. Also,
5.3.7 Security: RIOT supports powerful attack detection LiteOS supports online debugging including variable watches and
capabilities called secure cyber-physical ecosystem (CPS). CPS is a vast number of breakpoints. Additionally, it contains extensive
a system that interacts, monitors, and controls smart objects development libraries [76].
through complicated processes. When an attack is detected, then
the reaction to it occurs [69]. 5.4.3 Scheduling: LiteOS implements both priority-based and
RR scheduling in the kernel. The task to be executed is chosen
5.3.8 Power consumption: The simplicity of microkernel from the ready queue using priority-based scheduling. When a task
architecture of RIOT is the main characteristic to enable maximum requires a resource that is not available currently, the task allows
energy efficiency [67]. RIOT context switching can happen in two interrupts and goes to sleep mode [32].
situations. The first situation is when a corresponding kernel
operation gets called by itself such as a mutex locking. The second
situation is when an interruption happens in a thread switch.
8 IET Wirel. Sens. Syst.
© The Institution of Engineering and Technology 2018
wireless support including LTE and mesh networking [60]. LiteOS
supports Windows XP, Windows Vista, and Linux in addition to
both MicaZ and IRIS nodes. Moreover, it supports both plug-and-
play routing stack. Other advantages of LiteOS are that it has an
extremely lightweight event logging and it has a built-in
hierarchical file system. Finally, LiteOS snapshots a thread state
and can restore it to a previous state [74].
5.5 FreeRTOS
FreeRTOS is an open-source non-Linux, multitasking, preemptive,
and mini real-time OS for low-end IoT devices mainly developed
using C and some assembly functions [80]. It is very scalable,
simple, easy to use, and highly portable. Its main strength is the
small kernel size, which makes it possible to run different small
applications. Another strength is that FreeRTOS supports an
extensive variety of hardware architectures, which make it a good
choice to be used with different IoT applications [81, 82].
5.6.1 Architecture and kernel models: Mynewt OS has a 5.6.8 Power consumption: Mynewt has low-power consumption;
modular architecture. Mynewt targets ARM Cortex M0–M4 and devices operate in sleeping mode to conserve battery power and
RISC-V architectures with a plan to extend the hardware support to maximise power usage [87].
MIPS architecture [88]. Also, Mynewt OS is supported on the
Arduino Zero, Arduino Zero Pro, and Arduino M0 Pro processors
5.6.9 Supporting multimedia: At the time of writing this paper,
[88, 89].
there is no support for multimedia contents or devices in Apache
Mynewt OS.
5.6.2 Programming model and development
environment: Mynewt OS supports multithreading tasks [89].
5.6.10 More about Apache Mynewt: HAL is used in Mynewt to
Developers can debug code by setting breakpoints, avoiding stack
provide a uniform interface for peripherals across different
smashes, and eliminating stolen interrupts [89].
microcontrollers, which allow direct access to peripherals for
granular power control [89].
5.6.3 Scheduling: Mynewt OS supports tickless preemptive
priority-based scheduling [89].
5.6.11 ARM Mbed OS: ARM Mbed is an open-source Linux-
based OS for low-end IoT devices licenced under Apache Licence
5.6.4 Memory management and performance: Mynewt OS 2. ARM cores introduce it for 32 bit ARM Cortex M
supports memory heap and memory pool allocation [87]. microcontrollers. It supports all essential open standards for
connectivity and device management. ARM Mbed OS provides a
5.6.5 Communication and networking protocols platform that includes the following features: connectivity, security,
support: Mynewt OS provides full support for the TCP/IP suite. It cloud management services, and device management
also supports protocols for constrained networks such as CoAP and functionalities that are required by IoT devices [33, 90].
6LoWPAN [87]. Also, Mynewt OS has full implementation of the
Bluetooth low-energy 4.2 stack, Bluetooth mesh, LoRa PHY, and 5.6.12 Architecture and kernel models: ARM Mbed OS
LoRaWAN [87]. supports monolithic architecture [25]. ARM Mbed OS runs on 32
bit ARM embedded architecture and supports a few other platforms
5.6.6 Simulation support: Mynewt can be simulated using the [91]. Fig. 8 shows the architecture of ARM Mbed OS and its
Quick Emulator (QEMU). different layers.
5.6.7 Security: Apache Mynewt OS enables secure remote 5.6.13 Programming model and development
updates to maintain ongoing security. Also, Mynewt OS provides environment: ARM Mbed OS uses a single thread and adopts an
safe bootloader to verify firmware integrity and authenticity [89], event-driven programming model [91]. ARM Mbed OS is
and uses security manager protocol for pairing and transport developed using C and C + + programming languages. Moreover, it
specific key distribution for securing radio communication [89]. has many programming features that allow developers to select
from different types of microcontrollers. Also, Mbed API can keep
application code readable, simple, and portable [91].
6.1 uClinux OS
uClinux is an open-source Linux-based OS for high-end devices. It
is an extension to the Linux kernel. uClinux kernel includes a
collection of Linux 2.x kernel releases intended for single
microcontrollers without an MMU. Also, it has a set of user
applications, libraries, and toolchains. This OS needs special
support for inter-processor communication [77, 78].
looks such as a custom OS written in C# for Arduino used and state-of-the-art open-source OSs for IoT. We first
microcontrollers. It also appears to be a small project developed investigate the design and development aspects of IoT OSs. Then,
around 2010 with no updates afterward. Other OSs still work very we propose a taxonomy to classify and categorise the state-of-the-
hard to shine in the field but the competition is high as this area is art and most used IoT OSs. We provide an extensive overview of
growing dramatically. open-source IoT OSs, where each OS explained in details based on
the established designing and developmental aspects. These aspects
7 Comparisons of IoT OSs are; architecture and kernel models, programming model, and
development environment, scheduling, memory management and
In this section, we provide several summarised tabular overviews performance, communication and networking protocols, simulator,
of all OSs listed in this survey. Table 2 summarises the security, power consumption, and multimedia support. We survey
programming features of all OSs discussed in this paper. This table each OS's characteristics, advantages, and disadvantages. Also,
lists the programmability features for each OS in terms of the several comparisons concentrating on the similarities and
kernel and architectural usage for a basic application, scheduling differences between the discussed OSs are presented. We remark
type, programming model, supported programming language, the that this is the first such tutorial style paper on IoT OSs.
ability of reprogramming, and supporting of real time. We noted Finally, we argue that each IoT OS has some limitations
that the common programming languages used in IoT OSs include depending on the targeted deployment scenario. For that reason, it
C, C + +, and Java. Java always runs on top of an IoT OS. So, the is challenging to have an OS that satisfies all requirements.
choice is not between C/C + + or Java; it is whether C or C + + and Moreover, choosing an appropriate OS for IoT applications is
Java. critical to the success of IoT deployments and implementations.
Table 3 provides a summary of the hardware requirements for The developer must carefully study the strengths and weaknesses
the surveyed IoT OSs. This table defines the OS hardware of the candidate OSs to make the best choice. As each IoT OS has
configuration requirements in terms of RAM and ROM usage for a its pros and cons that can be used to identify the appropriate OS
basic application, processor, and main supported hardware based on the functional, non-functional, power consumption,
platform. The purpose of hardware specifications is to give sensors connectivity, communication methods, and many other
appropriate design decisions for devices that will run by IoT OSs. requirements. Thus, this research is designed to bridge the existing
Finally, we briefly summarise the primary technical aspects of gap in knowledge of the adoption and implementation of OSs for
IoT OSs in Table 4. It highlights implementation aspects in terms IoT from different aspects. This survey provides an easy to follow
of the remote scriptable wireless shell, remote file system interface and well-structured guide in a tutorial style for researchers and
for networked nodes, file system, online debugging, dynamic developers targeting IoT OSs.
memory, simulation support, and list of supported network
technologies and protocols.
9 Acknowledgment
8 Conclusion This work made possible by a financial support from the Applied
Science Private University in Amman, Jordan.
The proliferation of the IoT is dramatically increasing and already
covers many prominent domains and disciplines such as smart
cities, smart sensory platforms, and intelligent transit systems. OS
support is vital in facilitating the development and subsistence of
IoT. In this paper, we provide a comprehensive study of the most
References [14] Internet of Things (IoT) Connected Devices Installed Base Worldwide from
2015 to 2025 (in billions). Available at https://www.statista.com/, accessed
[1] Ma, H.: ‘Internet of things: objectives and scientific challenges’, J. Comput. August 2017
Sci. Technol., 2011, 26, (6), pp. 919–924 [15] Lee, J., Sung, Y., Park, J.: ‘Lightweight sensor authentication scheme for
[2] Mattern, F., Floerkemeier, C.: ‘From the internet of computers to the Internet energy efficiency in ubiquitous computing environments’, Sensors, 2016, 16,
of things’, in Sachs, K., Petrov, I., Guerrero, P. (Eds.): ‘From active data (12), pp. 2044–2059
management to event-based systems and more’ (Springer, Berlin, Germany, [16] Tarkoma, S., Ailisto, H.: ‘The Internet of things program: the Finnish
2010), vol. 33, (2), pp. 242–259 perspective’, IEEE Commun. Mag., 2013, 51, (3), pp. 10–11
[3] Zhu, Q., Ruicong, W., Chen, Q., et al.: ‘IoT gateway: bridging wireless sensor [17] Al-Turjman, F., Alturjman, S.: ‘Context-sensitive access in industrial Internet
networks into internet of things’. Proc. IEEE/IFIP Eighth Int. Conf. of things (IIoT) healthcare applications’, IEEE Trans. Ind. Inf., 2018, 14, (6),
Embedded Ubiquitous Comput. (EUC), Hong Kong, China, December 2010, pp. 2736–2744
pp. 347–352 [18] Miorandi, D., Sicari, S., De Pellegrini, F., et al.: ‘Internet of things: vision,
[4] Gartner Inc.: ‘Gartner says 8.4 billion connected ‘Things’ will be in use in applications and research challenges’, Ad Hoc Netw., 2012, 10, (7), pp. 1497–
2017, up 31 percent from 2016’. Available at https://www.gartner.com/ 1516
newsroom/id/3598917, accessed June 2017 [19] Roman, R., Zhou, J., Lopez, J.: ‘On the features and challenges of security
[5] Sundmaeker, H., Guillemin, P., Friess, P., et al.: ‘Vision and challenges for and privacy in distributed Internet of things’, Comput. Netw., 2013, 57, (10),
realizing the Internet of things’ (European Commission, Brussels, 2010) pp. 2266–2279
[6] Islam, S., Kwak, D., Kabir, M., et al.: ‘The Internet of things for health care: a [20] Balakrishna, C.: ‘Enabling technologies for smart city services and
comprehensive survey’, IEEE Access., 2015, 3, pp. 678–708 applications’. Proc. IEEE Int. Conf. Next Generation Mobile Applications,
[7] Keoh, S., Kumar, S., Tschofenig, H.: ‘Securing the Internet of things: a Services and Technologies (NGMAST), Paris, France, September 2012, pp.
standardization perspective’, IEEE Internet Things J., 2014, 1, (3), pp. 265– 223–227
275 [21] Wang, L., Alexander, C.: ‘Big data analytics and cloud computing in Internet
[8] Mainwaring, A., Polastre, J., Szewczyk, R., et al.: ‘Wireless sensor networks of things’, Amer. J. Inf. Sci. Comput. Eng., 2016, 2, (6), pp. 70–78
for habitat monitoring’. Proc. ACM Int. Works Wireless Sensor Networks and [22] Sarkar, C., Nambi, A., Prasad, R., et al.: ‘DIAT: a scalable distributed
Applications, Atlanta, GA, USA, September 2002, pp. 88–97 architecture for IoT’, IEEE Internet Things J., 2015, 2, (3), pp. 230–239
[9] Al-Fuqaha, A., Guizani, M., Mohammadi, M., et al.: ‘Internet of things: a [23] Qin, Z., Denker, G., Giannelli, C., et al.: ‘A software defined networking
survey on enabling technologies, protocols, and applications’, IEEE Commun. architecture for the Internet-of-things’. Proc. IEEE Network Operations and
Surv. Tutor., 2015, 17, (4), pp. 2347–2376 Management Symp. (NOMS), Krakow, Poland, June 2014, pp. 1–9
[10] Why the Need for Special Operating Systems for IoT and Wearable Devices? [24] Chen, S., Xu, H., Liu, D., et al.: ‘A vision of IoT: applications, challenges,
Available at https://dzone.com/, accessed June 2017 and opportunities with China perspective’, IEEE Internet Things J., 2014, 1,
[11] Cisco Visual Networking Index.: Global Mobile Data Traffic Forecast (4), pp. 349–359
Update, 2016–2021. Available at https://www.cisco.com/ [25] Hahm, O., Baccelli, E., Petersen, H., et al.: ‘Operating systems for low-end
[12] Razzaque, M., Milojevic-Jevric, M., Palade, A., et al.: ‘Middleware for devices in the Internet of things: a survey’, IEEE Internet Things J., 2016, 3,
Internet of things: a survey’, IEEE Internet Things J., 2016, 3, (1), pp. 70–95 (5), pp. 720–734
[13] Roman, R., Najera, P., Lopez, J.: ‘Securing the Internet of things’, IEEE [26] Silberschatz, A., Galvin, P., Gagne, G.: ‘Operating system concepts’ (Wiley,
Comput. Netw., 2011, 44, (9), pp. 51–58 New York, USA, 2013, 9th edn.)
[27] Farooq, M., Kunz, T.: ‘Operating systems for wireless sensor networks: a
survey’, Sens. J., 2011, 11, (6), pp. 5900–5930