Friday, May 14, 2004

More on Open Source; A Little History

A LITTLE HISTORY: THE FIRST TEST OF GNU GPL

There was hope that the enforceability of GNU GPL would be fully tested by MySQL v. Progress Software (United States District Court; District of Massachusetts (Boston); CIVIL DOCKET FOR CASE #: 1:01-cv-11031-PBS). The court did find “the GNU GPL to be an enforceable and binding license” but did not grant MySQL a preliminary injunction on its copyright claim. [The parties ultimately settled their suit out of court].

Open Source Licenses. There are three major license regimes at work in the open source movement: Apache and the BSD; GNU General Public License (GPL) and the GNU Lesser General Public License (LGPL). The full GPL license terms can be found at http://www.gnu.org/licenses/licenses.html#GPL. Click here for info on other regimes.

GPL. The GPL, at work in the SCO v. IBM case requires

(i) NO restrictions on execution (use);

(ii) The FREE redistribution of the source code of any product that falls within its terms;

(iii) no fee (although you can charge for selling a CD with the code on it);

(iv) Licensor of source code must give license to any related patents, and a disclaimer of warranty and limitation of liabilities is required; and

(v) Attribution that the code is subject to the GNU GPL.


GPL vs. LGPL. The GPL does not permit incorporating your program into proprietary programs. If your code is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of using the GPL.


LGPL applies to certain specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. As stated in the preamble to the LGPL, for example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.

Linking to libraries.
When a program is linked with a library, whether statically or using a shared library, the combination of the two, is legally speaking, a combined work, a derivative of the original library. The ordinary GPL therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.


KEY TAKE AWAYS OF GPL
(1) Is your code a "Program" under GPL?

If it is a Program, and you release your Program to the public (ala software license or software product), you must release the source code of your Program. That means you must release the source code and although you can sell the code for a price, your business model has sifted significantly from Microsoft-type (low marginal cost/no competitors) to Novell’s Linux (low cost/low revenues/many competitors).


Your code is a Program and subject to the GPL if:
(1) It is a copy of GPL code; OR
(2) A"work based on the Program," meaning either the Program or any derivative work under copyright law: that is to say, it is a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.


You MUST release your modified GPL code under the GNU GPL terms ONLY if you release it to the public.

So, if you keep your modified code to your self, you can use it privately. For example, many companies offer services that run off a modified version. Running the service and not releasing the code as a product allows the service company to maintain certain rights in their modifications.


(1) Two Separate programs (little p program) = GPL not required for your code.


Mere aggregation vs. combining two modules in one program.


Mere aggregation ok. If you merely put your code side by side on the same CD-ROM or hard disk with GPL code you have copied, your code is not then subject to the GPL (and you do not have to provide the source code for release). If the two sets of code are separate programs and not parts of a single program, the mere aggregation has no effect on the other program.


Pipes, pipes, sockets and command-line arguments. If used for communication between two separate programs the mere aggregation (placing your code next to GPL code) does not make your code GPL. BUT, if the semantics of the communication show an exchange of complex internal data structures, one could argue the two parts are combined into a larger program (meaning that the whole thing is GPL).


(2) Two Programs in ONE = GPL required:
one bad apple spoils a whole bunch of code.

Combing two modules maybe not be ok. If your code is connected together with some GPL covered code so that they form a single larger program, then the whole combination must also be released under the GPL. And, to use their words, if you can't, or won't, do that, you may not combine them.

Combing two parts depends on the mechanism of communication (exec, pipes, rpc, function calls within a shared address space, etc.) and the semantics of the communication (what kinds of information are interchanged).

For example,
Same executable = definitely combined in one program.


Modules designed to run linked = almost surely means combining them into one program (e.g., bad).

No comments: