[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Defining 'preferred form for making modifications'



Nick Phillips said:
> In the situation where I take a simple GPL'd C program, compile it to
> assembler, then hand-optimise the assembler before altering the code,
> initially in small ways, eventually completely re-writing the whole
> thing, adding huge amounts of new functionality, removing the initial
> functionality entirely once it becomes obsolete, and then translating
> the whole thing into assembler for a different architecture (the old
> one likewise became obsolete), then there is no well-defined point at
> which the C source ceases to be any kind of source for the end product,
> but it most certainly does happen somewhere along the way.
>

So, you:
take the GPLd orig.c,
run gcc -s -o orig.s orig.c,
edit (optimize) orig.s -> modified.s,
eventually replace all the original functionality creating new.s,

orig.s is clearly a derived work, and distribution (if there is any) must
follow the GPL.  In this case, it is clear that orig.c is the "source" for
orig.s and the preferred form for modification is the C programming language.

When you have optimized orig.s to create modified.s, then you have created a
work that is derived from orig.s (and therefore orig.c) as well as your
copyright.  I'm assuming that the changes are substantial enough to warrant
copyright.  The "preferred form for modification" for your changes is
assembly code.  The "preferred form for modification" for the rest of the
work is the C programming language, so the source is both modified.s and
orig.c.[0]

By the time we get to new.s, all the original code has been removed and
reimplemented.  Unless SCO is correct, at this point new.s will not be a
derived work from orig.c, so you will not be bound by the terms of the
license from the author of orig.c, and you can drop orig.c from the "source"
distribution.  At that point, the "preferred form" is only assembly.  (And
at this point, you could change the license of new.s without permission from
orig.c's author)

--Joe
[0]  It may be clearer (at least conceptually) if you mentally separate the
different copyrights into separate files:  distribute orig.c, a script that
runs gcc -s -o orig.s orig.c, modified.s.patch, and a script that runs ed
<modified.s.patch.  You have copyright over everything in modified.s.patch
(made from diff -e modified.s orig.s), but not over the contents of
orig.s[1].  The binary (from modified.s) is a derived binary from your work
as well as orig.c, so GPL requires source to both parts.
[1] You can't distribute orig.s as source for modified.s, since it's a
derived work in non-preferred form (i.e. "object" in GPL terms).




Reply to: