Archive for January, 2015

Archive for January, 2015

Electronic Device Freedom

Posted on

The software freedom movement was born in the 1980s out of a need to champion certain
essential freedoms for computer users:

  • The freedom to run the program as you wish, for any purpose
  • The freedom to study how the program works, and change it so it does your computing as you wish
  • The freedom to redistribute copies so you can help your neighbour
  • The freedom to distribute copies of your modified versions to others

These freedoms cover the basic necessities for computer users, but over the years computers have changed, showing us latent ambiguities in this definition. What is “the program”? What is “computing”?

Papering over a binary blob

When the software freedom movement started, a lot of things about computing were simpler. Instructions executing on a CPU would send and receive signals to and from various attached buses in order to initialize and control all of the system’s peripherals. Operating systems needed very specific device drivers for each peripheral that existed on the planet. So “software” was simply everything that contained instructions for the CPU and “computing” was simply the use of “a computer”, which probably seemed pretty clearly defined at the time.

As peripherals grew in number and complexity, there was an increasing need to run some of the instructions that governed their operation on microprocessors other than the CPU. This was done both for performance (so the CPU would not need to be involved for every single bit of WiFi data your antenna sees) and for standardization (so that all storage drives could speak the same language to the host computer). This leads to the question: are these instructions “software”? More specifically, do users of the computer need to have the same freedoms with these instructions as they do with other software in order to have freedom in their computing?

The Free Software Foundation drew the line for “software” at executable instructions that could be altered in a device by the user. The idea is that if the user cannot update the instructions, then they cannot exercise their freedoms even if they were provided them in some theoretical way. These instructions, though made of the same “stuff” as software, are considered a part of the hardware. Of course, this just adds a new question: what does it mean to say “the user can update the instructions”? If they have to desolder and replace a chip, but said replacement chip can be easily had, is that enough?

Discussions around these issues often get lost in the weeds of trying to define the words used in the definition of software freedom published by the FSF. But if the real question is freedom, then the answer lies not in the words, but in the purpose of the words. If “running free software on your computer means that its operation is under your control,” then traditional software freedom is no longer sufficient. Let us examine each freedom in turn.

The freedom to use the device as you wish, for any purpose

Back to an earlier question: what is “computing”? Well, given the context of the software freedom movement, I would argue that “computing” is any context in which the same components as “computers” are used. That is, digital electronics and instructions that command those electronics.

This means that using your TV is a form of “computing”. As is using your mobile phone, your printer, your car, your climate-control system, your health-monitoring band, or your treadmill. These things may not all be what they thought of in the 1980s as “computers”, and they may not even be what we normally think of today as “computers”, but they have the ability to provide or restrict freedom in the same ways as computers, and so I think the same freedoms should be considered in this broad context.

And so, to change the wording slightly of the FSF’s freedom 0: users need the freedom to use their devices as they wish, for any purpose. The fundamental need for this freedom derives from our ideas as a society about personal property. If you own a device, you should be allowed to use that device as you wish, and not only as the creator imagined. You should be free to use your old phone for anything from holding down papers to using its battery to power some new contraption. You should be free to give your old eBook reader to a friend. You should be free to plug your music player into a device that makes it play louder. You should be free to use your DVD player to play home movies and not just Hollywood movies.

The most common violation of this freedom that we fight today is technological protection measures (TPMs), also called digital restrictions, digital locks, digital handcuffs, or DRM. The software freedom movement has been part of the fight against TPMs since they first became a major issue. Your devices may simply refuse to open the movies, music, apps, or books you load onto them. Laws in many countries of the world, intended to protect a few interest groups, make it a criminal offence even to modify your DVD player so it can play some DVDs, your eBook reader to read some eBooks, your phone to run some apps, or your television or digital receiver to have a new video output. This is just one way in which your freedom to use your device as you wish is violated.

The freedom to study how the device works, and change it so it does your computing as you wish

The freedom to change your device is partly about the freedom to use it as you wish. You should be free to use your devices in both ways the creator imagined, and also in new ways. However, if no one is allowed to understand how the device works, or produce ideas for such novel uses, then your freedom to use your device will be limited to uses that are in line with what can be understood about it. What good is being allowed to play home movies on your DVD player if no one knows how to put your home movies onto a DVD?

The smallest part of this freedom is also an expression of your personal property rights. You should be free to open up your devices and look inside. You should be free to send various signals to your device in an attempt to understand how it responds. You should be free to attach new devices to the insides of your device in order to study whatever properties of those insides you wish to study.

