Sistemas operacionais com foco na Internet das Coisas
- por Sergio Prado
Estou começando a perder a conta da quantidade de sistemas operacionais que, de uma forma ou de outra, estão direcionando o foco para a Internet das Coisas (IoT).
Mas o que significa um sistema operacional com foco na Internet das Coisas?
Basicamente significa um sistema operacional com baixo footprint (consumo de CPU, RAM e flash) e com boas opções de conectividade, principalmente sem fio. Melhor ainda se ele for modular, escalável, seguro e capaz de gerenciar eficientemente o consumo de energia.
Resolvi então criar uma lista dos sistemas operacionais com foco em IoT que acredito serem os mais fortes, seja pela grande comunidade de desenvolvedores, pelas características e funcionalidades, ou mesmo por ter uma empresa grande (ou consórcio de empresas) por trás do projeto.
Esta também não é uma lista completa, e posso ter esquecido algum player importante (me ajude nos comentários se for o caso). Também estou focando apenas em sistemas operacionais abertos e livres, afinal o mundo já é do software livre! :)
RIOT-OS
O RIOT-OS tem sua origem em 2008 como um SO para redes de sensores wireless e atualmente se auto-denomina o “Sistema Operacional Amigável para a Internet das Coisas”.
Com um footprint próximo de 1,5kB de RAM e 5kB de flash, possui um escalonador de tempo real baseado em prioridades e uma API (parcialmente) implementada no padrão POSIX.
Roda em microcontroladores de 8, 16 e 32 bits e possui suporte a gerenciamento de energia. Conectividade é um dos pontos fortes deste sistema operacional, incluindo o suporte aos padrões e pilhas de protocolo IPv6, 6LoWPAN, RPL, UDP e CoAP.
Possui um porte para Linux onde é possível estudar e aprender sobre sua API, e suporta ferramentas comuns de desenvolvimento como GCC e GDB. Possibilita o desenvolvimento de aplicações em C/C++ e implementa algumas funcionalidades interessantes como um terminal de comandos, alguns algoritmos de criptografia e bibliotecas para manipulação de estruturas de dados.
Liberado sob licença LGPL, possui suporte a diferentes arquiteturas de CPU incluindo x86, AVR, ARM7, ARM Cortex-M e MSP430. A lista completa de plataformas suportadas está disponível no site do projeto.
CONTIKI
O Contiki foi criado em 2002 por Adam Dunkels (o mesmo criador das pilhas de protocolo uIP e lwIP) e hoje é mantido por uma equipe grande de desenvolvedores ao redor do mundo. O projeto se auto-denomina o “Sistema Operacional de Código Aberto para a Internet das Coisas”.
Com um footprint de aproximadamente 10kB de RAM e 30kB de flash, possui suporte abrangente da pilha de protocolos TCP/IP, além dos protocolos IPv6 focados em baixo consumo como 6LoWPAN, RPL e CoAP.
O escalonador do Contiki trabalha no modo colaborativo através do uso de protothreads (conceito parecido com as co-routines do FreeRTOS). Como as protothreads não possuem um stack, possibilitam uma economia grande de memória RAM, comparado a outros escalonadores preemptivos onde cada tarefa possui seu próprio stack.
Projetado para rodar em sistemas com baixíssimo consumo de energia, ele provê alguns mecanismos interessantes para estimar e analisar o consumo de energia da aplicação.
Suporta ainda carga dinâmica de módulos, que possibilitam estender o funcionamento do sistema e facilitam a atualização da aplicação em tempo de execução. Possui outros recursos interessantes como um sistema de arquivos para flash chamado Coffee e um terminal de linha de comandos.
Liberado sob licença BSD, roda em uma variedade grande de arquiteturas de hardware, incluindo 8051, AVR, MSP430 e ARM. Uma lista completa de plataformas suportadas está disponível no site do projeto.
NUTTX
O NuttX é um sistema operacional de tempo real de código aberto para microcontroladores com uma ênfase em compatibilidade com padrões de mercado (POSIX e ANSI) e baixo consumo de recursos (CPU, RAM e flash).
Criado por Gregory Nutt (daí o seu nome) em 2007 e liberado sob licença BSD, suporta diversas arquiteturas de microcontroladores, de 8, 16 e 32 bits, incluindo ARM, AVR, 8051, MIPS e z80.
Possui funcionalidades comuns em sistemas operacionais de tempo real como determinismo, preempção e herança de prioridade.
É um sistema operacional bem completo, e além do kernel de tempo real, possui suporte a sistemas de arquivos, pilha de protocolos TCP/IP, USB host e device, biblioteca gráfica e um conjunto de aplicações adicionais como um terminal de linha de comandos (NuttShell) e diversas outras ferramentas.
Suporta ainda alguns recursos interessantes como carga dinâmica de módulos, suporte à sistemas SMP (multicore), sistema de arquivos para flash (NXFFS, SMART), possui uma biblioteca C e suporte ao sistema de logs syslog. É quase um sistema *nix para microcontroladores!
Para quem estiver interessado, escrevi um artigo sobre o NuttX algum tempo atrás.
ZEPHYR
Este sistema operacional é bem novo e vem com certa força. Lançado este ano (2016) pela Linux Foundation em parceria com grandes empresas como a Intel e a NXP, o Zephyr é um sistema operacional de tempo real para dispositivos de IoT com foco em conectividade, modularidade e segurança.
É um sistema operacional multithread com um escalonador preemptivo baseado em prioridades e possui diversas funcionalidades para economia de energia como o modo tickless idle. Utiliza um conceito interessante chamado fiber, que é basicamente uma tarefa de alta prioridade (comparada às tarefas comuns) escalonada de modo colaborativo.
Possui baixo footprint (começando em 8kB de RAM) e suporta diversos protocolos e padrões de mercado como Bluetooth, Bluetooth LE, WiFi, 802.15.4, 6Lowpan, CoAP, IPv4, IPv6 e NFC.
Liberado sob licença Apache, no momento são suportadas as arquiteturas ARM Cortex-M, Intel x86, e ARC, incluindo portes para as placas Arduino 101, Arduino Due, Intel Galileo Gen 2 e a Freedom Board FRDM-K64F da NXP.
BRILLO
Este é outro sistema operacional que vem com bastante força, já que tem a empresa Google por trás. Anunciado no ano passado (2015), o Brillo é uma plataforma de IoT que inclui uma versão reduzida do Android e um protocolo chamado Weave para conexão entre os dispositivos IoT.
Desenvolvido em parceria com a Nest (aquela empresa fabricante de termostatos digitais que a Google comprou por US$ 3,2 bilhões!?), possui suporte às arquiteturas ARM, Intel e MIPS. Diferentemente dos sistemas operacionais apresentados anteriormente, o Brillo não foi feito para microcontroladores, já que possui um footprint mínimo de 32MB de RAM e 128MB de flash.
Atualmente algumas placas já suportam esta plataforma, como a Intel Edison e a Hobbitboard. Já existem também alguns produtos no mercado com suporte ao Brillo como este hub da Asus.
MBED OS
O mbed OS vem com a força da ARM e suporta apenas microcontroladores ARM Cortex-M.
É um sistema operacional modular, seguro e com foco em conectividade. Diferentemente da maioria dos sistemas operacionais apresentados mais acima, ele não é multithread. Seu escalonador é colaborativo e baseado em eventos (segundo o site do projeto, eles estão trabalhando em uma versão multithread que deve ser liberada ainda este ano).
É capaz de garantir isolamento de memória entre as tarefas através da MPU (Memory Protection Unit) existente em microcontroladores Cortex M3/M4, e suporta diversos protocolos e padrões de comunicação como Ethernet, WiFi, IPv6, 6LoWPAN, TLS, Bluetooth Low Energy.
QUAL É MELHOR?
Muito difícil dizer. Eles são parecidos em alguns aspectos como baixo footprint e opções de conectividade, porém diferem em outros aspectos como suporte a hardware e tamanho da comunidade de desenvolvedores. O Contiki e o NuttX são dois que me agradam bastante, mas o Zephyr pode ganhar momento e vir com força com a ajuda da Linux Foundation.
TEM MAIS?
Sim, tem muito mais sistemas operacionais com foco em IoT por aí, incluindo o LiteOS da Huwaei, TinyOS e o Ubuntu Core da Canonical.
Muitos podem estar se perguntando, e o FreeRTOS? Apesar de gostar bastante do projeto, não o considero como um forte concorrente no universo de aplicações para dispositivos IoT. O FreeRTOS é (ainda) apenas um escalonador de tempo real com algumas rotinas de suporte, e ainda não possui uma pilha de protocolos aberta e integrada ao kernel. Existem algumas opções de pilhas de protocolos comerciais, além da possibilidade de integração do lwIP. Mas na minha opinião, para o FreeRTOS concorrer neste mercado, é necessário algo mais integrado ao kernel, com código-fonte aberto e uma licença amigável comercialmente.
E você? O que acha? Conhece mais algum sistema operacional com foco em IoT que possa competir com estes que comentei? Deixe aí sua opinião nos comentários.
Um abraço!
Sergio Prado