Difference between revisions of "Free software"

From LibrePlanet
Jump to: navigation, search
(What is free software?: change on freedom respecting because it may sounds weird)
(What is free software?)
Line 10: Line 10:
  
 
= What is free software?  =
 
= What is free software?  =
The aim of this article is to explain it completely, that is, after reading this chapter, not only that you understand this yourself, but you would be able to explain it to others comfortably later. I know this is an ambitious assumption, but we will try to do it.
+
: “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.
  
Definition:
+
===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.
  
'''Free Software''' (''freedom respecting software'', or also ''libre software'') is computer software distributed under terms that allow users to run the software for any purpose as well as to study source code, change, distribute it and improve any adapted versions.
+
Why would you share it?
  
of course, at first we know nothing with the definition, but soon everything will become clear. At first, you can get lost in the flow of these words, but you must have noticed the word '''free'''. You may already be confused at this stage - but how is it free? and why does it have several names?
+
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.
  
'''Free''' is a matter of liberty, not price; we're concerned with your freedom. all users are legally free to do what they want with their copies of a free software (including profiting from them) regardless of how much is paid to obtain the program, and we sometimes say spanish borrowed word "libre" to show that. I will use this word later in this article to avoid confusing/ambiguity and semantic chaos.
+
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.
  
'''computer''' is a universal machine that can be programmed to carry out sequences of arithmetic or logical operations automatically. Modern computers can perform generic sets of operations known as programs. These programs enable computers to perform a wide range of tasks.
+
Who gives the instructions to your computer<ref>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.</ref>? 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:
  
'''software'''  is a collection of instructions that tell a computer how to work. By writing the right program, you can make it do almost anything.
+
* 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.
  
'''Users''' are the entry point.
+
The first and third freedoms can only be fulfilled when the source code<ref>** 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.</ref> of the software<ref>** 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.</ref> is available
  
:With software, there are two possibilities: users control the program or program controls the users. It's inevitably one or the other. In order for the users to control the program, they need 4 essential freedoms.
+
Each program usually takes two forms. It is in a form that you can read and understand if you know the programming language<ref>** 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.</ref>. 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<ref>** 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 .</ref> 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.
  
* Freedom 0: The freedom to '''run''' the program ''''for any purpose.'''
+
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.
* Freedom 1: The freedom to '''study''' how the program works, and change it to make it do what you wish.
 
  
But what is '''source code'''? In computing, source code is any collection of code, with or without comments, written using a human-readable programming language, usually as plain text. The source code of a program is specially designed to facilitate the work of computer programmers, who specify the actions to be performed by a computer mostly by writing source code. The source code is often transformed by an assembler or compiler into binary machine code that can be executed by the computer. The machine code might then be stored for execution at a later time. Alternatively, source code may be interpreted and thus immediately executed.
+
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.
  
Most application software is distributed in a form that includes only executable files. If the source code were included it would be useful to a user, programmer or a system administrator, any of whom might wish to study or modify the program.
+
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.
 
 
:If you all get is the executable, it's a horrible pain in the neck to the figure out what it does, and even harder to change it, so to give you the real possibility to study and change it, they've got the give you to source code, that's the requirement. it's the individual control.
 
 
 
:But what if are not a programmer? You look at the source code, and you don't understand it.  Individual control isn't enough.  We also need collective control, which means any group of users are lbre to work together to adapt the program to what they want.  Of course, in the group, some of them are programmers.  They're the ones who actually write the changes, but they're doing it as part of the group for what the group wants.  Of course, the group doesn't have to be everybody.  Others can use it some other way.  They're all libre to do that.  Collective control requires two more essential freedoms.
 
 
 
* Freedom 2: The freedom to re'''distribute''' and make copies so you can help your neighbour.
 
* 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
 
 
 
:Basically freedom three is similar, but it's for your modified versions.  You're libre to make copies, and then give them or sell them when you wish.  If you do have these freedoms, then it's libre software, the users control the program. But if any of those freedoms is missing, then the users don't control the program. Instead, the program controls the users and the developer controls the program. So, that means this program is an instrument of unjust power for its developer over the users. That means the users don't have freedom, that's non-libre, proprietary software which we've got to get rid of.
 
 
 
All inserts that start with a colon, are quotes from Richard Stallman's TED 2014 talk under CC-BY-ND license, borrowed under the right to quote.
 
 
 
==How do people make money?==
 
:main article: [https://en.wikipedia.org/wiki/Business_models_for_open-source_software Business models for open-source software]
 
 
 
*Not Selling Code
 
**Professional services - selling "support"
 
**Branded merchandise - selling knick-nacks
 
**Software as a service - selling infrastructure
 
**Voluntary donations - not selling anything, much less code
 
**Crowdsourcing - not selling anything, much less code
 
*Selling Users, Not Code
 
** Partnership with funding organizations - i.e. getting funded by Google (Not Evil ?)
 
** Advertising-supported software - i.e. getting funded by advertisers
 
***Option A: Pre-selling Code
 
****Pros - if a unique set of users will benefit
 
****Cons - vaporware, freeloading users
 
*Bounty driven development
 
**Pre-order/crowdfunding/reverse-bounty model
 
***Option B: Playing copyright, IP, and lawfare games
 
****Pros - you have more lawyers than engineers i.e. Oracle
 
****Cons - you don't
 
** Dual-licensing or Open Core
 
** Selling of certificates and trademark use
 
** Re-licensing under a proprietary license
 
  
 
[[Category:Philosophy]]
 
[[Category:Philosophy]]
 
[[Category:Free Software]]
 
[[Category:Free Software]]

Revision as of 08:40, 10 May 2022

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[1]? 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.

The first and third freedoms can only be fulfilled when the source code[2] of the software[3] is available

Each program usually takes two forms. It is in a form that you can read and understand if you know the programming language[4]. 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[5] 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.

  1. 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.
  2. ** 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.
  3. ** 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.
  4. ** 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.
  5. ** 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 .