License header: Difference between revisions
Dan Polansky (talk | contribs) No edit summary |
Dan Polansky (talk | contribs) |
||
| (24 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
FreeMind uses the following license header in .java files (see also [[Licensing]]): | The author of this page is Dan Polansky, bar any changes in the revision history that could appear later. | ||
What follows includes reports on current license header practice in FreeMind as well as design considerations on how things could be done in future and what principles to apply. In support of the latter, practice in other free/open-source (FOSS) projects is considered. | |||
== FreeMind license header == | |||
FreeMind uses the following license header in .java files (see also [[Licensing]]; keywords: copyright header, copyright notice): | |||
<pre> | <pre> | ||
/* FreeMind - A program for creating and viewing mind maps | /* FreeMind - A program for creating and viewing mind maps | ||
* Copyright (C) | * Copyright (C) <START-YEAR>-<END-YEAR> <AUTHORS> | ||
* See COPYING for Details | * See COPYING for Details | ||
* | * | ||
| Line 20: | Line 27: | ||
*/ | */ | ||
</pre> | </pre> | ||
The <START-YEAR> is often 2000, but not always. | |||
Questions: | Questions: | ||
* What detail and granularity of authorship should be maintained in the license header? | * What detail and granularity of authorship should be maintained in the license header? | ||
* Would it suffice to identify the license more succinctly, e.g. "License: GNU GPL | * Would it suffice to identify the license more succinctly, e.g. "License: GNU GPL V2+; see COPYING for details"? For instance, the applicable SPDX license identifier is "GPL-2.0-or-later"[https://spdx.org/licenses/]. | ||
** What FOSS projects use this kind of succincts identification? | ** What FOSS projects use this kind of succincts identification? | ||
** What FOSS projects use SPDX identifier and in what way? | ** What FOSS projects use SPDX identifier and in what way? | ||
| Line 39: | Line 48: | ||
*: This one drops the beginning with years and year ranges. | *: This one drops the beginning with years and year ranges. | ||
== Examples from other FOSS projects == | |||
Example license header in Emacs[https://github.com/emacsmirror/emacs/blob/master/exec/exec.c]: | |||
<pre> | |||
/* Program execution for Emacs. | |||
Copyright (C) 2023-2026 Free Software Foundation, Inc. | |||
This file is part of GNU Emacs. | |||
GNU Emacs 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. | |||
GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ | |||
</pre> | |||
Notes: the license header resembles that of FreeMind. GNU Emacs requires copyright assignment to FSF, making the above avoidance of listing individual contributors possible/easier to justify. | |||
Example license header from Linux[https://github.com/torvalds/linux/blob/master/kernel/sched/core.c]: | |||
<pre> | |||
// SPDX-License-Identifier: GPL-2.0-only | |||
/* | |||
* kernel/sched/core.c | |||
* | |||
* Core kernel CPU scheduler code | |||
* | |||
* Copyright (C) 1991-2002 Linus Torvalds | |||
* Copyright (C) 1998-2024 Ingo Molnar, Red Hat | |||
*/ | |||
</pre> | |||
Example license header from LibreOffice[https://github.com/LibreOffice/core/blob/master/formula/source/core/api/FormulaCompiler.cxx]: | |||
<pre> | |||
/* | |||
* This file is part of the LibreOffice project. | |||
* | |||
* This Source Code Form is subject to the terms of the Mozilla Public | |||
* License, v. 2.0. If a copy of the MPL was not distributed with this | |||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. | |||
* | |||
* This file incorporates work covered by the following license notice: | |||
* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed | |||
* with this work for additional information regarding copyright | |||
* ownership. The ASF licenses this file to you under the Apache | |||
* License, Version 2.0 (the "License"); you may not use this file | |||
* except in compliance with the License. You may obtain a copy of | |||
* the License at http://www.apache.org/licenses/LICENSE-2.0 . | |||
*/ | |||
</pre> | |||
Notes: The authors are not stated on a per-file basis; they can be seen from the commit history. See also https://api.libreoffice.org/share/readme/LICENSE.html. A similar header (not stating individual contributors) was seen in other files[https://github.com/LibreOffice/core/blob/master/basic/source/runtime/iosys.cxx][https://github.com/LibreOffice/core/blob/master/dbaccess/source/core/dataaccess/ComponentDefinition.cxx]. | |||
Example license header from GCC[https://github.com/gcc-mirror/gcc/blob/master/libcpp/charset.cc]: | |||
<pre> | |||
/* CPP Library - charsets | |||
Copyright (C) 1998-2026 Free Software Foundation, Inc. | |||
Broken out of c-lex.cc Apr 2003, adding valid C99 UCN ranges. | |||
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, 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; see the file COPYING3. If not see | |||
<http://www.gnu.org/licenses/>. */ | |||
</pre> | |||
Notes: This is made possible by [[copyright assignment]] to FSF, which ceased for GCC only in 2021. This GNU GPL V3+, not V2+. | |||
Example license header in LLVM/Clang[https://github.com/llvm/llvm-project/blob/main/clang/lib/Driver/Action.cpp]: | |||
<pre> | |||
//===- Action.cpp - Abstract compilation steps ----------------------------===// | |||
// | |||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |||
// See https://llvm.org/LICENSE.txt for license information. | |||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |||
// | |||
//===----------------------------------------------------------------------===// | |||
</pre> | |||
Notes: no individual contributors are listed. The license information is concise. | |||
== Option: do not list individual contributors == | |||
Interestingly, [https://www.linuxfoundation.org/blog/blog/copyright-notices-in-open-source-software-projects Winslow 2020 (linuxfoundation.org)] recommends not to list individual contributors and explains why. The source makes a special provision for the case that "[...]a file only contains code that originates from a third party source who didn’t contribute it themselves [...]". Importantly: | |||
* "Copyright notices are not mandatory in order for the contributor to retain ownership of their copyright." | |||
* "Copyright notices are rarely kept up to date as a file evolves, resulting in inaccurate statements." | |||
* Etc. | |||
Similar view/position is taken by [https://opensource.com/article/20/10/copyright-notices-open-source-software Peterson 2020], where Scott K Peterson "is a member of the Red Hat legal team". Peterson emphasizes the importance of ''license notice'', while the ''copyright notice'' he holds to be relatively unimportant. | |||
If the above approach were taken, the FreeMind copyright notices could often state "Copyright The FreeMind contributors" and be done with it; but not always, for instance when FreeMind incorporated the code for the splash screen from Gantt project (since arguably, the author of the Gantt project did not contribute that code to FreeMind, but rather, FreeMind took that code from Gantt project, as it could given the license). However, since the most significant contributors up to a FreeMind version are often known, stating them, followed by "and others", could be preferable; and thus, it would state "Copyright Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev and others". A disadvantage of this approach is that should a new very significant contributor appear, all copyright notices would have to be updated, in all .java files, or else the contributor would be added only to the files impacted by him, but that would be going back to manually maintained fine-grained contributor lists on a per-file basis. | |||
Who is a ''FreeMind contributor''? | |||
* Someone who has contributed code or other assets via email, a patch tracker or other similar means. | |||
Who is ''not'' a ''FreeMind contributor'' in a narrow sense yet his work is directly used by FreeMind? | |||
* Someone whose code or other assets (e.g. images) were taken into FreeMind as they could given the license but did not contact the FreeMind project in any way or did not indicate in any way that he is contributing something to FreeMind. | |||
A good terminology for the above should be clarified. Perhaps the former would be a ''direct FreeMind contributor'' while the latter would be an ''indirect FreeMind contributor''. But this terminological choice does not match Winslow 2020. And it would seem doubtful to think that e.g. the authors of Batik (a component used by FreeMind for SVG export) are ''indirect FreeMind contributors''. Perhaps the latter could be called ''quasi-contributor'', using the alienating prefix ''quasi-''. | |||
Links: | == Links == | ||
* https://www.linuxfoundation.org/blog/blog/copyright-notices-in-open-source-software-projects | * [https://softwarefreedom.org/resources/2012/ManagingCopyrightInformation.pdf Managing copyright information within a free software project], 12 Sep 2012, softwarefreedom.org | ||
* [https://www.linuxfoundation.org/blog/blog/copyright-notices-in-open-source-software-projects Copyright Notices in Open Source Software Projects] by Steve Winslow, 10 Jan 2020, linuxfoundation.org | |||
[[Category:Development]] | [[Category:Development]] | ||
Revision as of 10:04, 15 May 2026
The author of this page is Dan Polansky, bar any changes in the revision history that could appear later.
What follows includes reports on current license header practice in FreeMind as well as design considerations on how things could be done in future and what principles to apply. In support of the latter, practice in other free/open-source (FOSS) projects is considered.
FreeMind license header
FreeMind uses the following license header in .java files (see also Licensing; keywords: copyright header, copyright notice):
/* FreeMind - A program for creating and viewing mind maps * Copyright (C) <START-YEAR>-<END-YEAR> <AUTHORS> * See COPYING for Details * * 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 2 * 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
The <START-YEAR> is often 2000, but not always.
Questions:
- What detail and granularity of authorship should be maintained in the license header?
- Would it suffice to identify the license more succinctly, e.g. "License: GNU GPL V2+; see COPYING for details"? For instance, the applicable SPDX license identifier is "GPL-2.0-or-later"[1].
- What FOSS projects use this kind of succincts identification?
- What FOSS projects use SPDX identifier and in what way?
Example author-declaring lines in the license headers of FreeMind 0.9.0:
- Copyright (C) 2000-2001 Joerg Mueller <joergmueller@bigfoot.com>
- Copyright (C) 2000-2006 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitri Polivaev and others.
- Copyright (C) 2000-2006 Christian Foltin and others
- Copyright (C) 2000-2004 Joerg Mueller, Daniel Polansky, Christian Foltin and others.
Helpful queries using Unix-like oneliners:
- grep -r --include="*.java" "Copyright" .
- grep -h -r --include="*.java" "Copyright" . | sort | uniq
- grep -h -r --include="*.java" "Copyright" . | sed "s/.*\(C\).*[0-9] *//" | sort | uniq
- This one drops the beginning with years and year ranges.
Examples from other FOSS projects
Example license header in Emacs[2]:
/* Program execution for Emacs. Copyright (C) 2023-2026 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs 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. GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
Notes: the license header resembles that of FreeMind. GNU Emacs requires copyright assignment to FSF, making the above avoidance of listing individual contributors possible/easier to justify.
Example license header from Linux[3]:
// SPDX-License-Identifier: GPL-2.0-only /* * kernel/sched/core.c * * Core kernel CPU scheduler code * * Copyright (C) 1991-2002 Linus Torvalds * Copyright (C) 1998-2024 Ingo Molnar, Red Hat */
Example license header from LibreOffice[4]:
/* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */
Notes: The authors are not stated on a per-file basis; they can be seen from the commit history. See also https://api.libreoffice.org/share/readme/LICENSE.html. A similar header (not stating individual contributors) was seen in other files[5][6].
Example license header from GCC[7]:
/* CPP Library - charsets Copyright (C) 1998-2026 Free Software Foundation, Inc. Broken out of c-lex.cc Apr 2003, adding valid C99 UCN ranges. 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, 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; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */
Notes: This is made possible by copyright assignment to FSF, which ceased for GCC only in 2021. This GNU GPL V3+, not V2+.
Example license header in LLVM/Clang[8]:
//===- Action.cpp - Abstract compilation steps ----------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===//
Notes: no individual contributors are listed. The license information is concise.
Option: do not list individual contributors
Interestingly, Winslow 2020 (linuxfoundation.org) recommends not to list individual contributors and explains why. The source makes a special provision for the case that "[...]a file only contains code that originates from a third party source who didn’t contribute it themselves [...]". Importantly:
- "Copyright notices are not mandatory in order for the contributor to retain ownership of their copyright."
- "Copyright notices are rarely kept up to date as a file evolves, resulting in inaccurate statements."
- Etc.
Similar view/position is taken by Peterson 2020, where Scott K Peterson "is a member of the Red Hat legal team". Peterson emphasizes the importance of license notice, while the copyright notice he holds to be relatively unimportant.
If the above approach were taken, the FreeMind copyright notices could often state "Copyright The FreeMind contributors" and be done with it; but not always, for instance when FreeMind incorporated the code for the splash screen from Gantt project (since arguably, the author of the Gantt project did not contribute that code to FreeMind, but rather, FreeMind took that code from Gantt project, as it could given the license). However, since the most significant contributors up to a FreeMind version are often known, stating them, followed by "and others", could be preferable; and thus, it would state "Copyright Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev and others". A disadvantage of this approach is that should a new very significant contributor appear, all copyright notices would have to be updated, in all .java files, or else the contributor would be added only to the files impacted by him, but that would be going back to manually maintained fine-grained contributor lists on a per-file basis.
Who is a FreeMind contributor?
- Someone who has contributed code or other assets via email, a patch tracker or other similar means.
Who is not a FreeMind contributor in a narrow sense yet his work is directly used by FreeMind?
- Someone whose code or other assets (e.g. images) were taken into FreeMind as they could given the license but did not contact the FreeMind project in any way or did not indicate in any way that he is contributing something to FreeMind.
A good terminology for the above should be clarified. Perhaps the former would be a direct FreeMind contributor while the latter would be an indirect FreeMind contributor. But this terminological choice does not match Winslow 2020. And it would seem doubtful to think that e.g. the authors of Batik (a component used by FreeMind for SVG export) are indirect FreeMind contributors. Perhaps the latter could be called quasi-contributor, using the alienating prefix quasi-.
Links
- Managing copyright information within a free software project, 12 Sep 2012, softwarefreedom.org
- Copyright Notices in Open Source Software Projects by Steve Winslow, 10 Jan 2020, linuxfoundation.org