Sistemas operacionais com foco na Internet das Coisas

- por Sergio Prado

Categorias: RTOS Tags: ,

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).

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

  • Muito bom Sergio. Realmente temos várias opções muito boas open-source acho atraente a proposta do RIOT e do Contiki, mas o Zephyr acho que me interessa em explorar e conhecer melhor.
    Lembro de ter lido uma noticia que a Samsung lançaria em abril/2016 um RTOS para IoT, mas não me recordo se proprietário ou open-source, sabe algo sobre isso?

    Abraço.

    • Olá Cleiton!

      Ainda não liberaram nada mas, se não me engano, será open-source e fará parte da plataforma Artik deles. Usando a minha bola de cristal, deverá provavelmente se chamar Artik OS. :)

      https://www.artik.io/

      Abs!

  • Euripedes Rocha Filho

    Boa lista. Um OS que é pouco conhecido é o ChibiOS. Tem bastante tempo de estrada e uma HAL bem interessante, principalmente se o projeto usa uC ST. Não me lembro da questão de integração com a pilha de rede.

    Talvez o ponto mais importante nessa questão de escolha seja a qualidade das stacks de rede e a disponibilidade de recursos de cripto e suporte a TLS, que devem surgir como requisito ao escolher o SO de maneira mais frequente no cenário IoT.

    Um adendo não relacionado. Protothreads são uma excelente escolha em projetos com menos recursos Além de serem mais simples de debug.

    • Legal Euripedes, não conhecia o ChibiOS. Valeu pela dica. Abs!

  • Marcio Rodrigo de Oliveira

    Legal Sérgio, eu tinha estudado bastante ano passado, mas com foco nos protocolos de comunicação. Por falar nisso, qual você acha que vai vingar? Eu tinha gostado do MQTT pela simplicidade…

    • Olá Marcio,

      Também só tive contato com o MQTT e gostei bastante da sua relação custo x simplicidade. Outro que percebo que tem recebido certa atenção é o AMQP, principalmente para implementar a comunicação Gateway -> Cloud. Um abraço!

  • Oliveira Fausto

    Recentemente a Arduino SRL, anunciou o Apache Mynewt para 32 bits, com suporte a Bluetooth Low Energy 4.2(BLE) e as placas Arduino Primo(Nordic), STAR Otto(STM32 Cortex-M4), estrela Otto, Arduino Zero, Arduino Zero Pro e Arduino M0 Pro. Disponível sob licença Apache, Versão 2.0.

    http://mynewt.apache.org/

    • Legal Oliveira! Este realmente não conhecia. Valeu pela dica, vou dar uma olhada. Abs!

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.