Subject: Re: Dynamic and Static Linking
From: Ian Lance Taylor <ian@airs.com>
Date: 2 Apr 2000 14:27:55 -0700

   From: W.Yip <weng@yours.com>
   Date: Sun, 02 Apr 2000 22:11:15 +0100

   1) What is dynamic linking? Is it the 'ln' command in Linux for symbolic
   linking?

It has nothing to do with the `ln' command.

Linking in this sense is the process of combining object files and
libraries into an executable.  It is done by the `ld' command, which
is typically invoked by the compiler `cc' (or `gcc') when building a
program.  See the relevant man pages.

Dynamic linking is the use of shared libraries, also called dynamic
objects.  On a typical Unix system, shared libraries have extensions
of .so, possibly followed by a version number.  They can often be
found in /lib or /usr/lib.  Windows also uses shared libraries; they
are called DLLs (Dynamic Link Libraries).

A single shared library can be used (in fact, shared) among many
different programs.  A shared library can be changed without relinking
the program; the program will automatically use the newer version.

   2) What is static linking? Is that a link to libraries on your hard disk?

Static linking is linking a program without using a shared library.

   3) Can you give me some examples of dynamic linking (un)covered by the GPL?
   Is BeOS a case in example?

The GPL was written before widespread use of shared libraries.  Thus,
it is not clear whether dynamic linking is covered by the GPL or not.

In a modern Unix or Windows system, the basic system libraries are
shared libraries.  Since these can be reasonably considered a part of
the operating system, it is likely that the system exception of the
GPL applies to them (paragraph 3).

The interesting cases come when somebody modifies a GPL program to use
a nonstandard shared library.  Are they required to distribute the
sources to that shared library, or is it acceptable to merely supply a
binary form of that shared library?

Shared libraries are merely one point in a continuum of GPL
considerations, which also includes using CORBA or some similar
protocol to make remote procedure calls to other code which may only
be available in binary form, or, indeed, may be run on a controlled
machine accessible over the Internet and not otherwise be available in
any form at all.


My take on these sorts of GPL issues is that there is no answer.
Because we are talking about an continuum with infinite gradations,
there is no clear way to draw the line anywhere.  Because we are
talking about a matter of law, not science or technology, the only way
to draw a line is to make an arbitrary decision.

Speaking about the U.S., I believe the legislature is unlikely to make
any such decision unless they are pushed to by large companies or
powerful special interest groups; however, I don't know of any large
companies or special interest groups who really care about GPL arcana.
Therefore, if any decision is made, it will come from the court
system, but court cases take a notoriously long time to complete and
can easily wind up being vague and difficult to apply outside of very
specific circumstances.  Moreover, by the time they decide on one
aspect of this issue, it is likely to be obsolete and irrelevant.

So, just do what you think is right, and don't worry about it.  If you
are trying to hack the GPL to make a proprietary fork of somebody
else's work, then you are behaving wrongly.  Don't do it.

Ian