[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: cdrtools - GPL code with CDDL build system



Sam Morris <sam@robots.org.uk> writes:

> Måns Rullgård wrote:
>> Flaming aside, this is a non-issue.  The source for cdrecord contains
>> invariant sections (those obnoxious "warnings" about using device
>> names), so it's certainly not DFSG-free.  Just use dvdrtools instead.
>
> Oh? How is it in main then?

A package being in main doesn't automatically mean that it should be
there.  Packages have been removed from main in the past.


These are the bits I'm referring to, from cdrecorc.c (sorry for the
long lines, but that's how it's written):

---BEGIN QUOTE---
	/*
	 * Begin restricted code for quality assurance.
	 *
	 * Warning: you are not allowed to modify or to remove the
	 * Copyright and version printing code below!
	 * See also GPL § 2 subclause c)
	 *
	 * If you modify cdrecord you need to include additional version
	 * printing code that:
	 *
	 *	-	Clearly states that the current version is an
	 *		inofficial (modified) version and thus may have bugs
	 *		that are not present in the original.
	 *
	 *	-	Print your support e-mail address and tell people that
	 *		you will do complete support for this version of
	 *		cdrecord.
	 *
	 *		Or clearly state that there is absolutely no support
	 *		for the modified version you did create.
	 *
	 *	-	Tell the users not to ask the original author for
	 *		help.
	 *
	 * This limitation definitely also applies when you use any other
	 * cdrecord release together with libscg-0.6 or later, or when you
	 * use any amount of code from cdrecord-1.11a17 or later.
	 * In fact, it applies to any version of cdrecord, see also
	 * GPL Preamble, subsection 6.
	 *
	 * I am sorry for the inconvenience but I am forced to do this because
	 * some people create inofficial branches. These branches create
	 * problems but the initiators do not give support and thus cause the
	 * development of the official cdrecord versions to slow down because
	 * I am loaded with unneeded work.
	 *
	 * Please note that this is a memorandum on how I interpret the GPL.
	 * If you use/modify/redistribute cdrecord, you need to accept it
	 * this way.
	 *
	 *
	 * The above statement is void if there has been neither a new version
	 * of cdrecord nor a new version of star from the original author
	 * within more then a year.
	 */

	/*
	 * Ugly, but Linux incude files violate POSIX and #define printf
	 * so we cannot include the #ifdef inside the printf() arg list.
	 */
#	define	PRODVD_TITLE	""
#ifdef	CLONE_WRITE
#	define	CLONE_TITLE	"-Clone"
#else
#	define	CLONE_TITLE	""
#endif
	if ((flags & F_MSINFO) == 0 || lverbose || flags & F_VERSION) {
		printf("Cdrecord%s%s %s (%s-%s-%s) Copyright (C) 1995-2004 Jörg Schilling\n",
								PRODVD_TITLE,
								CLONE_TITLE,
								cdr_version,
								HOST_CPU, HOST_VENDOR, HOST_OS);

#if	defined(SOURCE_MODIFIED) || !defined(IS_SCHILY_XCONFIG)
#define	INSERT_YOUR_EMAIL_ADDRESS_HERE
#define	NO_SUPPORT	0
		printf("NOTE: this version of cdrecord is an inofficial (modified) release of cdrecord\n");
		printf("      and thus may have bugs that are not present in the original version.\n");
#if	NO_SUPPORT
		printf("      The author of the modifications decided not to provide a support e-mail\n");
		printf("      address so there is absolutely no support for this version.\n");
#else
		printf("      Please send bug reports and support requests to <%s>.\n", INSERT_YOUR_EMAIL_ADDRESS_HERE);
#endif
		printf("      The original author should not be bothered with problems of this version.\n");
		printf("\n");
#endif
#if	!defined(IS_SCHILY_XCONFIG)
		printf("\nWarning: This version of cdrecord has not been configured via the standard\n");
		printf("autoconfiguration method of the Schily makefile system. There is a high risk\n");
		printf("that the code is not configured correctly and for this reason will not behave\n");
		printf("as expected.\n");
#endif
	}

	/*
	 * I am sorry that even for version 1.297 of cdrecord.c, I am forced to do
	 * things like this, but defective versions of cdrecord cause a lot of
	 * work load to me and it seems to be impossible to otherwise convince
	 * SuSE to cooperate.
	 * As people contact me and bother me with the related problems,
	 * it is obvious that SuSE is violating subsection 6 in the preamble of
	 * the GPL.
	 *
	 * The reason for including a test against SuSE's private
	 * distribution environment is only that SuSE violates the GPL for
	 * a long time and seems not to be willing to follow the requirements
	 * imposed by the GPL. If SuSE starts to ship non defective versions
	 * of cdrecord or informs their customers that they would need to
	 * compile cdrecord themselves in order to get a working cdrecord,
	 * they should contact me for a permission to change the related test.
	 *
	 * Note that although the SuSE test is effective only for SuSE, the
	 * intention to have non bastardized versions out is not limited
	 * to SuSE. It is bad to see that in special in the "Linux" business,
	 * companies prefer a model with many proprietary differing programs
	 * instead of cooperating with the program authors.
	 */
	linuxcheck();	/* For version 1.297 of cdrecord.c */

	if (flags & F_VERSION)
		exit(0);
	/*
	 * End restricted code for quality assurance.
	 */
