First, the GPL comes from the philosophy of Richard Stallman and the GNU Project. The general history of GNU is covered here. In this page we will be focusing on the specific events in the creation of the GPL.
In the early years (1984 to 1988), the GNU Project did not have a single license to cover all its software. What led Stallman to the creation of this copyleft license was his experience with James Gosling, creator of NeWs and the Java programming language, and UniPress, over Emacs. While Stallman created the first Emacs in 1975, Gosling wrote the first C-based Emacs (Gosling Emacs) running on Unix in 1982. Gosling initally allowed free distribution of the Gosling Emacs source code, which Stallman used in early 1985 in the first version (15.34) of GNU Emacs. Gosling later sold rights to Gosling Emacs to UniPress, and Gosling Emacs became UniPress Emacs. UniPress threatened Stallman to stop distributing the Gosling source code, and Stallman was forced to comply. He later replace these parts with his own code. (Emacs version 16.56). (See the Emacs Timeline) To prevent free code from being proprietarized in this manner in the future, Stallman invented the GPL. Detailed description of this event can be found in Stallman's 1986 speech at the Royal Institute of Technology, Sweden:
"While I was thinking about what to do about these problems and wondering whether I should try to fix them or write entirely new compiler, in a roundabout fashion I began working on GNU Emacs. GNU Emacs is the main distributed portion of the GNU system. It's an extensible text editor a lot like the original emacs which I developed ten years ago, except that this one uses actual LISP as its extension language. The editor itself is implemented in C, as is the LISP interpreter, so the LISP interpreter is completely portable, and you don't need a LISP system external to the editor. The editor contains its own LISP system, and all of the editing commands are written in LISP so that they can provide you with examples to look at for how to write your own editing commands, and things to start with, so you can change them into the editing commands that you really want.
In the summer of that year, about two years ago now, a friend of mine told me that because of his work in early development of Gosling Emacs, he had permission from Gosling in a message he had been sent to distribute his version of that. Gosling originally had set up his Emacs and distributed it free and gotten many people to help develop it, under the expectation based on Gosling's own words in his own manual that he was going to follow the same spirit that I started with the original Emacs. Then he stabbed everyone in the back by putting copyrights on it, making people promise not to redistribute it and then selling it to a software-house. My later dealings with him personally showed that he was every bit as cowardly and despicable as you would expect from that history.
But in any case, my friend gave me this program, and my intention was to change the editing commands at the top level to make them compatible with the original Emacs that I was used to. And to make them handle all the combinations of numerical arguments and so on that one might expect that they would handle and have all the features that I wanted. But after a little bit of this, I discovered that the extension language of that editor, which is called MOCKLISP, was not sufficient for the task. I found that that I had to replace it immediately in order to do what I was planning to do. Before I had had the idea of someday perhaps replacing MOCKLISP with real LISP, but what I found out was that it had do be done first. Now, the reason that MOCKLISP is called MOCK, is that it has no kind of structure datatype: it does not have LISP lists; it does not have any kind of array. It also does not have LISP symbols, which are objects with names: for any particular name, there is only one object, so that you can type in the name and you always get the same object back. And this tremendously hampers the writing of many kinds of programs, you have to do things by complicated string-manipulation that don't really go that way.
So I wrote a LISP interpreter and put it in in place of MOCKLISP and in the process I found that I had to rewrite many of the editor's internal data structures because I wanted them to be LISP objects. I wanted the interface between the LISP and the editor to be clean, which means that objects such as editor buffers, sub-processes, windows and buffer-positions, all have to be LISP objects, so that the editor primitives that work on them are actually callable as LISP functions with LISP data. This meant that I had to redesign the data formats of all those objects and rewrite all the functions that worked on them, and the result was that after about six months I had rewritten just about everything in the editor.
In addition, because it is so hard to write things in MOCKLISP, all the things that had been written in MOCKLISP were very unclean and by rewriting them to take advantage of the power of real LISP, I could make them much more powerful and much simpler and much faster. So I did that, and the result was that when I started distributing this program only a small fraction remained from what I had received.
At this point, the company that Gosling thinks he sold the program to challenged my friend's right to distribute it, and the message was on backup tapes, so he couldn't find it. And Gosling denied having given him permission. And then a strange thing happened. He was negotiating with this company, and it seemed that the company mainly was concerned with not having anything distributed that resembled what they were distributing. See, he was still distributing, and the company where he worked, which is Megatest, was still distributing the same thing he had given me, which really was an old version of Gosling Emacs with his changes, and so he was going to make an agreement with them where he would stop distributing that, and would switch to using GNU Emacs, and they would then acknowledge that he really had the permission after all, and then supposedly everyone would be happy. And this company was talking to me about wanting to distribute GNU Emacs, free of course, but also sell various sorts of supporting assistance, and they wanted to hire me to help do the work. So it's sort of strange that they then changed their mind and refused to sign that agreement, and put up a message on the network saying that I wasn't allowed to distribute the program. They didn't actually say that they would do anything, they just said that it wasn't clear whether they might ever someday do something. And this was enough to scare people so that no one would use it any more, which is a sad thing.
(Sometimes I think that perhaps one of the best things I could do with my life is: find a gigantic pile of proprietary software that was a trade secret, and start handing out copies on a street corner so it wouldn't be a trade secret any more, and perhaps that would be a much more efficient way for me to give people new free software than actually writing it myself; but everyone is too cowardly to even take it.)
So I was forced to rewrite all the rest that remained, and I did that, it took me about a week and a half. So they won a tremendous victory. And I certainly wouldn't ever cooperate with them in any fashion after that. "
The first version of the copyleft license for Emacs seemed to be called
the Emacs General Public License. Other
similar licenses, with references to particular packages, also existed,
such as the Nethack General Public License.
The name GNU General Public License first appeared in the June 1988 issue of the GNU Bulletin:
"The copyleft used by the GNU project is made from a combination of a copyright notice and the GNU General Public License. The copyright notice is the usual kind. The General Public License is a copying license which basically says that you have the freedoms we want you to have and that you can't take these freedoms away from anyone else. (The actual document consists of several pages of rather complicated legalbol that our lawyer said we needed.) A copy of the complete license is included in all GNU source code distributions and many manuals, and we will send you a printed copy on request. "
The January 1989 issue of the GNU Bulletin described the changes to make the GPL appliable to any applications, without references to specific package names:
"The General Public License as a Subroutine
We are about to make a sweeping, revolutionary change in the General Public License. The terms for copying will be essentially unchanged, but the architecture of the legalbol framework used to embody them will make a quantum leap.
In the past, each copylefted program had to have its own copy of the General Public License contained in it. Often it was necessary to modify the license to mention the name of the program it applied to. Other people who wanted to copyleft programs had to modify the text even more, to replace our name with theirs.
To make it easier to copyleft programs, we have been improving on the legalbol architecture of the General Public License to produce a new version that serves as a general-purpose subroutine: it can apply to any program without modification, no matter who is publishing it. All that's needed is a brief notice in the program itself, to say that the General Public License applies. Directions on doing this accompany the General Public License, so you can easily copyleft your programs.
We've also taken the opportunity to make it explicit that any subsequent changes in future versions the General Public License cannot take away the rights you were previously given, if you have a program that you received under an earlier version.
The new version will appear soon; new GNU programs and new versions of existing GNU software will refer to it to specify their copying conditions. "
The result was the GNU General Public License, version 1.
The GPL may be too strict for libraries. The June 1990 issue of the GNU Bulletin mentioned possible new license terms for GNU libraries. The January 1991 issue also described the upcoming library license and the GPL version 2, which was claficiations of version 1:
"New library license We should by now have finished a new alternative General Public License for certain GNU libraries. This license permits linking the libraries into proprietary executables under certain conditions. The new library license actually represents a strategic retreat. We would prefer to insist as much as possible that programs based on GNU software must themselves be free. However, in the case of libraries, we found that insisting they be used only in free software tended to discourage use of the libraries, rather than encourage free applications. So, while we hope the new library license will help promote the development of free libraries, we have to regret that it was necessary. We will also be releasing a version 2 of the ordinary GPL. There are no real changes in its policies, but we hope to clarify points that have led to misunderstanding and sometimes unnecessary worry. "
The GNU General Public License, version 2, and the GNU Library General Public License, version 2, were released in June 1991. GPL version 2 is the current version. The Library General Public License (LGPL) was renamed in a minor update to the GNU Lesser General Public License, version 2.1 in early 1999.
The GPL has become a powerful force in the information age. A hack on the copyright system, it turns the concept of copyright upside down, creates a whole community cooperating around the world and enables the development of software by the people, of the people and for the people. Many new licenses were modeled after or influcenced by the GPL. The recent attacks on the GPL by Bill Gates and Microsoft demonstrate how far the GPL's influcences have come, but we may not have seen the full impact of the GPL yet.
(A good question for Microsoft: how come it takes ten years for Microsoft to sound the "alarm" on the GPL?)
page created by Li-Cheng (Andy) Tai, [email protected],
July 4, 2001