Why should I care about software?
Our daily lives are increasingly mediated by digital technologies. Everything that powers our society—our media, medical devices, voting machines, communication, and so much more—depends on devices running software to control them. The way that software functions is determined by its "source code", and whoever owns that in turn controls our technology and has immense influence over our lives. When that source code is owned by someone else and kept secret, there's no way to know what it's doing or how it works. When someone else controls your software, you give them ultimate control over your computing.
How can we trust our technology?
We've seen the incredible advancements and social movements enabled by digital technology, but we must be mindful of its effects. Software ultimately leaves users at the mercy of whoever owns it, but we don't have to give up freedom for progress. Software shouldn't work against its users for profit and control. You should own your software. You should be in control.
Using free software is the only way to guarantee that. By using free software, you gain autonomy over your own computing and are protected from the surveillance, monopolism, and other malicious features in non-free software.
What is free software?
- “Free software” means software that respects users' freedom and community. Roughly, it means that the users have the freedom to run, copy, distribute, study, change and improve the software. Thus, “free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech,” not as in “free beer.” We sometimes call it “libre software,” borrowing the French or Spanish word for “free” as in freedom, to show we do not mean the software is gratis.
- You may have paid money to get copies of a free program, or you may have obtained copies at no charge. But regardless of how you got your copies, you always have the freedom to copy and change the software, even to sell copies.
How it works?
Let’s say I’m a carpenter. While I’m working on the furniture for a dining room someone asked me to produce, I stumble across the need of inventing something that allows people in the room to sit down. So I come up with a chair. It’s a rather simple chair, with no armrests and nothing fancy, but it suits my need: allow people to sit down. Yay, problem solved. Now, I can keep my brilliant invention secret and be jealous about my precious, OR I can share it with the world of carpenters.
Why would you share it?
Because it could help someone solving the same problem I encountered. Because after, say, a few days, or months, or even years, my chair could come back to me with a good ol’ pair of armrests, that were made by another carpenter out there in the world. Someone who borrowed my chair, worked on it and shared its improvements back in turn. That can happen over and over, the more problems my chair solves, the more people will work to improve it, maybe giving it a more comfortable back or more functional legs. That way we can develop together the best chair possible for that particular situation. And because it feels so good to take part in something like that.
It is this part of community, but it is not the most important part of all of this. The key reason is that the program is not solely controlled by its owner. And here we come to a certain abstraction which in this breakneck analogy may raise objections: But why should the owner of the chair not have the right to dispose of his property?!. This is not the point. He can use it in any way he wants, the problem begins when the owner dictates how to use the chair he distributes, others. This is where the problem of the Free Software Foundation, founded by Richard Stallman, begins.
Who gives the instructions to your computer? You may think that he is following your instructions when he really obeys someone else first, and only as much as the program owner allows him to listen. In the case of software, there are two possibilities: Either the users control the program, or the program controls the users. It is inevitable one or the other. For users to be able to control a program, they need four fundamental freedoms:
- Freedom 0: The freedom to use the program for any purpose.
- Freedom 1: The freedom to study how the program works, and change it to make it do what you wish.
- Freedom 2: The freedom to redistribute and make copies so you can help your neighbor.
- Freedom 3: The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits.
Each program usually takes two forms. It is in a form that you can read and understand if you know the programming language. This is the source code. This is what the programmers write and change. Then there's the executable, which is a set of numbers that even a programmer can't figure out. If all you get is an executable then it's a terrible pain in the butt to find out what it does, and even harder to change it. So, to give you a real opportunity to learn and change, they have to give you the source code. This is a requirement.
Now you may be asking yourself the question "if it is possible to find out what a program does even without the source code, it's probably okay?" To imagine why this is problematic, let's create a simple example: You go to a restaurant and order soup. For example, let's say vegetable soup. Well, ordering yourself such a vegetable soup, for example, you would like to cook such soup at home. This is where the problems begin. Most of the software we use can be closed software, i.e. one in which we cannot see the source code, i.e. we cannot see the recipe for our soup. We just get ready-made soup and we don't really know what's in it. Of course, if we would like to cook a soup such as Adobe Photoshop, then looking at this soup we see "mhm, well, there are such elements here, such elements" and we can try repeat this soup, but we do not know how much someone for example, he gave salt, we don't know how much pepper someone gave, we don't know how long this soup was cooked. And free software works more in such a way that as soon as you order a soup, you get the recipe for this soup and ready-made ingredients, and you can cook it yourself.
With these two freedoms, each user individually can make a copy and start changing it and making it do what they want. This is individual control. But what if you are not a developer? You are looking at the source code and you don't understand it. Individual control is not enough. We also need collective control, which means that each group of users can work together to tailor the program to what they want. Of course, some of them in the group are programmers. They actually write the changes, but they do it as part of the group for what the group wants. Of course, the group doesn't have to be everything. Others may use it in other ways. Everyone can do it. Thus, collective control requires two more essential freedoms.
If you have all 4 freedoms then it is free software, the users control the program. But if either of these freedoms is missing, then the users don't control the program. Instead, the program controls the users and the developer controls the program. So it means that this program is an instrument of unfair power of the developer over the users. This means that users have no freedom, that is, non-free proprietary software that we must get rid of.
what does that actually mean...
- a computer is a universal machine that can be programmed to automatically perform a sequence of arithmetic or logic operations. Modern computers can perform general sets of operations known as programs. These programs enable computers to perform a wide range of tasks.
- Source code - You already know what a program is, you already know what a programming language is, and now I will tell you about a concept that naturally arises from the previous two, i.e. what a code is source. Simply put, it's just the content of all the instructions that we type in to make the program work. And such source code is usually written in a specific programming language in which it is understandable by a human. In other words, it is the set of program instructions, the content of all those instructions, what a programmer needs to type in order for our program to run. Basically, most programming languages are plain text.
- computer program and related term software - a program is a set of certain instructions. Each program consists of such instructions, you could surely give examples of various programs, be it a graphics program, an office suite, a web browser or an operating system, all these programs are a certain set of instructions, and their whole principle of operation is based on this. Some programs may have 10 or 100 of these instructions, and others 100,000 or even a million different instructions, the program will always be a set of certain instructions. And this is what the programming process is all about, it's just about breaking any idea for a program, breaking some idea into simple instructions that the computer can understand, and this is the essence of the programming process. You have an idea for a program and you just need to convert it into simple, computer-readable instructions.
- Programming language - instructions (programs) for a computer are most often written using a programming language, so you cannot write these instructions in any way, for example in Polish, English or a normal human language, it must be written in such a way that the computer understands it. So you need some programming language to write this whole set of instructions.
- Executable file or machine code - This is the language understood by the computer's processor. The processor is in every computer, be it a desktop computer or a smartphone, it all works thanks to the fact that it has a processor and all this machine code, it is the language in which our equipment works, the language in which our processor works. First of all, it is a language intended for the machine, unreadable for a human, i.e. the processor is able to read and understand this machine code, but we will rather have problems with that, it will be rather unreadable for us. And above all, the very commands that we write in plain programming language are converted into machine code that the computer can understand. Because the computer only understands this machine code, it does not understand directly all the instructions that we write in any programming language, they just have to be converted from this normal programming language to the output machine code first, so that the processor can understand all these instructions, commands, understand .