Practically Speaking, What Actually is Free Software?
2020 November 27
I talk about free software a lot. Briefly, free software is software that gives users freedom - freedom to use it however they want, study it, share it, and modify it. Free software is more commonly called "open source" software. The point of this post is not to convince you to say one or the other. The point is to acknowledge that talking about freedom or openness is very abstract and doesn't actually tell you what it means in practice and to explain more concretely what it does mean in practice for software to be "free" or "open source".
Most software operates under frameworks that give the software developer power over the user. The user uses the software, but they don't control it. It does what the developer wants it to and obeys the user only to the extent that the developer allows.
Here are just a few examples where you can see that the developer controls the software to serve their purposes, not the user's:
- A phone or tablet running iOS should by all accounts be a full computer able to run any software. In practice, the system is extremely locked down, and users can only install approved apps from Apple's app store (where Apple has more control and also gets a big cut of in-app purchases). Removing restrictions on iOS is known as "jailbreaking", which further illustrates the point that Apple controls the phone - they have it in a jail.
- Windows 10 has a ton of privacy-invading telemetry, all enabled by default. Users cannot disable the telemetry altogether, only reduce some of it.
- A lot of nonfree software has ads which most users would happily disable if they could. Even the Windows operating system has ads (disguised as "recommendations") in the start menu!
- If you pay for a program, it might use DRM to prevent you from installing it on multiple devices.
- Lock-in: Some software could easily be general-purpose, but you're only allowed to use it with a specific provider. (Consider, for example, an email client which only works with one company's email service. Other organizations provide email as well, and it pretty much all works the same.)
- Some programs are useful, but they include spyware and other malware. Users would like the benefits without the harm.
See this page for lots of other examples.
Let's say some program includes tracking code that can't be disabled. In theory, a programmer could modify the software to remove these trackers, right? What's to stop someone from just making a non-tracking version and using that instead?
There are two frameworks that prevent this. One is practical and one is legal.
Practical: Code
Basically, computers speak different languages than humans do. Programmers write source code in languages that are easier for humans to read, and this code needs to be translated into a binary form the computer can read.
But it's difficult to translate backwards. The human-readable language is more complex, and programmers add a lot of semantic meaning that's lost in translation. It's not necessary for the computer to understand why it's doing something; it just follows the directions it's given. Humans, on the other hand, do need to understand the intent so they can make changes. Therefore, modifying a program is a lot easier if you have the original source code.
(Not all code needs to be translated in this way. However, instructions that don't need to be translated are often still intentionally scrubbed of semantic meaning and obfuscated by the developer to prevent users from understanding how the program works. This is the case with a lot of JavaScript programs running on the web. Many of these programs track users across the web.)
Distributing software only in binary form (or in an obfuscated form) makes it a lot harder for users to study and modify the software to better suit their needs. If the user is not empowered to modify the program (or have someone else modify it for them), the developer holds that power over them. The user is at the mercy of the developer's will.
Legal: Licensing
The other framework is legal. This varies, of course, by jurisdiction, but generally software is provided to the user under a license. (Sometimes this is an end-user license agreement, or EULA - those things you have to agree to before you use the software.) This license gives you permission to use the software. It also outlines the rules restricting your use of the software.
Most software licenses are designed to take away the user's freedom so the developer can choose what they can and cannot do. They may say you're only allowed to use the program for certain uses. They may say you're not allowed to share copies of the program with your friends. They may forbid you from making changes to the program (such as removing tracking from an app). Even if the source code for a program is available to you, it may be illegal to modify it. (There are "source-available" software licenses that work this way.) Because of the way copyright law works, when people write code without specifying a license, that code is "all-rights reserved".
By contrast, free software licenses explicitly grant the user the legal right to use the program for any purpose, study and modify it, and share the program (with or without modifications) with others. Here's a list of a few of the most common free software licenses. Sometimes there are several versions of licenses that are very similar, so these are included in the same line. If you're going to publish free software, do some research first and figure out which license is right for you. But if you're not publishing software, you don't really need to worry about which license a piece of software uses, beyond that it's free.
- Apache License
- BSD Licenses (there are too many of these to list here)
- GNU Licenses: General Public License (GPL), Affero GPL, and Lesser GPL
- MIT/Expat/X11 License
For more information on these and other licenses, see the Free Software Foundation's Various Licenses and Comments about Them. (If you prefer, the Open Source Initiative has its own lists, grouped alphabetically or categorically.)
Conclusion
For software to be free (or open source), users must have both access to the source code and the legal right to exercise their freedoms to use, study, modify, and share it. This second condition is accomplished through free software licenses.