On 12/31/2012 12:29 PM, Joshua Gay wrote:
My guess is that system interface definition files were mentioned
explicitly because it was a real problem and a good way of reminding
people to be conscientious about portability (without using the term
'portable'). People were developing GNU on top of all sorts of different
UNIX systems, POSIX was still in flux and controversial[1][2]. So, we
probably couldn't use a definition of "Standard Interface" like we have
in GPLv3 to cover this stuff -- after all, what was a "standard" and
really, what does "widely adopted" mean in 1991?
Thanks.
Suppose the following: (Josh or anyone else <cough>BKUHN</cough> is
invited to answer)
It's January 1991 and I am distributing a binary of some
GPLv1-licensed GNU program that I built for some particular machine,
and I attempt to provide "complete" source code for that binary in
compliance with GPLv1. GPLv1 says:
"Source code for a work means the preferred form of the work for
making modifications to it. For an executable file, complete source
code means all the source code for all modules it contains; but, as a
special exception, it need not include source code for modules which
are standard libraries that accompany the operating system on which
the executable file runs, or for standard header files or definitions
files that accompany that operating system."
RMS tells me that my source code is incomplete because I failed to
provide one or more "interface definition files". I say to RMS that I
provided everything that that paragraph seems to call for. RMS
reluctantly decides not to disagree, perhaps suggesting that I have
exploited an ambiguity in GPLv1, and proceeds to revise the GPL so
that the corresponding paragraph reads:
"The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, **plus any
associated interface definition files**, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable." [Emphasis added.]
Let's leave aside the system library exception and let's also assume
that I wasn't the reason why RMS added the clarification about
"scripts used to control compilation and installation of the
executable". I was the reason why RMS decided to add "plus any
associated interface definition files".
My question: What exactly did I fail to provide in my January 1991
distribution that led RMS to spell out that "complete source code"
includes interface definition files? What would such an interface
definition file look like? That's all I want to know. I apologize if
this question sounds clueless on my part.
Also, am I right that the "interface definition file" that Ted Ts'o
explained is entirely different from the "interface definition file"
that you (Josh) have in mind? BTW, you (Josh) speak of "system
interface definition files", but weren't those explicitly excluded
from the definition of complete source code in GPLv1? (Otherwise, what
you mean by a "system interface definition file" must be different
from what GPLv1 means by "standard header files or definitions files
that accompany that operating system" in the GPLv1 version of the
system library exception.)
- RF