/** \mainpage The \os Operating System \os is an operating system for resource-constrained devices in the Internet of Things. \os contains a low-power IPv6 communication stack, \ref uip "uIP". uIP is a small RFC-compliant TCP/IP stack that makes it possible for \os to communicate over the Internet. The system runs on a variety of platforms based on energy-efficient architectures such as the ARM Cortex-M3 and the Texas Instruments MSP430. The code footprint is on the order of a 100 kb, and the memory usage can be configured to be as low as 10 kb. In 2017, \os started as a fork of the Contiki operating system with the purpose of making a system focused on standard low-power IPv6 communication in the IoT. Another important goal is to have a regular release cycle and enhanced documentation. Although both systems at the beginning have many common interfaces and modules, we expect them to diverge considerably in the future. Most of \os is written in the standard C programming language, with the exception of some architecture-specific code that may use compiler extensions and assembly language. The source code is available as open source with a 3-clause BSD license. \section mainpage-getting-started Getting started with \os \os is designed to run on many different \ref platform "platforms". It is also possible to compile and build both the \os system and \os applications on many different development platforms. \section mainpage-building Building the \os system and its applications The \os build system is designed to make it easy to compile \os applications for either to a hardware platform or into a simulation platform by simply supplying different parameters to the make command, without having to edit makefiles or modify the application code. See \ref buildsystem \section mainpage-tcpip Low-Power IPv6 Networking One of the main features of \os is a resource-efficient IPv6 network stack designed for lossy and low-power networks. The network stack comprises protocols such as IPv6, TCP, UDP, DNS, RPL, CoAP, LWM2M, and Websockets. Beneath the IPv6 stack, \os supports IEEE 802.15.4 wireless communication with Time-Slotted Channel Hopping (TSCH). \sa \ref uip "The uIP TCP/IP stack documentation" \sa \ref tcpip "The \os/uIP interface" \sa \ref psock "Protosockets library" \section mainpage-threads Application Development Applications in \os are implemented using processes, which are based on a programming abstraction called Protothreads. Protothreads is essentially a lightweight stackless thread-like construct, allowing highly efficient context switching. A process is scheduled by an event-driven kernel after an event has been sent to the process, either from the kernel of from another process. Such events can be the result of a timer expiring, a sensor value changing, or a network packet having been received. Once scheduled, each process is responsible for yielding control back to the scheduler without executing for too long, which is typically done by waiting for an event. Alternatively, applications can also use the \ref mt, which supports a more traditional thread model with one stack per thread. \sa \ref process "Processes" \sa \ref pt "Protothreads" \sa \ref etimer "Event timers" \sa \ref ctimer "Callback timers" \sa \ref mt "Optional multi-threading" \section mainpage-lib Libraries \os provides a set of convenience libraries for common programming functionality, including memory management and data structures. \sa \ref memb "Memory block management" \sa \ref heapmem "Heap memory allocator" \sa \ref list "Linked list library" \sa \ref ringbuf "Ring buffer library" \sa \ref trickle-timer "Trickle timers" */