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).