So far, these freedoms do not mean that it is the job of the creator to go out of their way to make such things easy. Just as the freedom of the press does not protect reporters from ridicule or war correspondents from bombs, so too the freedom of device modification does not require that update mechanisms be provided. But if you, someone you know, or a new startup company can figure out how to put your device to some new use, they must have the freedom to do so, without fear of successful lawsuit or criminal prosecution.

However, we must go further than that. You need the freedom to study how your devices work, not just to study how they are put together. The fundamental need for this freedom derives from the same source as competition law and consumer protection. Even if you do not intend to study how your device works, you must be free to do so because you need others to be free to do so. If there is a dangerous problem with your device, you should be able to find out. If new devices are to be made, students must be free to study devices that exist.

Imagine mechanics and engineers being trained without being told how existing engines work. Imagine pilots and aerospace engineers being trained without being told how planes are able to fly. Just looking at an airplane is not enough: students must be told how it works. Yet with many devices we use every day, if a student asks how some features of the device work, they might only be told “we don’t know and it is a criminal activity for us to try and find out”.

In order to know how a device works you must know what components are in it and what they do. Many components are not clearly labelled, or their labels come off with time, so it is important to have access to documentation detailing which components were used, and where to find them in the device, or study of these parts of the device may be impossible. Documentation must also exist for each component, detailing what it does. Common components, such as resistors or transistors, are readily documented in general knowledge, and so simply saying “this is a 5 ohm resistor” may be sufficient. Integrated circuits may need a bit more explanation, such as “this flash memory can be communicated with according to such-and-such a protocol”. For circuits that can be reprogrammed, such as microprocessors, you need access to the source code that creates the instructions running on those circuits. For circuits composed of multiple devices (such as a System on Chip) you need to know what devices are present, and how to communicate with each one.

Note that even here there are levels of depth. If I know that a device uses a particular system on chip, what capabilities that system on chip has, and have the source form of the instructions that run on that system on chip, then I can understand how my device works. I may not understand how another device that I own (namely, the system on chip itself) works, but I know how the device it is embedded within works. And so we have devices within devices, possibly further nested than this. Really we do need the freedom to study how all our devices work. However, if our freedom is restricted on one device that might not necessarily restrict our freedoms with respect to devices made out of that device.

Some creators violate these rights by intentionally obscuring what components they have used. Sometimes laws exist to prevent anyone from studying some components directly (for example, in many countries it would be criminal activity to discover how a DVD player’s TPMs work, even though we already know). However, the largest way in which these rights are violated is by omission: creators simply do not tell us what components they have used or what instructions they have given to those components, and so we have no effective way of finding out how the device works at all.

The freedom to tell others how your device works so you can help your neighbour

Not everyone has the time or resources to study how their devices work. If everyone had the freedom to study in this way, but could not share what they had learned, then what have we gained? And so it is important that you be free to share what you have learned with others, and to tell others what instructions are running on the microprocessor or what the use of some particular combination of components is.

The most common way in which this freedom is violated is by the use of copyright law or non-disclosure agreements to restrict the redistribution of source code, specifications, or schematics.

The freedom to create new devices based on your existing devices, and to distribute these new devices

I once asked Richard Stallman, a key leader of the software freedom movement, why he doesn’t propose that freedom should be extended to the hardware level in our devices. He replied that he doesn’t need that freedom because he doesn’t have a fabrication line. This line of reasoning is, I expect, also what lead the Free Software Foundation to classify freedom for microprocessor instructions that a user cannot update as non-essential. The idea is, if you cannot make the change, then what good is your freedom to make that change doing you?

I would suggest that the change can always be made, but you may not be able to make it alone. It is getting easier and easier for smaller groups to get electronics of various kinds fabricated. I may not be able to update the firmware on my keyboard, but I could (if someone makes one, which they should have the freedom to do) order a replacement controller and have someone install it for me. I may not be able to update the software on my car’s multimedia system, but I could pay someone to install a new multimedia system in my car. I may not be able to add new instructions to my car’s fuel injection system, but I can install an aftermarket controller in an attempt to boost my fuel efficiency.

So it is that you need not only the freedom to study existing devices, so that you know how they work, but the freedom to make new devices, so that everyone can benefit. The key ways in which this freedom is violated today are both copyright and patent laws, preventing new devices from being made that reuse either parts of the software or techniques of previous devices.

Limitations on Freedom

I have up to this point talked about freedom as an absolute, but of course it is not. In the same way that your freedom of speech does not prevent libel lawsuits or protect your hate speech, so should your electronic freedom not be without limit. While you need to be free to use your device as you wish, if you use it to criminal ends you may still be prosecuted as a criminal. When you are granted the freedom to study or alter your device, it must be without specific restriction, but other restrictions may reasonably be placed on you by lawmakers according to the governance of your society.

