Hi, On Fri, Nov 13, 2015 at 10:51:11AM -0800, Steve Langasek wrote: ... > It is important to list all copyright holders; this is not something that > it's "easy enough" to look up in the source, because many of these free > software licenses require that you reproduce the copyright statement > whenever you distribute binaries. > > 2. Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in the > documentation and/or other materials provided with the distribution. > > (/usr/share/common-licenses/BSD) > > > To avoid accidental failures to comply with such license terms, Debian > policy requires that *all* packages include the copyright information.
Please note one type of de-facto exception which is not documented but widely accepted. FTP master has accepted such packages with the GNU permissive type license on autotools generated files. I see almost no one follow the rule literary on these files. They are slightly different files to files and are nothing but noise for then purpose we use debian/copyright if we pedantically list them. In normal usage of the debmake parogram now, it drops all GNU permissive license listing for autotools generated files. > And if we want the debian/copyright file to be readable afterwards, the > tools are going to need to make some smart decisions about grouping of > copyright stanzas, and not just list one for each (license, copyright > holders, copyright dates) tuple. That's done and simple. Spaces and line breaks does not affect the grouping. Tough part is when you see multiple copyright like text apears on the file, what to do. iThis involves judgement and huristics when to give up and which file to skip for scanning. A large translation dictionary text file with a word "copyright" listed next to "著作権, 版権" may cause false positive. (I encounterd such file). > As an example of what I mean by "smart" groupings, I offer up the > debian/copyright of edk2, attached. Unfortunately, I had to craft this > monster by hand; and there are no tools to validate that it remains > correct[1] after updating to new upstream releases. > > Having a machine-readable copyright format is only the first step. If I > ever get a round tuit, my goals are: > > - a stand-alone tool that can generate a debian/copyright (with "smart" > stanza grouping) from the output of licensecheck Currently, I recommend to use debmake to make a nice initial template copyright file and also check problematic non-free license with licensecheck. Then human manual work. > - a standard format for hinting this tool in the debian directory when the > answers licensecheck detects by inspecting the source are inaccurate This is interesting idea. > - a stand-alone tool that can compare any two machine-readable copyright > files and a given source tree and tell you whether they are equivalent "debmake -k" checks current source against existing debian/copyright (It allow slightly different words such as name of organization to be changed ...) > The last is key, because it gives us automation around making sure > debian/copyright is accurate and stays accurate. Yes. And focus should be non-free detection and incompatible license mixture. So we should not bother too much on permissive license like the GNU permissive ones for autotools generated files. Just for fun, I checked edk2 ;-) I think some ISC license files are labeled as BSD-4-clause. They are human errors. But debmake makes more mistakes than human. Hmmm.. debmake needs to improve on Intel-Fat-Driver license. Hmmm... public domain is also non optimal result although file has text "This file is in the public domain,". - BSD-4-clause + BSD-4-Clause-UC This difference comes from the pedantic SPDX-ism I use. http://spdx.org/licenses/ Hmmm... SPDX seems to be updated. That laso needs to be addressed. I don't know how precise we classify. $ debmake -k ... === debian/copyright checked for 12165 data === Pattern #00: * File: StdLib/LibC/Time/tzfile.h StdLib/LibC/Time/ZoneProc.c StdLib/LibC/Time/Time.c StdLib/LibC/Time/TimeVals.h - BSD-2-clause + Public domain Pattern #38: FatBinPkg/* File: FatBinPkg/License.txt - Intel-Fat-Driver + BSD-3-Clause Pattern #39: FatPkg/* File: FatPkg/FatPkg.dsc FatPkg/FatPkg.dec FatPkg/License.txt FatPkg/FatPei/FatPei.inf FatPkg/EnhancedFatDxe/Fat.inf - Intel-Fat-Driver + BSD-3-Clause Pattern #116: StdLib/LibC/Time/strftime.c File: StdLib/LibC/Time/strftime.c - BSD-4-clause + BSD-4-Clause-UC Pattern #118: StdLib/LibC/String/strsep.c File: StdLib/LibC/String/strsep.c - BSD-4-clause + BSD-4-Clause-UC Pattern #127: StdLib/LibC/Stdio/vswscanf.c File: StdLib/LibC/Stdio/vswscanf.c - BSD-4-clause + BSD-4-Clause-UC Pattern #130: StdLib/Include/sys/* File: StdLib/Include/sys/ansi.h StdLib/Include/sys/EfiCdefs.h StdLib/Include/sys/dirent.h StdLib/Include/sys/endian.h StdLib/Include/sys/wait.h StdLib/Include/sys/time.h StdLib/Include/sys/stat.h StdLib/Include/sys/types.h StdLib/Include/sys/ieee754.h StdLib/Include/sys/select.h StdLib/Include/sys/fd_set.h StdLib/Include/sys/param.h StdLib/Include/sys/fcntl.h StdLib/Include/sys/ioccom.h StdLib/Include/sys/resource.h StdLib/Include/sys/uio.h StdLib/Include/sys/sigtypes.h - BSD-4-clause + BSD-3-Clause Pattern #130: StdLib/Include/sys/* File: StdLib/Include/sys/file.h - BSD-4-clause + BSD-4-Clause-UC Pattern #131: StdLib/Include/x86/ieee.h File: StdLib/Include/x86/ieee.h - BSD-4-clause + BSD-3-Clause Pattern #132: StdLib/Include/x86/ieee.h File: StdLib/Include/x86/ieee.h - BSD-4-clause + BSD-3-Clause Pattern #144: StdLib/Include/net/* File: StdLib/Include/net/radix.h StdLib/Include/net/route.h StdLib/Include/net/if_dl.h StdLib/Include/net/if.h - BSD-4-clause + BSD-4-Clause-UC Pattern #146: StdLib/Include/arpa/telnet.h File: StdLib/Include/arpa/telnet.h - BSD-4-clause + BSD-4-Clause-UC Pattern #147: StdLib/Include/arpa/nameser_compat.h File: StdLib/Include/arpa/nameser_compat.h - BSD-4-clause + BSD-4-Clause-UC Pattern #148: StdLib/Include/arpa/ftp.h File: StdLib/Include/arpa/ftp.h - BSD-4-clause + BSD-4-Clause-UC Pattern #150: StdLib/Include/netinet/in_systm.h File: StdLib/Include/netinet/in_systm.h - BSD-4-clause + BSD-4-Clause-UC Pattern #156: StdLib/Include/resolv.h File: StdLib/Include/resolv.h - BSD-4-clause + BSD-4-Clause-UC Pattern #157: StdLib/Include/netns/ns.h File: StdLib/Include/netns/ns.h - BSD-4-clause + BSD-4-Clause-UC Pattern #161: StdLib/BsdSocketLib/inet_net_pton.c File: StdLib/BsdSocketLib/inet_net_pton.c - BSD-4-clause + ISC Pattern #162: StdLib/BsdSocketLib/res_*.c File: StdLib/BsdSocketLib/res_update.c StdLib/BsdSocketLib/res_mkupdate.c - BSD-4-clause + ISC Pattern #164: StdLib/BsdSocketLib/ns_*.c File: StdLib/BsdSocketLib/ns_ntoa.c - BSD-4-clause + BSD-4-Clause-UC Pattern #164: StdLib/BsdSocketLib/ns_*.c File: StdLib/BsdSocketLib/ns_ttl.c StdLib/BsdSocketLib/ns_print.c StdLib/BsdSocketLib/ns_name.c - BSD-4-clause + ISC Pattern #165: StdLib/BsdSocketLib/getnetbyht.c File: StdLib/BsdSocketLib/getnetbyht.c - BSD-4-clause + BSD-4-Clause-UC Pattern #166: StdLib/BsdSocketLib/getproto.c File: StdLib/BsdSocketLib/getproto.c - BSD-4-clause + BSD-4-Clause-UC Pattern #168: StdLib/BsdSocketLib/gethostbydns.c File: StdLib/BsdSocketLib/gethostbydns.c - BSD-4-clause + BSD-4-Clause-UC Pattern #170: StdLib/BsdSocketLib/getprotoname.c File: StdLib/BsdSocketLib/getprotoname.c - BSD-4-clause + BSD-4-Clause-UC Pattern #171: StdLib/BsdSocketLib/inet_neta.c File: StdLib/BsdSocketLib/inet_neta.c - BSD-4-clause + ISC Pattern #172: StdLib/BsdSocketLib/getservbyport.c File: StdLib/BsdSocketLib/getservbyport.c - BSD-4-clause + BSD-4-Clause-UC Pattern #173: StdLib/BsdSocketLib/inet_pton.c File: StdLib/BsdSocketLib/inet_pton.c - BSD-4-clause + ISC Pattern #174: StdLib/BsdSocketLib/getservent.c File: StdLib/BsdSocketLib/getservent.c - BSD-4-clause + BSD-4-Clause-UC Pattern #176: StdLib/BsdSocketLib/getservbyname.c File: StdLib/BsdSocketLib/getservbyname.c - BSD-4-clause + BSD-4-Clause-UC Pattern #178: StdLib/BsdSocketLib/getprotoent.c File: StdLib/BsdSocketLib/getprotoent.c - BSD-4-clause + BSD-4-Clause-UC Osamu