As we all know the word Free has two meanings in the English language. Free of cost and Free from Freedom. So we get the expression "free as in Beer" and "Free as in Freedom" - or Free with a lower or upper F. Having disambiguity in a computer program is bad. So let's translate that problem to computer languages, and I'm going to deliberately pick the C language. So for example were the word "exit" (which is a function), and you wanted to use it as a variable.
set exit = 1;
This leads to problems as the computer can't tell if the references to "exit" the function or is it the "variable".
For that reason the "The GNU C Library Reference Manual" makes it clear that this is not allowed
1.3.3 Reserved Names
The names of all library types, macros, variables and functions that come from the ISO C standard are reserved unconditionally; your program may not redefine these names. All other library names are reserved if your program explicitly includes the header file that defines or declares them. There are several reasons for these restrictions:
Other people reading your code could get very confused if you were using a function named "exit" to do something completely different from what the standard "exit" function does, for example. Preventing this situation helps to make your programs easier to understand and contributes to modularity and maintainability.
It avoids the possibility of a user accidentally redefining a library function that is called by other library functions. If redefinition were allowed, those other functions would not work properly.
This was written by "Sandra Loosemore with Richard M. Stallman, Roland McGrath, Andrew Oram, and Ulrich Drepper for version 2.18".
In terms of the English Language, this results in:
- segfaults where people just get confused.
- Buffer overflows, where there is too much information to take in.
- time outs where the amount of time available to explain has been exceeded.
Now you can get around the problem by prefixing the variable name with a name space, which is very common in XML.
set my:exit = 1;
However that's cumbersome and causes extra cycles to be expended, or abnormal termination of the program. Not many cycles but a few and it adds up over time. The more you use it the more wastage occurs. When you have two Bob's working in a company. You always need to specify if it's "Bob in Accounting" or "Bob in Sales".
It is often pointed out that this is not an issue in other languages, for example Dutch has "Vrij" for freedom and "Gratis" for without cost. However the FSF is a US organisation, in a English speaking area. So we should focus on the fact that the English compiler should have rejected at use of "Free" when it was first proposed because it was obviously disambiguous.
The GNU project was started in 1983 and looking at the software available around then I find it very hard to believe that the concept of "software you pay for" was not widely known. https://en.wikipedia.org/wiki/History_of_software
- WordStar, "By early 1980, MicroPro claimed in advertisements that 5,000 people had purchased WordStar in eight months"
- WordPerfect, "The program was originally developed under contract at Brigham Young University for use on a Data General minicomputer in 1979."
- VisiCalc, "It sold over 700,000 copies in six years"
- Lotus 1-2-3, "Lotus 1-2-3 was released on 26 January 1983, and immediately overtook Visicalc in sales."
Looking at the archives of the Byte Magazine there are numerous examples where software "Free/free" and proprietary closed software was for sale as far back as 1979. Even the term freeware was coined in 1982 by Andrew Fluegelman.
So it would seem that the word "Free Software" was a bug from the start. Not that there is probably anything we can do about it now but if this bugs you then go over to the FSF and donate. If it doesn't bug you then donate. If you could care less, or indeed if you couldn't care less then also donate.