I'm giving myself a headache just thinking about this, so would appreciate anyone else with an opinion.

First, off, a note: I'm absolutely aware that my current code is a 'derivative work' - That's not in question. The implications of this are giving me a headache though.

The situation is as follows: I wanted to parse TGA images into a .Net bitmap. I did some digging, and came up with the following code: http://www.codeproject.com/Articles/31702/NET-Targa-Image-Reader

This is covered under the CodeProject open-source license. I then took the original code, and re-wrote completely, thus creating what I'm reasonably certain at this point is a derivative work.

I then started thinking about the implications of the licensing.

TGA is a fixed file format, with a standard specification.
In order to parse this, you need to read the footer first to determine the version plus various offsets, then the header & extension tables, followed by the image data itself.

Using standard C# tools, I can't see any 'other' easy ways to do this than the standard BinReader.
I can juggle around the order things are called in, but ultimately assuming that any given image conforms to the specifications laid down by Truevision ( http://www.dca.fee.unicamp.br/~martino/disciplinas/ea978/tgaffs.pdf ) , the number of bytes needed to be read can always be determined programatically, and will never be different.

Does this mean that any TGA parser I write is now 'contaminated' by CodeProject license, as I've gained knowledge from it, or have I just opened a can of worms?

3 Answers 3


I assume that the CPOL is like the GPL in that it is "viral"?

Copyright is based on original creations. To infringe a copyright, you have to copy the original work - simply creating a new work from the same principles is not infringement.

The TGA standard can be considered to be the principle on which you design your software, and thus you can design it without infringing the copyright of the first work you studied.

However, as you mention, it will be difficult for you to prove beyond the balance of probability that you didn't copy the work. This happened last year - Robin Thicke and Pharrell Williams were ordered to pay $7 million to the family of Marvin Gaye because it appeared that they had copied the latter's work. Nobody can tell whether they did or not, but Thicke's having listened to the work while writing his new song led the jury to believe that there was sufficient evidence of copying for there to be infringement.

The same could apply to you - it's not possible to say for certain, as every case is different. In the end, there are arguments for your position and arguments against, and you're going to have to make a judgement about which route you want to take.

  • Thanks for the responses so far. Fortunately, it's not a viral licence, but I discovered too late that it's FSF incompatible, with a second nastily ambiguous clause on distribution which I would rather avoid. Neither of these are deal-breakers, but I'm trying to understand the implications, which I would rather have avoided in the first place.
    – leezer3
    Apr 2, 2016 at 21:16
  • Second thought- I'm also not at all sure the work I used is copyrightable in the first place. As the sequence of bytes is always in a fixed set of ratios which can be determined by reference to others/ the Truevision documentation, I'd guess this would come under the EU ruling that algorithms aren't patentable. Either way, a mess.... As a minimum, the original author will be noted and credited in the code, but I still need to figure out the licence implications.
    – leezer3
    Apr 2, 2016 at 21:24

You could give somebody the format specification and ask to implement the functionality for parsing the file. That way you should be completely in the clear regarding this.


Typically, to avoid any contamination, you have to do a Clean Room implementation of this code. In my interpretation of it, this would mean not having any memory of the exact syntax of the code and that you have rewrote the program from scratch.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.