I believe that GNU GPLv3 does not require attribution, [...] Am I correct in my understanding of GPLv3?
No, the GPL-3.0 always requires attribution composed at the minimum of a copyright statement, a notice and the GPL license text.
Attribution examples are provided at the bottom of the license text.
But what is attribution?
I consider that attribution is the essence of free and open source licensing.
Let's assume my code contains third-party code.
At heart attribution is about communicating to my users the licensing
terms of this third-party code I redistribute. Therefore all bona fide
FLOSS licenses require some type of attribution, if anything to communicate
the licensing terms to the recipients of the code. Attribution is also about
giving due credit to the authors of the third-party code that I leverage (which may or may not be required by a license): this is the right thing to do and the thing I would appreciate users of my code to do when my code is reused.
Attribution can take several forms and some licenses are very prescriptive about attribution requirements stating which forms it should take, where and when it should be provided or displayed, whether it is required or optional, or applies to source code and/or binary code redistribution, should be present in the documentation, in the UI, etc.
In its minimal form it requires at least to communicate the original license terms as a notice and in many cases the whole text of the license. To be correct and complete, I should also:
- specify who this attribution is for: the simplest form would
be a copyright statement.
- specify which code this attribution applies to.
Without a proper copyright statement, an attribution would be moot and meaningless as the recipient would not know who I attributed.
Without a proper statement of which code the attribution is for, an attribution would have not much substance as the attributed code would be undetermined.
With these basics set, what are the attribution requirements of the GPL-3.0 license?
The GPL-3.0 license is rather clear and explicit on that topic. I added to the text excerpts some emphasis and cross links to make things clearer.
The definitions section explains what are the "Appropriate Legal Notices".
Later, this definition is reused in section 5 and 7.
[...] An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
Section 4 explains what attribution means when I redistribute unmodified copies of the source code:
[...] provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
So when I redistribute an unmodified copy of a GPL-3.0-licensed program I would need to "attribute" with:
- a conspicuous copyright statement and notice, with examples
- keep existing notices
- a copy of the GPL license text
I consider this to be the absolute minimal attribution of the GPL. Any other type of redistribution has additional requirements.
Let's look at these:
Under section 5, when I redistribute modified source code, I have these additional attribution requirements:
It starts with this, clearly establishing that these are extras requirements on top of section 4:
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
And then goes on to explain what these new requirements are:
a) The work must carry prominent notices stating that you modified it,
and giving a relevant date.
b) The work must carry prominent notices stating that it is released under
this License and any conditions added under section 7. This requirement
modifies the requirement in section 4 to “keep intact all notices”.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
So when I redistribute a modified source copy of a GPL-3.0-licensed program I would need to additionally "attribute" with:
- a tracking of the changes I made, with prominent modification dated notices
- if needed, I shall update (or create) notices to state that this code is under the GPL. If program(s) is missing a copyright of the original author, I should add a copyright statement. If program(s) is missing a GPL notice, I should add a GPL notice: for this I can use the provided examples.
- if there is some user interface, I need to update the code to display a notice following section 0 and I can use the provided examples.
Under section 6, when I redistribute binaries (aka. non-source), I have these additional attribution requirements:
It starts with this, clearly establishing that these are extras requirements on top of section 4 and 5:
You may convey a covered work in object code form under the terms of sections 4 and 5, [...]
If I provide the source code with the binaries then I have no new requirements.
If I do not provide the source code with the binaries I have a few extra requirements:
b) [...] accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that
product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source [...], or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written
offer to provide the Corresponding Source. [...]
d) Convey the object code by offering access from a designated place [...]
So in this case, my new attribution requirement boils down to provide or explain how to get the source code: the license covers several possible approaches and constraints. My preferred way and the simplest is to provide the source with the binaries.
There are other requirements under Section 6 for "user" products and re-installation doc. These are not strictly part of attribution so I will not discuss these here.
The other sections of the license (including Section7) are not relevant per se for attribution as they are for special cases and "Additional permissions" cannot weaken the attribution requirements that came before in the license text.
Finally, at the end and past the "terms and conditions", the license provides guidelines and an example on How to Apply These Terms to Your New Programs: this clarifies what a source code and displayed notice should look like if something was not clear to me before.
Therefore, the GPL 3.0 always requires "attribution".
But I may not be convinced yet:
What happens if you want to use (modify) a GPL work that misses a copyright notice? (am I correct to think this is a possible scenario?)
It's still not clear to me what an "appropriate copyright notice" as mentioned in section 0 is. I mean, if the source I receive has 2016 (c) Philippe Ombredanne, does that mean if I modify the source, I need to keep that verbatim? What part of the license exactly is it that disallows me from just replacing it with 2016 (c) Amani Kilumanga
As I stated above, in addition to the attribution requirements for unmodified source code, if I modified source code I have these additional requirements per section 5:
per 5-a) I need to notify of my changes with a date
per 5-b) I shall update (or create) notices to state that this code is under the GPL. If program(s) is missing a copyright of the original author, I should add a copyright statement. If program(s) is missing a GPL notice, I should add a GPL notice. For this I can use the provided examples.
For my changes I can also add my own copyright statement. I shall not/never remove anyone else copyright or notice.
per 5-d) if there is some user interface, I need to update the code to display a notice following section 0 and I can use the provided examples for this.
So if I modify source that had
Copyright (c) 2016 Amani Kilumanga I shall not remove that copyright statement. I can add my copyright statement
Copyright (c) 2016 Philippe Ombredanne and I must state that I modified the source when and how.
For instance I could add this change notice:
2016-10-01: Update the interactive streamline nosql to supply strategic users.
If the source code was missing a proper GPL notice, I shall add it and I would use the provided example as a template.
So in all cases, the modified source code would start with something more or less like this:
Copyright (c) 2016 Amani Kilumanga
Modifications Copyright (c) 2016 Philippe Ombredanne
2016-10-01: Update the interactive streamline nosql to supply strategic users
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
And a command line program notice could end up looking like this:
Copyright (c) 2016 Amani Kilumanga
Modifications Copyright (c) 2016 Philippe Ombredanne
This program comes with ABSOLUTELY NO WARRANTY; for details type 'banana foo'.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'banana bar' for details.