Question

I have a question about the 3-clause BSD license based on its Wiki description.

It states:

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: ...

What is understood by "modification"? Specifically I am interested whether any/all of the following is considered as such modification:

  1. Reading the original sources and then re-implementing a custom way.

  2. Reading the original sources, waiting for a year and then re-implementing something based on whatever you could remember.

  3. Direct and very significant "complete" refactoring of the original sources.

Was it helpful?

Solution

Modification in this case is anything that is a non-trivial change to the source code.

So what are some examples of trivial change?

  • White space only changes or other formatting such as line breaks.
  • Renaming variables
  • Renaming a file or module

Notice that the trivial changes don't do anything to the programmatic flow of the application.

Non-trivial changes would include:

  • Re-working algorithmic flow
  • Adding functionality (logging, tracing, enhancements)
  • Bug fixes

Notice that the non-trivial changes are additive or that they affect the program's flow.

They are some grey areas, though. For example, refactoring a method by extracting some portions out may or may not be trivial. It depends upon the complexity of the extraction and what needed to be re-arranged in order to support the extraction. Likewise, extracting cut & paste blocks of code into a single method requires some analysis to determine if it's not trivial.


So let's tackle your questions.

Reading the original sources and then re-implementing a custom way.

I'm going to go with non-trivial and therefore a modification to the original code. Key aspect here is re-implementing [in] a custom way. It wasn't a copy & paste exercise; you had to put significant effort into implementing and validating your work.

Reading the original sources, waiting for a year and then re-implementing something based on whatever you could remember.

Hard to say, and could go either way. "Waiting time" has nothing to do with determining whether or not the modification was trivial. For example, you could have a photographic memory and were therefore able to re-write the code verbatim from memory. It's an impressive feat but it wouldn't qualify as a modification. On the other hand, you could end up with a complete re-write of the algorithms and therefore have created a non-trivial change.

Direct and very significant "complete" refactoring of the original sources.

Definitely a modification of the original code. Complete refactoring implies re-arranging significant amounts of code and altering the program's flow.


Getting at the peripheral of your question, why would you care so much about whether or not a change counts as a modification. If you make a non-trivial change to the code, then you own the copyright to that change. And even though the BSD license gives you pretty much free reign to do whatever with the original project, if you re-wrote the entire project then you can lay claim to all of the copyright of the new project.

Courtesy would suggest acknowledging the earlier project as inspiration, but you're not legally obligated to do so once you've completely re-written a project. And if you haven't completely re-written the project then you'll need to abide by the clauses of the BSD license.

OTHER TIPS

I'm not a lawyer, but my understanding is that a modification would be anything that's considered a derivative work under copyright law. This is a grey area where borderline cases may need to be decided in court, so it may be better to be safe and do what the license says anyway. Also, consider asking the original developers, they often clarify ambiguous parts of the license to users.

This issue came up when implementing GNU after some programmers had read the source code of Unix (See Reading non-free code). This is for non-free code but the same idea applies. Based on these guidelines:

  • Item (1) could count as a modification. Although it could depend on how different your implementation is.
  • Item (2) wouldn't be a modification if you implement it in a different way.
  • Item (3) would be a modification, because it leaves some of the code of the original in the new version, or at least some of the structure.

The safest way to reimplement something without violating copyright is to use something like clean room design. This provides a defence in case you are sued for infringement.

Licensed under: CC-BY-SA with attribution
scroll top