# Internet of Things (IoT) Operating Systems Management: Opportunities, Challenges, and Solution
## 2 IoT OS Key Features and Characteristics  
Table 1 provides the key features of different IoT OSs. The list of IoT OSs are exhaustive. Therefore, we only considered that is mostly used by the research community. TinyOS [21] is preliminary designed for Wireless Sensor Networks (WSN) and distinctively most popular among the research community for many years. However, nowadays it is not used much by the researchers due to lack of active development. TinyOS uses dialect of C programming language called neSC. This complex customized language is hard to learn. It follows the monolithic architecture and provides cooperative task scheduler. Tinythread [22] can be used to achieve the multi-threading. It also provides IPv6 stack based on 6 LoWPAN. TinyOS Low-Power Listening (LPL) implements the Radio Duty Cycling (RDC) to provide the energy efficiency and consequently enhances the network lifetime. TinyOS provides discrete event simulator called TOSSIM. Hence, users can run and debug the program on the system instead of the more. Contiki [23] is actively developed by the practitioners and research community. Therefore, it is widely used by the research community for IoT constrained devices. The low memory requirements make Contiki well suited for low power constrained devices. It is written in C language. It also provides the multithreading using the protothread. Contiki uses the cooperative or preemptive based \begin{table}
\begin{tabular}{c c c c c c c c} \hline \hline
**OS** & **Min RAM** & **Min ROM** & \begin{tabular}{c} **C** \\ **Support** \\ \end{tabular} & \begin{tabular}{c} **C++** \\ **Support** \\ \end{tabular} & \begin{tabular}{c} **Multi** \\ **Threading** \\ \end{tabular} & **Architecture** & **Scheduler** \\ \hline TinyOS & \textless{}1 kB & \textless{}4 kB & ✗ & ✗ & \(\sim\) & Monolithic & Cooperative \\ \hline Contiki & \textless{}2 kB & \textless{}30 kB & \(\sim\) & ✗ & \(\sim\) & Monolithic & \begin{tabular}{c} Cooperative, \\ preemptive \\ \end{tabular} \\ \hline RIOT & \textless{}1.5 kB & \textless{}5 kB & ✓ & ✓ & ✓ & Microkernel & \begin{tabular}{c} Tickless, \\ Preemptive, \\ Priority based \\ \end{tabular} \\ \hline Zephyr & \textless{}2 kB to \textless{}8 kB & \textless{}50 kB & ✓ & ✓ & ✓ & \
\begin{tabular}{c} Nanokernel, \\ Microkernel \\ \end{tabular} &
\begin{tabular}{c} Preemptive, \\ Priority based \\ \end{tabular} \\ \hline MbedOS & \textless{}5 kB & \textless{}15 kB & ✓ & ✓ & ✓ & Monolithic & Preemptive \\ \hline brillo & \textless{}32 MB & \textless{}128 MB & ✓ & ✓ & ✓ & Monolithic & Completely Fair \\ \hline \hline \end{tabular} Note: \(\sim\) Partial Support; ✓ Support; ✗ No Support.  
\end{table} 
Table 1: Overview of IoT OSs. scheduling for the processes. Contiki supports several rich network stacks that provides comprehensive set of features like IPv6, 6 LoWPAN, RPL and CoAP. Moreover, it also provides multiple industry standard Medium Access Control (MAC) such as Carrier Sense Multiple Access (CSMA) and Time Slotted Channel Hopping (TSCH). ContikiMAC and Contiki X-MAC RDC is used to make the motes energy efficient. Cooja simulator or emulator is used to quickly write, test and debug the code before actual deployment. It supports numerous IoT devices like wismote, sky and, z1. Cooja is written in java and implemented as a single simulation thread. Hence, it cannot take advantage of multi-core processors and takes long time to finish up the simulation for dense network scenarios. Further, it needs to further develop to accommodate newly available IoT hardware platforms. RIOT [24] is developed on top of microkernel named FireKernel by team of freie University Berlin and HAW Hamburg. Ever Since, active developer and research community is growing and adding the desired industry specific standards to support ongoing research. The design goals include energy efficiency, small memory footprint, modularity and uniform API access that provides independent hardware abstraction. RIOT supports C and C++ programming languages.