Contiki is an operating system for IoT that specifically targets small IoT devices with limited memory, power, bandwidth, and processing power. It uses a minimalist design while still packing the common tools of modern operating systems. It provides functionality for management of programs, processes, resources, memory, and communication.
It owes its popularity to being very lightweight (by modern standards), mature, and flexible. Many academics, organization researchers, and professionals consider it a go-to OS. Contiki only requires a few kilobytes to run, and within a space of under 30KB, it fits its entire operating system − a web browser, web server, calculator, shell, telnet client and daemon, email client, vnc viewer, and ftp. It borrows from operating systems and development strategies from decades ago, which easily exploited equally small space.
Contiki supports standard protocols and recent enabling protocols for IoT −
uIP (for IPv4) − This TCP/IP implementation supports 8-bit and 16-bit microcontrollers.
uIPv6 (for IPv6) − This is a fully compliant IPv6 extension to uIP.
Rime − This alternative stack provides a solution when IPv4 or IPv6 prove prohibitive. It offers a set of primitives for low-power systems.
6LoWPAN − This stands for IPv6 over low-power wireless personal area networks. It provides compression technology to support the low data rate wireless needed by devices with limited resources.
RPL − This distance vector IPv6 protocol for LLNs (low-power and lossy networks) allows the best possible path to be found in a complex network of devices with varied capability.
CoAP − This protocol supports communication for simple devices, typically devices requiring heavy remote supervision.
Dynamic module loading and linking at run-time supports environments in which application behavior changes after deployment. Contiki's module loader loads, relocates, and links ELF files.
Cooja, the Contiki network simulator, spawns an actual compiled and working Contiki system controlled by Cooja.
Using Cooja proves simple. Simply create a new mote type by selecting the Motes menu and Add Motes → Create New Mote Type. In the dialog that appears, you choose a name for the mote, select its firmware, and test its compilation.
After creation, add motes by clicking Create. A new mote type will appear to which you can attach nodes. The final step requires saving your simulation file for future use.