[copyleft-next] Fwd: Re: Modify Corresponding Source definition, mainly to delete 'install and run'. (14249c2)

Theodore Ts'o tytso at mit.edu
Sun Dec 30 19:03:39 UTC 2012


On Sun, Dec 30, 2012 at 12:53:58PM -0500, Richard Fontana wrote:
> The reference to "interface definition files" was IIRC introduced in
> GPLv2's definition of complete corresponding source code. It was
> retained in GPLv3's definition of "Corresponding Source", and also in
> copyleft-next (with the addition of the adjective 'relevant' which I
> suppose reflected the germ of some questioning of this by me).
> 
> I do not know what the GitHub commenter means by "the API", but in a
> way that itself is an interesting point. I have always assumed that
> the "interface definition files" referred to in GPLv2 are .h files of
> programs written in C (or C++).

I can't speak to what was intended by the GPLv2/v3, but I can speak to
what are commonly referred to as "interface definition files".  The
usage comes from RPC libraries, such as SunRPC --- for which a
reference implementation was released to comp.sources.unix in 1988.
Other examples of RPC systems would include the Apollo RPC, which was
later incorporated into the OSF DCE system, and referred to as the DCE
RPC system.

Anyway, such systems would have an Interface Definition Langauage (aka
IDL) which might look like this:

struct intpair {
        int a;
        int b;
};

program ADD_PROG {
        version ADD_VERS {
                int ADD(intpair) = 1;
        } = 1;
} = 0x23451111;

This defines an remote procedure call which takes two integers and
returns a single integer.  When run through the Sun RPC IDL compiler,
this generates a header files and source files for the client stub
function which calls the RPC, and the server-side program which would
provide the "Add number" RPC service.  (Example taken from[1].)

Modern systems still certainly use IDL's.  For example Google's
protobufs library[2], released under a BSD New/3 clause license, is
used by a number of open source programs, and for which an interface
definition file might look like this:

message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
}

> And, finally, what's an example of a GPLv2 violation where the
> violation is specifically the failure to provide an "interface
> definition file"? (Put it another way: an accused GPLv2 violator comes
> into compliance except that the GPLv2 enforcer accuses it of failure
> to supply an "interface definition file". Is this realistic, and if so
> can someone supply a detailed example?

So if there was a GPLv2 licensed work which happened to use the Google
protobuf library, and said person only released the generated .c/.cpp
and .h files which were generated from the protobuf IDL compiler, that
might be an example of a GPL violation.

But I'm not sure I understand why IDL files were specifically called
out in the license.  Arguably the IDL files are the "preferred form of
the work for making modifications".  They would be the same as .y
files used by yacc/bison which generate .c and .h files, and -l files
used by lex/flex for the same purpose.

BTW, I could imagine an original author deciding that they didn't want
to make it easy for people to make incompatible changes to the
protocol, so that author might not release the IDL, and only released
the generated .c and .h files.  But that would be legal for the
original author to do, since they wouldn't be bound by the Copyleft
restrictions as the copyright author.  There might be some interesting
questions about whether subsequent redistributions would be allowed,
since they would not have the "preferred form of the work for
modifications" --- but that would be because the original author never
provided them!  (I'll leave it to the lawyers to figure out what would
happen in such a hypothetical case.)

I hope this helps,

					- Ted

[1] http://www.krzyzanowski.org/rutgers/hw/rpc/index.html
[2] http://code.google.com/p/protobuf/


More information about the copyleft-next mailing list