https://invisible-island.net/personal/
Copyright © 2018-2019,2023 by Thomas E. Dickey
I originally thought that a single copyright notice with a computer program (a single creative work) was sufficient. But with experience, I found that people would copy the work and omit the copyright notice and related licensing information, along with other material that they found inconvenient.
Marking every file helps, perhaps.
To clarify, “originally” meant in the 1990s, when I began publishing my programs on the Internet.
When I began computer programming around 1970, copyright did not apply to computer programs. But computer manuals could be copyrighted. In one episode in 1976, I decided to copyright the manuals which I had written for a system of cross-assemblers and simulation tools.
Most programmers have seen the copyright symbol ©, but
that is not part of the US-ASCII character set which was used on
most terminals at the time. I (like more than one other person)
decided to solve the problem by using
(C)
, and marked the documents
according. A few weeks after sending in a repository copy with
the required fee, I received a reply saying that the mark was
incorrect, and that the registration was denied.
By the way (according to my reading at the time), that was an irreparable error if the document was published without a valid copyright notice.
Things have changed since then, but I do not use the ASCII
look-alike (C)
except when dealing
with people who rely upon folklore. Either the symbol © or
the word “copyright” (or abbreviation
“copr.”) can be used. The
(C)
has no basis in law (see the
Copyright Office's Circular 3).
Amusingly enough, the recently published Compendium of U.S. Copyright Office Practices (third edition) lists that as one of several variants in Appendix A
A variant of the symbol © will be acceptable only where it resembles the © closely enough to indicate clearly that the copyright symbol is meant.
The given examples are a mixture of hand-drawn and typewriter copy. In most cases, you would find it difficult to agree that the depiction does in fact “indicate clearly” the intended symbol. Whether any of that is relevant is a moot point for this discussion, since clerks could (and likely did) ignore it.
Times change. The Berne Convention is not so rigid regarding
proper notices (though (C)
is still
the wrong mark). What mattered in the mid-1990s and beyond were
appropriate guidelines for copyright notices:
Those are few of the many questions I might have asked; there are many possible answers to those. There were different situations for different programs:
Keeping all of that in mind, it is basically an etiquette problem:
We could go on from there, but for freely-modifiable works, I would not add a notice to a file until I had changed about 20%.
If there is a single copyright notice for a collection of files, the year(s) listed should correspond to those when the collection was modified. It is easier to work with individual notices on each file because not all are changed in a given year.
The most recent years for content changes and copyright notices should agree. Adding a copyright notice should not alter the date of modification.
These are all commonsense guidelines. But “common sense ain't all that common” as Will Rogers said.
Most programmers will not remember to add trivia such as copyright notices to source code. That is a task left until later. However, the people assigned to ensure that files have copyright notices usually are not both programmers and knowledgable about the legal nuances.
In 1989 I was working on a
project that would run on VMS, and (looking at the sources for a
Gould system, to possibly borrow its sed
program)
saw an example of this problem. Apparently someone had simply run
a shell script over all of the sources, adding a line at the end
for a copyright notice. It did not even have a
“#
” to keep a shell from interpreting
it, and there was no provision for different types of source file
such as C or nroff or shell. Perhaps Gould's copy of the source
code did not have that notice applied.
A couple of years later, someone needed to mark up copyright notices on a collection of programs which had been developed at the Software Productivity Consortium, including some that I had helped with. Recalling the way Gould's source had been marked, I suggested making a program that would do this correctly. The result was copyrite.
Several years later (different place altogether), I was told about the need to add copyright notices to several thousand files. The sources were stored in PCVS on a Windows system, and were used for a web application:
I wrote a set of Perl scripts to
That took a few weeks, including review of the changes with the other developers.
I use scripts to check for consistency when releasing a program:
Copyright law does not require a notice. If there is no explicit license granting permission, fair use only is permitted, even for web pages. Fair use as such always requires attribution, and is limited to small portions of a document.
Just to be helpful, a couple of FAQS from my website (ncurses and xterm) have permissive licenses.
There are several issues to mention; examples are suitable in a few cases.
A copyright notice for an unpublished work is pointless. The notice is used for published works.
On occasion you may notice (pun intended) someone publishing a computer program and later adding copyright notices giving earlier dates than the first date it was made available. That of course is done to “prove” that the work was in development at some early date.
I have noticed some developers “updating the copyrights” on works which have not changed in a given year. Do not do that. A copyright notice tells someone when a work was published. If you did not change the work, there is no reason to keep changing the dates.
From “updating” to changing copyright notices in derived work is less of a jump than you might suppose. In October 1998, David Dawes sent a patch announcement to the XFree86 developer's mailing list which said in part (emphasis added):
This version consists almost exclusively of the merge of the X11R6.4 code into our source tree. Changes that people have submitted since 3.9Ng are not included here. I am hoping to have 3.9Ni ready later today with those changes. The diffs are large and it is important to follow the patching instructions. The bulk of the source diffs are changes in copyright notices, which unfortunately obscures the real changes to some degree. Although the R6.4 license has been changed, the copyright notices in the source code have not been changed back (yet). In considering how to handle this we decided to let the changes flow through naturally to minimise the impact on the vendor branch in our CVS repository. If it turns out that we need to do something else about this prior to the 4.0 release, we'll do that then. The only document in TOG's X11R6.4 ftp area that has been updated for the license reversion is the RELNOTES.TXT file that is outside the tarballs. We have updated the RELNOTES.{ms,PS,TXT} files in our source tree accordingly so that they do have the correct copyright information. 3.9Nh has been build tested so far on FreeBSD, Linux and Solaris. Past experience has shown that there may still be some merge-related problems. These can be simple typos from the manual parts of the merge, incompatible changes between our code and the TOG code, local changes being inadvertently backed out, new portability issues, etc. If you find any problems like this, please let me know. A few areas were isolated from the merge. Nothing in the hw/xfree86, hw/xfree68 and hw/xfree98 directories was directly changed. Same for xterm and most of the Xaw and Xmu libraries. For those who are might need them, diffs between X11R6.3p2 and X11R6.4p3 can be found in /pub/xf86/beta/R6.4diffs/. It may be useful for the maintainers of our xterm and Xaw/Xmu code to check if we need any changes in those areas.
The mail went on to explain where the patch could be obtained, and then gave an example of the typical change which was made. Here is a readable version of that change:
@@ -27,14 +27,9 @@
/*
-Copyright (c) 1987, 1994 X Consortium
+Copyright 1987, 1994, 1998 The Open Group
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+All Rights Reserved.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
@@ -42,13 +37,13 @@
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-Except as contained in this notice, the name of the X Consortium shall not be
+Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from the X Consortium.
+in this Software without prior written authorization from The Open Group.
That is, there were three aspects of the change:
replace “X Consortium” by “The Open Group”
add a 1998 copyright-date to each file
rescind the permissions granted in previous releases to use, modify, distribute, etc.
The X11R6.4 sources had 6531 files; it is unclear why some files were not modified, unless the changes were done with a text editor rather than a specialized script (see my sccs-tools page for an example). Almost 90% of the files affected by this patch had only changes to the copyright notice. This is the amount of change that diffstat reports for the patch:
1569 files changed, 29434 insertions(+), 38053 deletions(-)
At the time, I reported to David Dawes:
No change was needed for xterm. X11R6.3, released late in 1996 was copyrighted by the X Consortium. The Open Group had made no change to their version other than a few build-fixes which were not needed in the XFree86 version. The diffstat summary for The Open Group's changes was
10 files changed, 89 insertions(+), 109 deletions(-)
while the XFree86 summaries for the same time period (comparing xterm patch #64 and XFree86 3.2 in October 1996 or 3.2A in January 1997) were
51 files changed, 6077 insertions(+), 2296 deletions(-) 46 files changed, 3672 insertions(+), 1605 deletions(-)
respectively (patch #34 would be more appropriate, but I do not have a snapshot of that). However the two versions had diverged at least a year before X11R6.3, which further undermines any notion of applying “updated” copyrights to xterm.
I disagreed with the simple change to name, pointing out that associating The Open Group with X in any year before 1997 was incorrect.
Looking through the patch I had noticed that if the patch were applied, some copyright notices would incorrectly state that members of the X Consortium were employed by The Open Group. Revisiting it, here are some examples:
xc/include/extensions/extutil.h
- * Author: Jim Fulton, MIT X Consortium + * Author: Jim Fulton, MIT The Open Group
xc/lib/X11/XlibInt.c
/* * Support for internal connections, such as an IM might use. - * By Stephen Gildea, X Consortium, September 1993 + * By Stephen Gildea, The Open Group, September 1993 */
and in xc/programs/xdm/krb5auth.c
/* * xdm - display manager daemon - * Author: Stephen Gildea, X Consortium + * Author: Stephen Gildea, The Open Group */
however Gildea's website says
I was a member of the technical staff at the X Consortium for five years, until June 1996, developing X Window System technology.
xc/programs/xfwp
removed the author's
name from the source code (two places):
-/* - Author: Reed A. Augliere - under contract to X Consortium, Inc. - */ -
although leaving it in the manual page.
In later discussion, it was suggested that someone simply
ran a sed
script ineptly. But there are numerous
references to other individuals in the patch which
show that there was not a simple bulk replacement of “X
Consortium” with “The Open Group” (some
selectivity was employed here).
The larger issue is whether XFree86 was obligated in any sense to modify copyright (and permissions) notices in sources it had already received with the previous license. Of course it was not, but David Dawes' message illustrates the confusion people may undergo in these situations.
While I ignored the change of permissions (since most of the X development was done by XFree86), that was the deciding factor for most people. The short term result of the change to permissions was that X11R6.4 was a failed release. A few years later, when its developers took a different tack, and the changes were reconsidered, I brought up those points again.
We revisited this in January 2002, with my posting to the XFree86 developer's mailing list:
Date: Tue, 1 Jan 2002 06:13:05 -0500 From: Thomas Dickey <dickey@herndon4.his.com> To: devel@xfree86.org Subject: xterm-164-current.patch I noticed this yesterday: several files having new copyrights for TOG There's a problem with that. The name - ok. The dates, no. TOG hasn't contributed any changes to any (except possibly main.c) of the files that are touched. So it's misleading. (Citing a 1989 date for copyright by TOG is also misleading). Don't we have a suitable disclaimer for this situation? +++ xterm-164-current/xterm.man Mon Dec 31 09:15:34 2001 @@ -1,4 +1,4 @@ -.\" $Xorg: xterm.man,v 1.3 2000/08/17 19:55:10 cpqbld Exp $ +.\" $Xorg: xterm.man,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $ .\"
The Wayback Machine has the CVS log for that file, but not the associated differences. Reading the log, the relevant change appears to be
Revision 3.79.2.1 / (download) / (as text) - annotate - [select for diffs] , Tue Dec 18 17:13:56 2001 UTC (2 years, 10 months ago) by tsi Branch: Domain-branch Changes since 3.79: +15 -17 lines Diff to previous 3.79 Another resync with HEAD branch.
There were some followups, as shown in the thread outline from mutt:
1 01/01 Thomas Dickey (1.7K) xterm-164-current.patch 2 rs 01/01 Branden Robinso (1.3K) ├─> 3 01/01 Thomas Dickey (1.0K) │ └─> 4 s 01/01 Branden Robinso (1.8K) │ └─> 5 01/01 Jim Gettys (0.6K) │ └─> 6 r 01/01 Keith Packard (0.6K) │ └─> 7 s 01/01 Branden Robinso (2.0K) │ ├─> 8 01/02 Keith Packard (0.7K) │ │ └─> 9 01/01 Thomas Dickey (1.1K) │ ├─> 10 01/01 David Dawes (1.4K) │ └─> 11 r 01/01 David Dawes (0.7K) └─> 12 r 01/01 David Dawes (1.9K) └─> -> 13 01/01 Thomas Dickey (3.0K) └─>
This message from David Dawes takes the various responses into account:
Date: Tue, 1 Jan 2002 16:30:46 -0500 From: David Dawes <dawes@tungstengraphics.com> To: devel@xfree86.org Subject: Re: xterm-164-current.patch On Tue, Jan 01, 2002 at 12:16:04PM -0800, Keith Packard wrote: >Around 11 o'clock on Jan 1, Jim Gettys wrote: > >> So the copyright date should probably be 1984, rather than 1989! >> (unless the file has actually been entirely rewritten). > >Any substative changes would add a later year to that; one would expect a >copyright range of 1984 through 199x. I suspect what was done, however, >was to re-copyright the entire distribution with the year the license was >fixed, and previously when the copyright was moved from the X Consortium, >Inc. to The Open Group. I doubt the date change in either of those cases >was valid. I think that the main issue from our point of view is to not add copyright date updates to files for which we didn't incorporate any associated code updates. A lot of copyright notices were updated recently as part of a resync with X11R6.6. In most cases this was little more than reverting them to the pre-R6.4 form so that the notices in the files match the actual licensing terms. As Tom has noted, there were some unintended side-effects, and we should fix them. David -- David Dawes Email: dawes@tungstengraphics.com
While I do not know what changes were made through the XFree86 source-tree, in xterm, I noted the “resync” and established my policy to not “update” copyright notices when no substantiative changes were made. That was mentioned in the announcement of patch #165:
update language of copyrights in some files to reflect the fact that they were reassigned from X Consortium to The Open Group in 1998. Note that this xterm source is derived from the 1996 version from X Consortium, does not incorporate changes made by X Consortium or The Open Group after that date, hence we do not add The Open Group's 1998 copyright date to related files.
At the time I let stand the simple renaming of X Consortium to The Open Group where no change of copyright date was made, but in writing this, I made a to-do item to repair those as well.
Worse than manipulating dates is simply removing a copyright notice or pretending that the people who applied it had no right to do so.
For the former, there is an example in the ncurses FAQ. Someone copied one of ncurses's files, removing the copyright notice, and made a minor change without realizing that the program supported the feature they wanted without the change, and added a GPL notice to the code to replace the MIT-X11 notice removed. That provided a good example of the feature for the FAQ.
If their change had been useful, it would not have been used in ncurses due to the licensing restrictions.
The latter also is mentioned in the ncurses FAQ:
Early in 1995, Eric Raymond obtained a copy of the
terminfo files from SCO's ftp site.
For reference, I have these:
-r--r--r-- 1 tom users 329968 Mar 7 1996 sco.terminfo.src -r--r--r-- 1 tom users 19744 Mar 7 1996 terminfo.lp -r--r--r-- 1 tom users 327360 Mar 7 1996 terminfo.src
Raymond proceeded to merge chunks from this terminfo file with a terminfo file which was translated from the 4.4BSD termcap file. The process took a few months:
# 9.4.0 (Sat Feb 25 16:43:25 EST 1995): # * New mt70 entry. # * Added COPYRIGHTS AND OTHER DELUSIONS. # * Added AT&T 23xx & 500/513, vt220 and vt420, opus3n1+, netronics # smartvid & smarterm, ampex 175 & 219 & 232,
but details are lacking. I have 14 versions from 1995 in my archives.
Most of those deal with copying material from SCO and resolving differences against 4.4BSD's termcap. The earliest of those versions (from April 7) has little of the followup done according to the changelog, making it suitable for detailed comparisons.
Raymond denied that SCO had a right to copyright this work:
# COPYRIGHTS AND OTHER DELUSIONS # # The BSD ancestor of this file had a standard Regents of the University of # California copyright with dates from 1980 to 1993. # # Some information has been merged in from a terminfo file SCO distributes. # It has an obnoxious boilerplate copyright which I'm ignoring because they # took so much of the content from the ancestral BSD versions of this file # and didn't attribute it, thereby violating the BSD Regents' copyright.
In addition to ignoring it, Raymond did not quote it. Here is the license, which gives some dates:
# Copyright (C) 1984-1991 The Santa Cruz Operation, Inc. # All Rights Reserved. # The information in this file is provided for the exclusive use of # the licensees of The Santa Cruz Operation, Inc. Such users have the # right to use, modify, and incorporate this code into other products # for purposes authorized by the license agreement provided they include # this notice and the associated copyright notice with any such product. # The information in this file is provided "AS IS" without warranty. # # UNIX is a registered trademark of AT&T # Portions Copyright 1976-1989 AT&T # Portions Copyright 1980-1989 Microsoft Corporation # Portions Copyright 1984-1991 The Santa Cruz Operation, Inc # All Rights Reserved
Both AT&T and SCO have some relationship to this discussion. SCO owned the file, but AT&T (see below) has a known role in its development. The amount that any of the copyright owners contributed is not known, but perhaps not relevant.
The cited dates in these licenses, by the way, are only a hint because not everyone follows the rule that copyright dates match modification dates. The CSRG information can be checked, with some effort in Jonathan Gray's repository.
The facts do not support Raymond's statement. I noticed this long after:
While working on tctest, I collected samples of the termcap files from the different BSD releases from the CSRG CDROMs.
4.2BSD did not have a copyright notice.
There are some copyright notices in 4.2BSD, but not
on the termcap file.
The word “copyright” appears 642 times in 4.2BSD
/usr/src
, 3742 times in 4.3BSD, so overlooking
termcap was not an isolated issue.
Without the BSD copyright, this paragraph from the Copyright Office's circular applies:
The work was registered before or within five years after the publication without notice and a reasonable effort was made to add notice to all copies or phonorecords distributed in the United States after the omission was discovered;
along with this comment
In general, for works first published before March 1, 1989, the copyright owner was required to place an effective notice on all publicly distributed “visually perceptible” copies.
I know that the SCO terminfo was derived from the 4.2BSD file because I happened to notice that it used a description with a flaw (the same in SCO and 4.2BSD) which was fixed in 4.3BSD, while answering a question Unable to turn off automatic margins by termcap in Mac.
The problem with the description was that although it had a boolean setting asserting that automargins were turned off, it lacked an initialization string to do that. Lacking the string, it inherited an initialization string which turned automargins on.
Apparently no one used that description since it had been
wrong in ncurses
since Raymond copied it from the SCO file in 1995.
I corrected it in ncurses in October 2016.
I had this in mind later when a bug report by Robert King caused me to reinvestigate this detail. In my reply Re: Obsolete smir/rmir sequences for ansi-generic? on the mailing list, I commented
The usage in hft appeared in 4.4BSD, but not in the earlier sources which I have at hand. A different hft (see below) appeared in 4.3BSD, but not in 4.2BSD (which was the point at which AT&T/SCO forked terminfo).
That is, rather than being a direct descendent of current BSD releases as Raymond stated, AT&T/SCO had forked off into their own line of development about ten years before.
How AT&T/SCO forked terminfo seems to be one of those historical accidents. According to a InfoWorld article published December 19, 1989 (which I have transcribed here), AT&T paid Berkeley to create a terminfo from the latter's termcap:
AT&T stepped into the picture three years ago, commissioning the University of California, Berkeley to develop Terminfo, thinking that everyone could standardize upon it.
That is, the work was done in 1986, i.e., part of SVr3 (released in 1987). The copyright notice mentioning 1984 refers to SVr2 (released in April 1984). Because AT&T already had a library, they would have contracted that work to extend the database.
Since 4.3BSD was released in June 1986, and 4.2BSD was released in August 1983, it is plausible that the contract with Berkeley was referring to the older 4.2BSD release's termcap file (since that was a known thing), rather than the newly released 4.3BSD termcap file.
In writing this, I checked a Solaris 10 machine; it likewise has the “vt100 no-automargin” terminal description enabling automargins rather than disabling them.
To quantify the differences, I wrote a script using
infocmp's
“-F
” option to compare the files,
and produce a report showing the number of unchanged,
changed, added and removed terminal descriptions.
The number of changed entries between the 4.2BSD and SCO (and Raymond) files was about 30% less than the same measure of change relative to the 4.3BSD, 4.4BSD files. That is, the SCO file is measurably closer to 4.2BSD than 4.3BSD, etc.
I happened to have a Solaris termcap file (from 1993), and interestingly enough, it was equidistant from 4.2BSD (and SCO) versus 4.3BSD using this measure.
Some readers may be unaware that the contracted work to translate termcap to terminfo is not purely mechanical, lacking expression, etc., and thus undeserving of copyright. As I point out in the header, half of the content of the terminfo source-file is commentary. Raymond copied that information from the SCO file, along with information from other sources.
The structure of the file also demonstrates creative effect, e.g., the building-blocks reused in many entries. For example, I asked in 1995 about klone+color, to which Raymond repled that it was something that “we” do to simplify reuse. From the way Raymond worded his reply, I understood that he was asserting that he was the author of that material. In fact, it came from the SCO file.
Beyond commentary and structure, the format of the file demonstrates creative effort (an aspect in which the BSD termcap files fall short). The SCO file used whitespace to make complex entries for color terminals more readable. Here are extracts for discussion:
Automatically formatting thousands of terminal descriptions is harder than you might suppose. In 1986 there probably were no tools. In 1995, Raymond had begun adapting Ross Ridge's mytinfo to mechanically translate between the two, but this work was incomplete. Raymond mentioned scripts to help with the task (which were never published). As a result, there were a few problems. If you look closely, there are errors in both the SCO file and Raymond's version:
"sco-sample-terminfo.ti", line 172, terminal 'wy370': wy370: %4 without %? in setb "sco-sample-terminfo.ti", line 172, terminal 'wy370': wy370: %1 without %? in setb
Raymond noticed those and fixed the problems.
I added the checks as part of the formatting option
(-f
) to tic, having
in mind those manually-formatted entries:
Because tic has to work with more than just the ANSI-style strings shown in these examples, it is not possible to know a good place to wrap lines.
The person who formatted those color-capabilities had to do that manually, i.e., it was not a rote, mechanical process.
Raymond's initial file mechanically (and with some problems) transformed those into very long lines.
For presentation purposes, your web browser may show the lines wrapping at 100 characters, but in the original file they are not wrapped. One line has 578 characters.
Since Raymond did not copy the formatting aspect of the SCO file, he did not copy all of the original work. But one can certainly (mechanically) compare the original and Raymond's copy.
The AT&T and Berkeley people undoubtedly discussed the content of the material developed under contract. Raymond's copying from that work was copyright infringement, which the owners of the copyright could have complained about — up to the statutory limit of three years. That time limit expired just before we released ncurses 4.2 in March 1998.
That is one example of copyright infringement, which some people may confuse with plagiarism. The two are quite distinct. There is no statute of limitations for plagiarism (nor should there be). You may find these interesting to read:
Back to the beginning, regarding whether it is necessary to mark every file, a few examples come to mind. In these cases, a developer copied all of the source code, omitting the change history and descriptive material, made minor changes, and reported their changes in a way which was designed to pretend that the elided change history was of less importance. Arguably that crosses the line into plagiarism:
You may find those examples useful when considering how to document your work.