In the 1960s and 70s, software was considered to be a part of knowledge. Hardware was something tangible. Software was the ingenious means to use the hardware to solve problems. People would collaborate on how best to develop software to solve problems. Also, they would take someone's work and add to it. Since there were no restrictions on using someone else's work, one could improve, add more functionality and make software more suitable to ones needs.
In the late 70s and early 80s, software development emerged as a commercial activity. Organizations came up with the sole objective of creating software for commercial sale. However these organizations would only give the binary executable code which one could run in the manner enviaged by the software designer. One had to run the software on the hardware platform for which software had been developed by the seller. Since the source code was not available, there was no possibility of understanding the programs and modifying them. In other words, there was no freedom to tailor the commercial software to one's needs. Also, the growth of software development discipline was in jeopardy.
Richard Stallman was the first to realize the inadequacy of proprietary software. Stallman felt that any user of a software must have the following freedoms,
Free software means freedom regarding the software. It does not mean a zero price. Or, as Stallman has emphasized, free as in free speech and not free beer. A lot of software is distributed online on the Internet without any price. Some organizations charge a marginal price to cover production and distribution costs. But this is not the requirement. An organization selling free software may charge the price it deems fit as per its per its costs, policies and market forces. It only has to ensure that four freedoms mentioned above are available to the buyers.
Why free software? Because there is no other way. These freedoms are fundamental to software development and usage. If one owns a software, one should be able to use it for any purpose as permitted by the laws of the land. Any artificial restriction placed by the manufactureri, restricting the usage. like a maximum limit on number of users, usage only upto a certain date, usage with only the given hadware lock, etc was undesirable. When we use or develop software, there needs to be a free flow of ideas, there should be freedom implement the ideas that come to the mind. As software is a direct application of knowledge and thought, it is necessary to collaborate and share with others. When two individuals share knowledge, the knowledge of each improves. It is a rare situation where sharing increases your personal stock. Finally, one should be free to improve a program. When we use a program, we become aware of its strengths and weaknesses. Since we use a program repeatedly, we get a "feel" of weaknesses or problems. Armed with necessary technical knowledge and the motivation for improving the program, since it is for our own use, a user is in the best position to improve the program. In fact some of the best software has come from the users. Look at Unix. Since Thompson, Ritchie and their colleagues were the users of the new operating system, a masterpiece was created.
In 1983, Richard Stallman announced the GNU operating system project, for creation of a Unix-like operating system, comprising entirely of free software. In 1985, Stallman started the Free Sofwtare Foundation, a pioneering organization to promote free software. In order to safeguard software freedom, Stallman invented the concept of copyleft. Any software released with copyleft gave users full freedom to use, copy, modify and improve the programs. However, as per the terms of copyleft, the modified software could only be sold as free software. Thus it became illegal for anyone to take a free software, change it and sell it as properietary software. Thus ensured that free software remained free so that the entire community could benefit. It can be said that while copyright took away the right to copy, copyleft restored it.
The free software movement found acceptance and following in all parts of the world. In the 1980s a lot of free software was developed, like compilers, debuggers, editors, shell, etc. However, kernel was still required. Minix was a Unix-like kernel developed by Andrew Tanenbaum in 1987 which was released with source code. Since MINIX was released under Copyright, it was possible to study and understand it, but it was not possible to modify and redistribute it. In September 1991, Linus Torvalds filled the gap and released Linux kernel, which could be used along with GNU software. With this, the complete kernel and utilities were available as free software and became popular as GNU/Linux. The GNU/Linux have gone from strength to strength and the latest GNU/Linux version works on hardware ranging from from desktops, supercomputers, video game players, mobile phones and routers.
As the word "free" in free software was being mistaken for zero price, there were suggestions for alternative names. The most notable alternate name has been "open source". The difference between free software and open source is too fine and for most practical purposes, we can treat them as synonyms. However the combined term, Free/Libre and Open Source Software (FLOSS) has become popular and is being widely used.
GNU GPL is the basic copyleft license. It works like this. The developer asserts copyright on the product. Then he or she offers a license to copy, distribute and modify the product to others. The license is offered with the requirement that if the software is modified, the modified source code must be made available to the users. This is to ensure that the derived product does not become properietary software. Also, the modiifed version must be marked as changed so that the original authors are not held responsible for errors introduced in modification. The modified version has to be released under GNU GPL. Since the authors have asserted the copyright on the product, they are able to stipulate about how the product can be copied and modified.
GNU GPL offers protection to developers by stating that there were no warranties offered for the product. This is just about the same as offered by properietary software; almost all software sold does not offer any warrenty. It is another thing that software under GNU GPL offer a lot of support in terms of documentation available online and also the support offered in various forums.
There is often a fear expressed that if an application were developed under GNU/Linux, it would have to be release under GNU GPL as well. That is not true. The license uses the term aggregate to a system made of GNU GPL covered software and other software. The requirement is that the "other" software must not be an extension of GNU GPL software and the two must not form a single program but may be put together on a single storage medium. So in case of an application developed on top of GNU Linux, the two are separate in the sense that the address spaces are separate at runtime. The license applies only to the GPL covered software, GNU/Linux, and not to the "other" software of the aggregate, the application.
When a program is linked to a library, the two make a single address space at runtime and are thus the combination is a combined work, a derivative of the library. Thus if a library is releasd under GPL, it could not be used by an independent non-GPL program. To cater to this, libraries are often released under GNU Lesser General Purpose License (LGPL). For example the C language library, released under LGPL, can be used by a non-free program. In effect, LGPL is the same as GPL, except for the provision that it can be combined with a non-free work.
Much of the free software available is of high quality. This is because, free software is generally, lean and mean and efficient. Free software is more focussed on functionality rather than fancy user interfaces and a smaller program size helps in faster execution and better software quality. Also there is great teamwork and motivation among programmers developing free software. The practice of peer review of software developed is also vigorously followed. Free software developers give a maximum importance to programming and testing of software and follow newer software process models like agile process model and extreme programming methods.
Free software is highly secure. Because of high quality, there are fewer bugs. Also, free software is heavily reviewed. As the source code is available, one can build the executable and be sure of the source files used for making the executable. Since these source files are used and reviewed by many all over the world, the possibility of malacious code and trojan horses is eliminated. This is the reason why Linux is so heavily used in servers on the Internet and viruses on Linux are not heard of. Also, since the architecture of free software programs is well documented and source code is available and also, since the interfaces are transparent, it is easy to see the flow of data and trace program execution. All this has led to robust and secure software.