Partial freedom

We do not yet live in a world where every computing-related device one might need to use, or every computing-related goal one might need to acheive, can be achieved in perfect freedom. That is, of course, our goal, and an important part of reaching that goal is to make use wherever possible of the freedom that we do have. However, sometimes one must make a very difficult choice.

If you value freedom, you may desire a laptop whose CPU you can study and modify. However, no effective laptop of this nature currently exists. So there is a choice: use a laptop that disrespects some of your essential freedoms, or do not use a laptop at all. However, the choice is hardly a binary one. You may chose a laptop which can be operated entirely using instructions to the CPU and peripherals that can be studied. This is certainly a huge improvement over a laptop where nothing can be studied, even if it is not ideal!

Even the GNU project, the flagship software freedom project of the FreeSoftware Foundation, was initially developed using software that did notprovide the members of the GNU project with freedom. Why? Becausefreedom-respecting tools did not yet exist — they were in the midst of creating them!

You will never have freedom if you wait for the perfect ideal before you begin to prefer tools that respect your freedom. However, you will also never have freedom if you do not carefully consider the implications of devices and programs you choose. The question that is always before you is: are you compromising your freedom out of necessity, or because of a lack of knowledge of motivation? Take your own freedom, and the freedom of your neighbour, seriously.


We will never achieve the freedom we desire if we content ourselves with fighting for the freedom of devices we already know about. This is the sort of strategy that led to freedom existing only for desktop computers, and then for desktops and laptops, and losing (without even knowing it was happening) the battle for keyboards, mice, touchscreens, cellular data modems, and so many other peripherals. If we only work to free what exists, then we will miss out on every new thing that might exist, and many users will be tempted away from freedom by new devices.

So what am I saying we must anticipate every possible new device? Should we have anticipated projected capacitive touch technology and the Thalmic Myo and the health monitoring arm-bands and smart-watches and every other thing? Of course not, that would be impossible. Rather, we should: convince more people to care about their freedom enough so that new innovators care to think to give it to them, and we should work on new innovations ourselves, and not be content to simply copy what we see around us in our work for freedom.

What am I going to do about it?

I have been a software freedom advocate for some time now, and have worked on such issues as freedom for interactive websites and freedom in the social networking space. The work is not yet done in these areas, though great progress has been made. I, however, plan to shift my focus in 2015 down a few layers to the devices we use themselves. I have already been supporting amazing devices that greatly (if not completely) respect users’ freedom, such as:

  • Novena, a motherboard, battery control board, and laptop for hardware research, prototyping, and creation
  • Gluglug Laptops, refurbished laptops that respect your freedom in every aspect of the software
  • USB Armory, a freedom-respecting USB-powered computer for security applications
  • ZaReason Computers — most of their devices respect user freedom in all instruction executing on the CPU

And there are other devices which might be of interest as well, including the GCW Zero, a handheld gaming console, and FSF endorsed devices.

On the new work front, I am tackling the tablet and netbook space. Hardly the most innovative space, I agree, but this will give me experience with whole-device creation as well as touch-panel technology that I think will be useful in the creation of many possible future devices. My goals for the near future are the following:

  1. Source and install a PCAP panel for my Novena when it arrives, and have this working as a pseudo-tablet by sometime in the spring
  2. By the end of 2015, have a prototype tablet built out of a readily-available single-board computer that anyone with access to a makerspace could replicate
  3. Do the work to turn this prototype into an acceptable tablet form-factor

After this point, a tablet that respects user freedom in every instruction executing on a microprocessor (except the PCAP controller) should be possible. So all that will remain for the tablet itself is to create a liberated PCAP controller that will work with easily-obtained microprocessors. This may involve reverse-engineering touch panels to some degree, and will definitely involve complex finger-tracking algorithm development for multitouch.

This is not a short-term project, and I’m not going to quit my day job, so it is likely that needs (and my abilities) will change eventually, resulting in new directions, but for the next chunk of time, this will be my priority.

What are you going to do about it?

You, too, can do your part for freedom. If you are a software developer (like me) you can create new innovative software that respects freedom or contribute to existing software freedom projects. If you are a hardware hacker, you too can work on devices where there is need. If you have money you can help fund important projects and organizations. If you have a small community with software or device-related needs, you can tell people about those needs. Freedom means the freedom to have your needs met (though you may need to find someone with the skills to make the necessary improvements), and not be forced to wait until some big company decides there is a market for the features you desire. Get out there and use the freedom-respecting technology that exists, figure out what is wrong with it, talk about it, tell people in the community where things can be improved. We have come a long way since the 1980s, but there is so much more to do, and everyone can be a part of it.