Apa Gunanya OS di dalam IoT Device?

Perhatian saya “terperangkap” ke dalam sebuah obrolan di Facebook Group IoT Geek Surabaya, yang sedang membahas standards dan protocols seputar Internet of Things (IoT). Saya ikut nimbrung dengan sedikit berpendapat tentang messaging protocol seputar IoT dan sekaligus menyertakan referensi ke deck yang saya publish di sini, untuk memperlihatkan technological possibility around IoT:

 

Ternyata mas Muhammad Hadi Lo sebagai thread-starter dari obrolan di atas tampaknya membaca slide-slide lain di dalam deck itu, terutama tentang beberapa kemungkinan Operating System (OS) seputar IoT. Lalu dia menanyakan sebuah pertanyaan yang menurut saya cukup profound, saya kutip di sini:

Mas, di slide kok ada Operating System ya… apa gunanya OS pada IoT? Bukankah dengan misal Arduino+WiFi module sudah bisa menyambung ke internet [tanpa perlu Operating System] ?

Demi mencoba merespon dengan sedikit lebih komprehensif dan lebih utamanya sebagai catatan pribadi, saya akan bahas di bawah ini. This article is by no mean to discuss OS architecture or theory, I’m far far far from expert for that topic.

Microcontroller (MCU) sebagai “otak” dalam “Thing”-nya dari “Internet of Things”, bukan berarti tidak memerlukan Operating System (OS). Program yang kita tulis dengan Arduino IDE, di-compile menjadi binary, dan kemudian binary-nya di-flash ke dalam non-volatile flash memory-nya Arduino, I think in a way is kind of Operating System. Salah satu tugas OS adalah mengelola hardware, and that’s what our Arduino program basically do.

Mari kita lihat Arduino Due, misalnya, yang berbasis ARM Cortex M3. Kita bisa men-develop program untuknya yang “menerapkan” fungsi-fungsi OS, seperti multi-threading. Caranya adalah dengan menulis program berbasis SDK dari OS yang ingin dipakai. Salah satu OS yang  cukup populer adalah RIOT OS. Selain untuk MCU berbasis ARM, RIOT OS juga available buat ATmega dan x86.

For the one of most popular MCU currently, ESP8266, we can develop our firmware that’s based on FreeRTOS SDK so that it has multi-threading capability, for example. FreeRTOS is a variant, most popular of Real Time Operating System (RTOS).

Why OS?

So, kenapa perlu pakai OS buat MCU? OS biasanya punya beberapa fitur:

  • Microkernel yang mengelola thread execution, either multi-threading (FreeRTOS), or single-threaded berbasis arsitektur event-driven (seperti mbedOS). microkernel biasanya juga menyediakan fungsi system timer, inter-process communication (IPC), dan lain-lain.
  • Data structures: hashtables, queue, semaphore, mutex, signal.
  • Memory management
  • IP networking stack, yang pastinya penting bagi IoT, karena dia mengusung term Internet (Protocol) -> IP
  • Flash filesystem. Yes, it’a file system on top of the flash memory
  • Cryptography dan security
  • Hardware Abstraction Layer (HAL), supaya OS bisa cross-platform dan tetap menyediakan API yang consistent bagi user application, misalnya: untuk akses timer, interrupt, GPIO, SPI, I2C.

Jadi, apakah harus pakai OS buat MCU? Pastinya gak harus, tergantung kebutuhan. Don’t kill mosquito with a bazooka.

Lebih jauh lagi, “Thing” dalam Internet of Things gak harus selalu berbasis MCU (misalnya ATmega 328 yg dipakai pada Arduino UNO) yang biasanya berbasis Harvard architecture, tapi bisa juga berbasis general purpose – von Neumann/Princeton or Hybrid model – microprocessor (MPU), seperti pada Raspberry Pi. MPU biasanya memerlukan full-blown operating system (kayak Raspbian, Windows 10 IoT Core), to make it even more general purpose computing machine. Walaupun bisa saja bare metal, meaning that you create and run your own assembly code directly on top of Raspberry Pi, tapi ya harus dilihat dulu benefitnya versus kerugiannya :)

So, long story short, kembali ke pertanyaan awal, apa gunanya OS dalam IoT? Well, sometime we just need an OS untuk running di dalam “Thing”-nya dari Internet of Things, to serve our purpose. Dan betul, dengan Arduino board + WiFi module, kita bisa membuat koneksi dengan internet tanpa perlu OS yang saya ceritakan di atas.

Premature optimization is the root of all evil — Donald Knuth