Building Smart Hardware That Respects Users’ Freedom


Free software provides the freedom to use, study, re-distribute and modify the software by anyone, anywhere and for any purpose. 

Curated by Vinay Prabhakar Minj 

We are producing and using more free software today than ever. However, at the same time, most hardware products built and owned by us do not offer the sort of freedom that they used to provide before they become smart.

In such a scenario, it is important to think over questions such as, what are the chances of purchasing a smart thing that:-

  • Would not require internet access or call home (i.e. communicating with its developers)?
  • Would allow the freedom to learn, hack, fix and extend?
  • Would not connect to a third party…and still functions and operates?

Paid or open-source software?

In our lives, there are so many things that we can’t do unless we connect all those things to a network. There is a certain advantage in building software that can do these things. But a problem occurs when we are aiming for “coolness” or “innovation” or “convenience”.Building such paid-software compromises our privacy, security and the freedom to hack and learn (the right to fix).

On the other hand, there are certain benefits that we receive on using free and open-source software such as complete privacy, auditable security, zero trackings and the freedom to hack and learn. We get these by default and without asking. Such properties are desirable in IoT as well.

For this:-

  • Users should care enough to ask for these rights and freedom
  • Developers should care enough to provide them – without the user asking.

At the developer’s side

If the desired outcome that we want to get includes freedom to learn, hack, fix and share with privacy and no tracking, then developers must leave old ways of doing things such as storing data on public cloud as it is the easiest and natural way of doing things. New methods of making choices should be adopted, else there will always be an inconsistency between developers’ choices and the actual outcomes.

In a rush to connect everything and quickly, things have been only optimised for “developer productivity and profit.”

So, it is necessary to optimise and do things in an ethical manner without sacrificing productivity and profitability.

There is a lot more software in things around us. There are different kinds of products that are connected in an IoT ecosystem or smart hardware ecosystem. These products are mostly powered by proprietary software. Which means, one cannot know what’s happening inside a device and it can’t be examined or changed.

However, choosing to build these products ourselves can allow us to choose free and open-source software. And if that choice is made, then everything automatically falls in place.

Being able to run free software can fix many of our problems, but running that free software everywhere is not possible.

All the software we employ could be proprietary or all of it could be free. But if we can list out what is non-free, then we can free it and own it. This will give more power to both developers and users.

Three pillars of a Free IoT Solution  

  • The choice of using free software
  • The choice of using liberated hardware
  • The choice of using self-hosting

Working upon these three pillars can solve a lot of our problems.

Advantages of free software

Free software provides the freedom to use, study, re-distribute and modify the software by anyone, anywhere and for any purpose.

Free software licenses mandate that when you distribute the software and hardware together, the source code needs to be shared with the users. If not done, then it is a violation of the license and the right to use that software is terminated automatically. If the manufacturer shares some source code but doesn’t share details about how to compile it, then that source code is of no use.

As a user of that software, it is your right to ask for its source code, compile and use it.  With this availability, one can do many things (besides what the software was originally designed for).

Which parts can/should be free software?

It is possible to have everything powered by free and open source software.

  • On-device Operating System, Firmware (microcontroller, single-board computer, any embedded system).
  • Networks
  • Backends and storages
  • Web/mobile apps, analytics and visualisation

All of these above components can and should be powered by free software.

Why choose liberated hardware?

Liberated hardware is a hardware that allows you to run free and open source software on your terms. That means, you won’t be required to ask the manufacturer for permission to run your own software.

If you don’t start building hardware in the right way or on yourself, you’re soon going to run out of place to run free and open source software. If you cannot control the hardware and do not have access to reprogramming it, then the software is of no use.


It can be referred to as a test of knowing whether something is free and open source software and running on liberated hardware or not.

Can a user run the IoT solution on their own hardware, at their own pace by self-configuring available software and services, even without an internet connection?

If one can do all these things, it qualifies as self-hosting.

Another way of looking at self-hosting is not storing one’s own data on someone else’s computer. When it is stored in other’s computer, the software used to store that data should be under your control.

More than that, self-hosting is about running the software in many more places than centralising where it runs.

So, using public cloud for this case can solve two of our problems:

  1. It enables us to consume computing power as a utility, so that we are not constrained by the definitions of the hardware on which the software runs.
  2. Something that runs on public cloud is accessible from everywhere.

So, the chances of purchasing a “smart < something>” with no requirement of the internet is great, provided that we choose free software, liberated hardware and self-hosting.

A few recommendations

If you’re planning your next IoT project, then consider these following points:

  1. Do not design the solution for internet access. If a user can set up and integrate a solution without needing internet access, it would imply two things:-
  • The IoT solution does not send or receive data/commands from the internet (privacy)
  • All (or most) parts of the solution can be self-hosted locally.
  1. Design for hackability. Don’t assume that users just want to use the solution in the way you have designed it. People want to do things on their own. To do those things, the right hardware and the right software need to be chosen. Hackability is useful only when defined by a “free license software”.

The open source hardware association has a directory where they have certified open source projects. And in this directory, there will be a link to the source code. In that link, one would get hardware schematics and details, software details, details on how to self-manufacture or reprogram it and so on.

  1. Design for free operating systems: While designing software for an IoT solution, don’t assume that users will only use Windows or macOS. Or don’t assume that a user’s Android phone will always have Google Play services.
  • It is easy to accommodate GNU/Linux into your ecosystem.
  • Design for f-droid on mobile devices.
  • Plan ahead for other free mobile operating systems.
  1. Design for reproductivity:  Simplify the process to make it reproducible. If it is going take too much effort to take the source code, recompile it and flash it on the hardware, then people won’t be interested in your hardware. To make it easier, you can have documented procedures or a very nice form factor interfaces for flashing hardware.

About the author

This article is an extract from a speech presented by  Abhas Abhinav, Founder, Deeproot Linux, at IOTSHOW.IN 2019. He is an entrepreneur and hacker specialising in free software and hardware.