---END QUOTE---

The linuxcheck() function can be found near the end of the same file:

---BEGIN QUOTE---
/*
 * I am sorry that even for version 1.297 of cdrecord.c, I am forced to do
 * things like this, but defective versions of cdrecord cause a lot of
 * work load to me and it seems to be impossible to otherwise convince
 * SuSE to cooperate.
 * As people contact me and bother me with the related problems,
 * it is obvious that SuSE is violating subsection 6 in the preamble of
 * the GPL.
 *
 * The reason for including a test against SuSE's private
 * distribution environment is only that SuSE violates the GPL for
 * a long time and seems not to be willing to follow the requirements
 * imposed by the GPL. If SuSE starts to ship non defective versions
 * of cdrecord or informs their customers that they would need to
 * compile cdrecord themselves in order to get a working cdrecord,
 * they should contact me for a permission to change the related test.
 *
 * Note that although the SuSE test is effective only for SuSE, the
 * intention to have non bastardized versions out is not limited
 * to SuSE. It is bad to see that in special in the "Linux" business,
 * companies prefer a model with many proprietary differing programs
 * instead of cooperating with the program authors.
 */
#if	defined(linux) || defined(__linux) || defined(__linux__)
#ifdef	HAVE_UNAME
#include <sys/utsname.h>
#endif
#endif

LOCAL void
linuxcheck()				/* For version 1.297 of cdrecord.c */
{
#if	defined(linux) || defined(__linux) || defined(__linux__)
#ifdef	HAVE_UNAME
	struct	utsname	un;

	if (uname(&un) >= 0) {
		/*
		 * I really hope that the Linux kernel developers will soon
		 * fix the most annoying bugs (as promised). Linux-2.6.8
		 * has still much more reported problems than Linux-2.4.
		 */
		if ((un.release[0] == '2' && un.release[1] == '.') &&
		    (un.release[2] == '5' || un.release[2] == '6')) {
			errmsgno(EX_BAD,
			"Warning: Running on Linux-%s\n", un.release);
			errmsgno(EX_BAD,
			"There are unsettled issues with Linux-2.5 and newer.\n");
			errmsgno(EX_BAD,
			"If you have unexpected problems, please try Linux-2.4 or Solaris.\n");
		}
		if ((un.release[0] == '2' && un.release[1] == '.') &&
		    (un.release[2] > '6' ||
		    (un.release[2] == '6' && un.release[3] == '.' && un.release[4] >= '8'))) {
			errmsgno(EX_BAD,
			"Warning: Linux-2.6.8 introduced incompatible interface changes.\n");
			errmsgno(EX_BAD,
			"Warning: SCSI transport does no longer work for suid root programs.\n");
			errmsgno(EX_BAD,
			"Warning: if cdrecord fails, try to run it from a root account.\n");
		}
	}
#endif
	if (streql(HOST_VENDOR, "suse")) { /* For version 1.297 of cdrecord.c */
/* 1.297 */	errmsgno(EX_BAD,
/* 1.297 */	"SuSE Linux is known to ship bastardized and defective versions of cdrecord.\n");
/* 1.297 */	errmsgno(EX_BAD,
/* 1.297 */	"SuSE is unwilling to cooperate with the authors.\n");
/* 1.297 */	errmsgno(EX_BAD,
/* 1.297 */	"If you like to have a working version of cdrtools, get the\n");
/* 1.297 */	errmsgno(EX_BAD,
/* 1.297 */	"original source from ftp://ftp.berlios.de/pub/cdrecord/\n";);

	}
#endif
}
---END QUOTE---

For completeness, here's GPL 2c:

---BEGIN QUOTE---
    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)
---END QUOTE---

Take note that cdrecord is never interactive, so GPL 2c doesn't apply.
I don't know why JS refers to it, but then JS does a lot of things
that nobody understands.

-- 
Måns Rullgård
mru@inprovide.com



Reply to: