# Contiki

Contiki OS es un sistema operativo de código abierto desarrollado para uso en un número de pequeños sistemas pasando desde ordenadores de 8-bit a sistemas embebidos sobre microcontroladores, incluyendo nodos de redes de sensores. El nombre Contiki viene de la famosa balsa Kon-Tiki de Thor Heyerdahl.
A pesar de la multitarea que provee y la pila TCP/IP incluida, Contiki sólo requiere unos kilobytes de código y unos cientos de bytes de RAM. Un sistema totalmente completo con una GUI requiere aproximadamente 30 kilobytes de RAM.
El núcleo básico y la mayor parte de las funciones principales son desarrolladas por Adam Dunkels.
Recientemente se ha creado una nueva rama actualizada: Contiki-NG: el SO para la Futura Generación de objetos conectados.

## Características

Contiki está diseñado para sistemas embebidos con escasa memoria. Una configuración típica de Contiki consta de 2 KB de RAM y 40 KB de ROM. Cuenta con un núcleo orientado a eventos sobre el cual los programas pueden ser cargados y descargados de forma dinámica en tiempo de ejecución. Los procesos en Contiki usan protohilos, un mecanismo de abstracción ideado para proporcionar un estilo de programación secuencial sobre el núcleo orientado a eventos. También soporta multihilado apropiativo opcional por proceso. La comunicación entre procesos se realiza mediante la técnica de paso de mensajes, la cual está implementada mediante el sistema de eventos del núcleo. Tiene un subsistema GUI opcional, con soporte de gráficos para terminales locales, terminales virtuales en red mediante VNC o sobre Telnet. Incluye una pila ligera TCP/IP y la pila Rime, que está diseñada especialmente para comunicaciones inalámbricas de baja potencia y cuenta con un amplio rango de primitivas de comunicación. También soporta IPv6, junto con protocolos como RPL y 6LoWPAN.
Funciona en una variedad de plataformas, desde microcontroladores embebidos, como el MSP430 y el AVR, a viejas computadoras domésticas. El tamaño del código está en el orden de los kilobytes y el uso de la memoria puede configurarse para que sea de sólo unas decenas de bytes. Está escrito en el lenguaje de programación C y usa una licencia tipo BSD.

## Lista de características

Una instalación completa de Contiki incluye las siguientes características:
* Kernel multitarea
* Multitarea preferente opcional por aplicación
* Protohilos de ejecución
* Conectividad TCP/IP
* Sistema de ventanas y GUI
* Cliente remoto usando VNC
* Un navegador web (posiblemente el más pequeño del mundo)
* Servidor web personal
* Cliente telnet simple
* Salvapantallas

## Ports

El sistema operativo Contiki ha sido o está siendo portado a los siguientes sistemas:
* Computadoras:
** Apple II*
** Familia Atari de 8 bits*
** Atari ST
** Atari Portfolio
** Casio Pocketview
** Commodore PET*
** Commodore VIC-20*
** Commodore 64*
** Commodore 128*
** GP32
** Oric
** PC-6001
** Sharp Wizard
** Sistemas Unix (y similares) sobre x86, funcionando sobre GTK+ al igual que directamente usando el sistema X Window
* desarrollo basado en cc65.
* Videoconsolas:
** PC Engine
** Sega Dreamcast
** Sony PlayStation
* Videoconsolas portátiles:
** Nintendo Game Boy
** Nintendo Game Boy Advance
* Microcontroladores:
** Atmel AVR
** TI MSP430, TI CC2538: Archivado el 1 de agosto de 2020 en Wayback Machine., Firefly Archivado el 28 de julio de 2020 en Wayback Machine., Zoul Archivado el 28 de julio de 2020 en Wayback Machine. (integra el CC2538 y CC1200 en un mismo módulo)