Skip to content

Make file headers actual conform #214

Description

@zoglauer

Unify source file headers under LGPL-3.0-or-later

Summary

Nuclearizer is distributed under the GNU LGPL v3 (License.md), but the headers in the source files still carry the original, older notice that contradicts LGPL v3.
Therefore, we should replace them with a uniform, compliant LGPL notice.

What is wrong with the current header

184 of 193 source files (.cxx, .h, scripts, Makefiles) start with a variant of:

  Copyright (C) by <Author>.
  All rights reserved.

  This code implementation is the intellectual property of
  <Author>.

  By copying, distributing or modifying the Program (or any work
  based on the Program) you indicate your acceptance of this statement,
  and all its terms.

Headers (.h) only say "Please see the source-file for the copyright-notice".

Problems:

  1. It contradicts the license. "All rights reserved" means no permissions are granted, while License.md grants the rights to use, modify and redistribute under the LGPL. Anyone reading a single file gets the opposite message from the repository.
  2. No file mentions the license. Neither the LGPL, nor License.md, nor a warranty disclaimer appear in any file. A file copied out of the repository carries no license information at all. The FSF recommends a per-file notice for (L)GPL projects.
  3. The "acceptance by use" clause is incompatible with the LGPL. "By copying ... you indicate your acceptance" is not part of the LGPL, and GPLv3 §9 (incorporated by the LGPL) states the opposite: you do not need to accept the license to receive or run a copy.
  4. The copyright attribution is inaccurate. Most files name one or a few individuals as sole owners, but Nuclearizer has many contributors from several institutions, and copyright in each contribution is held by its author or, where applicable, their employer. "Intellectual property of " does not reflect that.
  5. Inconsistent formats. Several header variants exist (with and without years, with typos, with stale file names), and headers point to a copyright notice in the source file that does not contain
    one.

Proposed change

  1. One header for every source file, stating the project copyright and the license:

      /*
       * <FileName>
       *
       * Copyright (C) by the Nuclearizer contributors.
       *
       * This file is part of Nuclearizer.
       *
       * Nuclearizer is free software: you can redistribute it and/or modify it
       * under the terms of the GNU Lesser General Public License as published by
       * the Free Software Foundation, either version 3 of the License, or (at
       * your option) any later version.
       *
       * Nuclearizer 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 Lesser
       * General Public License (License.md) for more details.
       *
       * SPDX-License-Identifier: LGPL-3.0-or-later
       */
    

The same text is used as # comments in scripts, Makefiles and Python files. Leaving out years means the header never needs updating, and the SPDX line makes the license machine-readable.

  1. A CONTRIBUTORS.md defines "the contributors": copyright in each contribution is held by the individual contributor or, where applicable, their employer or institution. It lists everyone currently named in the file headers plus the authors in the git history. The per-file author names move there.
  2. Consistent runtime text: remove "All rights reserved" from About dialogs and help texts, and show "(C) by the Nuclearizer contributors, licensed under LGPL v3+" instead.
  3. Branches: apply the same header to files that exist only on active branches when they are merged.

If there is any opposition, please mention it below. I did the same for MEGAlib.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions