Contemporary Internet of Things

Privacy is an interesting subject. As we march forward into the future a lot of past dreams are coming to fruition. We are seeing more vendor-locked in hardware which requires constant internet connections. These devices are a direct line form the vendors into homes. Wonders like Amazon Alexa’s ability to purchase anything we ask of it to Google home’s ability to modify our thermostat for us. To the more scary side of Samsung TV recording your peronsal conversations to share with third parties. Although I often question where the line is, I generally consider myself catious but not paranoid about information security. There is a certain level of practical security one should take. There is also the other side, of tossing your secrets into a safe and throwing it into the sun to destroy the information.

As a long time consumer and not very good contributor to open source, I was wondering what open source solutions exist to me. I’ve got some overpowered hardware I would like to use before time makes it obsolete. Unfortunately there is no Intranet of Things out there I had luck finding. I’ve scoured the cat-tubes without any luck.

If you know me as a software developer you probably know my first passion in software is the complexities of system level things. This was the reason why I ventured to write an operating system while I was in high school. Questions around user land + the cross cutting concerns of security and resource sharing are details that stoke my fire. So I was wondering how difficult it would be to build an Intranet of Things.

IoT: Intranet versus Internet

The earliest reference to an Intranet that I can remember in my lifetime was in the Cisco courses I took in high school. An Intranet is a private network specific to some unit. For my case it would consist of my home network, and maybe the VPC in my AWS accounts or other families networks I have direct access to. This is contrasted to the Internet which is the public networks accessible owned and operated by many distinct entities, both public and private.

In an Intranet of Things one would reasonably control the software, hardware, and data of the system. Access to specific resources should be reasonably restricted to the approved needs and not much more. For example, a home recognition system should not need access to the public internet. However the application might request access to a GPU attached to the system and an unstructured object store to retain audio samples to train on. This application may also require a relational data store for persistance of data.

Modern software application platforms have moved beyond the multi-user multiplexing of hardware resources. Modern platforms additionally provide integration of core cross cutting concerns of a distributed environment; such as logging, secret management, service authentication, and orchestration. Ideally a home Intranet of Things platform would provide such features to encourage the development and maintenance of those processes.

Fog: Vapour-ware platform for an Intranet of Things

I would love to see a new open source platform which would allow the function specific devices which are on the rise be able to connect and deliver data, then provide the infrastructure to provide the to process that data and effect the world. I would hope the system could be built as a number of reasonably sized components which are easily replaceable so users may swap them out, and audit the code.

The data processing system would ideally be built on top of Docker and/or Rocket. There would be ingress hubs for simplistic devices, like Arduinos over an RF link. For more complex devices these will include direct connections into system over standard secure systems like PKI. These devices will be pushed into a processing pipeline to digest the data and provide some information or feedback. Backing these analysis services would be persistent storage mechanisms. Either databases like CouchDB or Postgres, or unstructured object storage. The security subsystem would be interesting as you need to verify incoming device streams, application resource access, and real data access + management.

I find this an interesting problem domain. Perhaps I’ll be able to find more time to play with building the platform orchestration unit and prototype some data capture.