need help with openscad's license

January 08th, 2012 - 03:40 pm ET by chrysn | Report spam



hello debian-legal,

as a part of my intent to package openscad (#583476), i want to ask you
for help with the package's licensing.

as outlined in the itp, the package is gpl-2+ itself and depends heavily
on libcgal, which is qpl and thus in non-free, which sends openscad to
contrib. openscad has a cgal exception on its license, and some time ago
i contacted its only gpl dependency's author, who re-licensed his
library to gpl-2+ with cgal exception too.

so far, so good.

now there is a very particular file in the openscad library,
src/OGL_helper.h. it is derived from an OGL_helper.h in cgal, which is
qpl licensed. i don't think that could bring anyone in trouble (qpl is
ok with being modified and linked against, and whoever brings gpl into
the end result had to agree to use parts of cgal anyway), but it's hard
to represent in the debian package.

i've come up with various ways, of which i'm not sure which will work or
which of the working is best:

* upstream author

both the openscad author and i have tried to contact the author of the
original OGL_helper.h file. if he agreed to dual-license it qpl and
gpl, we'd all be fine. the modified version could stay in openscad,
and there would be much rejoycing.

* technical solution

if the modifications could be split out from OGL_helper.h by means of
c++, we would still link against the qpl version statically, but we
wouldn't have to ship qpl source code in openscad and could rely on it
being provided by the non-free build dependency.

if it was trivial, the openscad authors would already have done it,
and my c++ fu is not strong enough for such a task.

now for the less elegant solutions...

* a patch

the debian package could contain a patch against the cgal version.
that would be more or less equivalent to the technical solution, but
far less elegant; plus, i wouldn't dare to judge the license situation
of the resulting intermediate file that gets created on the build
server.

* declaring openscad nonfree

we ship the qpl file, we are non-free. problem solved.


i am still working on the version of the package that is to be released
as 2011.12-1, a preliminary version of the copyright file is attached.
the other FIXME it contains (contrib/OpenSCAD.xml) will, as i hope, be
resolved by the file's author (who is active on the project's mailing
list).


do you know any other way out, or have other suggestions on how to solve
that?

regards
chrysn

I shouldn't have written all those tank programs.


Format: http://anonscm.debian.org/viewvc/de...vision=174
Upstream-Name: opencsg
Source: http://opencsg.org/

Files: *
Copyright: © 2009-2011 Clifford Wolf <clifford@clifford.at>, Marius Kintel <marius@kintel.net>
License: GPL-2+ with CGAL exception

Files: src/OGL_helper.h
Copyright: © 1997-2002 Max-Planck-Institute Saarbruecken (Germany)
License: QPL
FIXME: original author has been contacted for gpl dual-licensing (this contains patches for openscad)

Files: src/cache.h
Copyright: © 2009-2011 Clifford Wolf <clifford@clifford.at>, Marius Kintel <marius@kintel.net>, 2010 Nokia Corporation and/or its subsidiary(-ies)
License: QtCommercial or LGPL-2.1 with some exception or GPL-3

Files: scripts/googlecode_upload.py
Copyright: 2006-2007 Google Inc.
License: Apache

Files: contrib/scad.el
Copyright: 2010-2011 Len Trigg <lenbok@gmail.com>
License: GPL-2+

Files: contrib/OpenSCAD.xml
Copyright: 2011 tjhowse <tjhowse@gmail.com>
License: FIXME
check this

Files: tests/lodepng.*
Copyright: 2005-2011 Lode Vandevenne
License:
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
.
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
.
3. This notice may not be removed or altered from any source
distribution.

File: tests/OffscreenContextGLX.cc
Copyright: 1999-2001 Brian Paul
License: X11

File: tests/test_pretty_print.py
Copyright: 2011 Don Bright <hugh.m.bright@gmail.com>
License: GPL-2+

Files: debian/*
Copyright: © 2010-2011 Christian M. Amsüss <chrysn@fsfe.org>
License: GPL-2+ with CGAL exception

License: GPL-2+ with CGAL exception
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.
.
As a special exception, you have permission to link this program
with the CGAL library and distribute executables, as long as you
follow the requirements of the GNU GPL in regard to all of the
software in the executable aside from CGAL.
.
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.
.
A copy of the GNU General Public License can be found in
/usr/share/common-licenses/GPL-2.

License: QPL
FIXME: we can't ship this in this tarball anyway w/o making it nonfree

License: Apache
Licensed under the terms of the Apache Software License 2.0:
http://www.apache.org/licenses/LICENSE-2.0
.
A copy of the Apache 2.0 License can be found in
/usr/share/common-licenses/Apache-2.0.

License: X11
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:
.
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
.
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
BRIAN PAUL 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.

License: QtCommercial
Licensees holding valid Qt Commercial licenses may use this file in
accordance with the Qt Commercial License Agreement provided with the
Software or, alternatively, in accordance with the terms contained in
a written agreement between you and Nokia.
Comment: This license is non-free, but only used in dual-licensing with free
licenses.

License: LGPL-2.1 with some exception
Alternatively, this file may be used under the terms of the GNU Lesser
General Public License version 2.1 as published by the Free Software
Foundation and appearing in the file LICENSE.LGPL included in the
packaging of this file. Please review the following information to
ensure the GNU Lesser General Public License version 2.1 requirements
will be met: http://www.gnu.org/licenses/old-lic...-2.1.html.
.
In addition, as a special exception, Nokia gives you certain additional
rights. These rights are described in the Nokia Qt LGPL Exception
version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
FIXME: The LGPL_EXCEPTION.txt is not shipped upstream. As it only affects
"certain rights" (which we don't need), no further action was taken to
determine what it is about exactly.

License: GPL-3
Alternatively, this file may be used under the terms of the GNU
General Public License version 3.0 as published by the Free Software
Foundation and appearing in the file LICENSE.GPL included in the
packaging of this file. Please review the following information to
ensure the GNU General Public License version 3.0 requirements will be
met: http://www.gnu.org/copyleft/gpl.html.
.
A copy of the GNU General Public License can be found in
/usr/share/common-licenses/GPL-3.






To UNSUBSCRIBE, email to debian-legal-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: http://lists.debian.org/20120108202238.GA2668@hephaistos.amsuess.com
email Follow the discussionReplies 4 repliesReplies Make a reply

Similar topics

Replies

#1 Francesco Poli
January 08th, 2012 - 04:30 pm ET | Report spam

On Sun, 8 Jan 2012 21:22:38 +0100 chrysn wrote:

hello debian-legal,



Hello chrysn!


as a part of my intent to package openscad (#583476), i want to ask you
for help with the package's licensing.



Thanks for trying hard to solve this issue in the best possible way.


as outlined in the itp, the package is gpl-2+ itself and depends heavily
on libcgal, which is qpl and thus in non-free, which sends openscad to
contrib.



Have you tried to persuade libcgal copyright holder(s) to re-license
libcgal under the GNU GPL v2 or later, or under the GNU LGPL v2.1, or,
at least, to dual-license it under the QPL and one GPLv2-compatible
license?
This much more radical approach could make openscad suitable for
inclusion in Debian main!
Now *that* would be something really worth fighting for! ;-)

[...]
License: GPL-2+ with CGAL exception
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.
.
As a special exception, you have permission to link this program
with the CGAL library and distribute executables, as long as you
follow the requirements of the GNU GPL in regard to all of the
software in the executable aside from CGAL.
.
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.
.
A copy of the GNU General Public License can be found in
/usr/share/common-licenses/GPL-2.



This CGAL-linking exception seems to be a bit incomplete.
Shouldn't there be also the permission to drop the exception?
Please see the phrasing recommended by the FSF for the GPL v2 + linking
exception:
http://www.gnu.org/licenses/gpl-faq...atibleLibs



http://www.inventati.org/frx/frx-gp...n-2010.txt
New GnuPG key, see the transition document!
. Francesco Poli .
GnuPG key fpr == CA01 1147 9CD2 EFDF FB82 3925 3E1C 27E1 1F69 BFFE





To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Archive: http://lists.debian.org/
Replies Reply to this message
#2 chrysn
January 08th, 2012 - 06:20 pm ET | Report spam

hello,

On Sun, Jan 08, 2012 at 10:22:39PM +0100, Francesco Poli wrote:
Have you tried to persuade libcgal copyright holder(s) to re-license
libcgal under the GNU GPL v2 or later, or under the GNU LGPL v2.1, or,
at least, to dual-license it under the QPL and one GPLv2-compatible
license?



i've checked the licensing situation and there have alreay been
approaches to convince them. the problem is, cgal is composed of
different modules by many different people, some of which are already
dfsg free, but others insist on sticking to qpl. asking them one at a
time with a particular problem at hand (like i try here) is probably the
best i can do.


> As a special exception, you have permission to link this program
> with the CGAL library and distribute executables, as long as you
> follow the requirements of the GNU GPL in regard to all of the
> software in the executable aside from CGAL.

This CGAL-linking exception seems to be a bit incomplete.
Shouldn't there be also the permission to drop the exception?
Please see the phrasing recommended by the FSF for the GPL v2 + linking
exception:
http://www.gnu.org/licenses/gpl-faq...atibleLibs



the wording follows exactly the wording recommended for a qpl exception
by the fsf[1]. the note on dropping it seems to be a good idea in case
some new library needs an exception,


thanks for your input
chrysn

[1] http://www.gnu.org/licenses/license...n.html#QPL

To use raw power is to make yourself infinitely vulnerable to greater powers.





To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Archive: http://lists.debian.org/
Replies Reply to this message
#3 Francesco Poli
January 09th, 2012 - 04:10 pm ET | Report spam

On Mon, 9 Jan 2012 00:17:39 +0100 chrysn wrote:

[...]
On Sun, Jan 08, 2012 at 10:22:39PM +0100, Francesco Poli wrote:
> Have you tried to persuade libcgal copyright holder(s) to re-license
> libcgal under the GNU GPL v2 or later, or under the GNU LGPL v2.1, or,
> at least, to dual-license it under the QPL and one GPLv2-compatible
> license?

i've checked the licensing situation and there have alreay been
approaches to convince them. the problem is, cgal is composed of
different modules by many different people, some of which are already
dfsg free, but others insist on sticking to qpl. asking them one at a
time with a particular problem at hand (like i try here) is probably the
best i can do.



I think the best thing you could do is really trying to persuade CGAL
copyright holders to re-license or dual-license under GPLv2-compatible
terms.
This strategy, if successful, would eliminate any necessity to add
linking exceptions to other GPL-licensed works that link with CGAL, and
a lot of people would be much happier.



> > As a special exception, you have permission to link this program
> > with the CGAL library and distribute executables, as long as you
> > follow the requirements of the GNU GPL in regard to all of the
> > software in the executable aside from CGAL.
>
> This CGAL-linking exception seems to be a bit incomplete.
> Shouldn't there be also the permission to drop the exception?
> Please see the phrasing recommended by the FSF for the GPL v2 + linking
> exception:
> http://www.gnu.org/licenses/gpl-faq...atibleLibs

the wording follows exactly the wording recommended for a qpl exception
by the fsf[1].



This is awkward, I hadn't noticed that recommendation.
It looks like the FSF is giving inconsistent advice on different
FAQs... :-/

Maybe someone should point out this inconsistency to the FSF, so that
it may be fixed.

the note on dropping it seems to be a good idea in case
some new library needs an exception,



I would say that it is useful in case the linking exception becomes
unneeded in the future, and, above all, it is important to let the
GPL + linking exception combination stay GPL-compatible...



thanks for your input



You're welcome!

chrysn

[1] http://www.gnu.org/licenses/license...n.html#QPL






http://www.inventati.org/frx/frx-gp...n-2010.txt
New GnuPG key, see the transition document!
. Francesco Poli .
GnuPG key fpr == CA01 1147 9CD2 EFDF FB82 3925 3E1C 27E1 1F69 BFFE





To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Archive: http://lists.debian.org/
Replies Reply to this message
#4 Walter Landry
January 11th, 2012 - 08:50 am ET | Report spam
-Next_Part(Wed_Jan_11_05_18_47_2012_893)--

chrysn wrote:
* technical solution

if the modifications could be split out from OGL_helper.h by means of
c++, we would still link against the qpl version statically, but we
wouldn't have to ship qpl source code in openscad and could rely on it
being provided by the non-free build dependency.

if it was trivial, the openscad authors would already have done it,
and my c++ fu is not strong enough for such a task.



My C++ fu felt strong. I am attaching a new version of
CGAL_renderer.h that seems to work with the version of cgal bundled
with Debian.

The only essential difference between openscad's and cgal's
OGL_helper.h header was that some member variables were made private.
So I used a C++ trick to make them accessible. There were also some
typedefs that I just spelled out manually.

This also has the benefit of not assuming that the layout of a class
stays the same when adding private: or protected: decorations.

Cheers,
Walter Landry



-Next_Part(Wed_Jan_11_05_18_47_2012_893)--

/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf and
* Marius Kintel
*
* 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.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* 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
*
*/

#ifndef CGAL_RENDERER_H
#define CGAL_RENDERER_H

#include <CGAL/Nef_3/OGL_helper.h>

#undef CGAL_NEF3_MARKED_VERTEX_COLOR
#undef CGAL_NEF3_MARKED_EDGE_COLOR
#undef CGAL_NEF3_MARKED_FACET_COLOR

#undef CGAL_NEF3_UNMARKED_VERTEX_COLOR
#undef CGAL_NEF3_UNMARKED_EDGE_COLOR
#undef CGAL_NEF3_UNMARKED_FACET_COLOR

using CGAL::OGL::SNC_BOUNDARY;
using CGAL::OGL::SNC_SKELETON;

// Originally from https://gist.github.com/1528856
// Modified to allow access two rather than one private member.
// This is needed because CGAL::OGL::Polyhedron has private members
// that we need access to.

// Generate a static data member of type Tag::type in which to store
// the address of a private member. It is crucial that Tag does not
// depend on the /value/ of the the stored address in any way so that
// we can access it from ordinary code without directly touching
// private data.
template <class Tag>
struct stowed
{
static typename Tag::style_type style;
static typename Tag::object_list_type object_list_;
};
template <class Tag>
typename Tag::style_type stowed<Tag>::style;
template <class Tag>
typename Tag::object_list_type stowed<Tag>::object_list_;

// Generate a static data member whose constructor initializes
// stowed<Tag>::value. This type will only be named in an explicit
// instantiation, where it is legal to pass the address of a private
// member.
template <class Tag, typename Tag::style_type Style, typename Tag::object_list_type Object_list_>
struct stow_private
{
stow_private()
{
stowed<Tag>::style = Style;
stowed<Tag>::object_list_ = Object_list_;

}
static stow_private instance;
};

template <class Tag, typename Tag::style_type Style, typename Tag::object_list_type Object_list_>
stow_private<Tag,Style,Object_list_>
stow_private<Tag,Style,Object_list_>::instance;


struct Polyhedron_private
{
typedef int(CGAL::OGL::Polyhedron::*style_type);
typedef GLuint(CGAL::OGL::Polyhedron::*object_list_type);
};

// Explicit instantiation; the only place where it is legal to pass
// the address of a private member. Generates the static ::instance
// that in turn initializes stowed<Tag>::value.
template class stow_private<Polyhedron_private,&CGAL::OGL::Polyhedron::style,
&CGAL::OGL::Polyhedron::object_list_>;

class Polyhedron : public CGAL::OGL::Polyhedron
{
public:

enum RenderColor {
CGAL_NEF3_MARKED_VERTEX_COLOR,
CGAL_NEF3_MARKED_EDGE_COLOR,
CGAL_NEF3_MARKED_FACET_COLOR,
CGAL_NEF3_UNMARKED_VERTEX_COLOR,
CGAL_NEF3_UNMARKED_EDGE_COLOR,
CGAL_NEF3_UNMARKED_FACET_COLOR,
NUM_COLORS
};

Polyhedron() {
setColor(CGAL_NEF3_MARKED_VERTEX_COLOR,0xb7,0xe8,0x5c);
setColor(CGAL_NEF3_MARKED_EDGE_COLOR,0xab,0xd8,0x56);
setColor(CGAL_NEF3_MARKED_FACET_COLOR,0x9d,0xcb,0x51);
setColor(CGAL_NEF3_UNMARKED_VERTEX_COLOR,0xff,0xf6,0x7c);
setColor(CGAL_NEF3_UNMARKED_EDGE_COLOR,0xff,0xec,0x5e);
setColor(CGAL_NEF3_UNMARKED_FACET_COLOR,0xf9,0xd7,0x2c);
}

void draw(bool showedges) const {
if(this->*stowed<Polyhedron_private>::style == SNC_BOUNDARY) {
glCallList(this->*stowed<Polyhedron_private>::object_list_+2);
if(showedges) {
glDisable(GL_LIGHTING);
glCallList(this->*stowed<Polyhedron_private>::object_list_+1);
glCallList(this->*stowed<Polyhedron_private>::object_list_);
}
} else {
glDisable(GL_LIGHTING);
glCallList(this->*stowed<Polyhedron_private>::object_list_+1);
glCallList(this->*stowed<Polyhedron_private>::object_list_);
}
}
CGAL::Color getVertexColor(std::list<CGAL::OGL::DPoint>::const_iterator v) const {
CGAL::Color c = v->mark() ? colors[CGAL_NEF3_UNMARKED_VERTEX_COLOR] : colors[CGAL_NEF3_MARKED_VERTEX_COLOR];
return c;
}

CGAL::Color getEdgeColor(std::list<CGAL::OGL::DSegment>::const_iterator e) const {
CGAL::Color c = e->mark() ? colors[CGAL_NEF3_UNMARKED_EDGE_COLOR] : colors[CGAL_NEF3_MARKED_EDGE_COLOR];
return c;
}

CGAL::Color getFacetColor(std::list<CGAL::OGL::DFacet>::const_iterator f) const {
CGAL::Color c = f->mark() ? colors[CGAL_NEF3_UNMARKED_FACET_COLOR] : colors[CGAL_NEF3_MARKED_FACET_COLOR];
return c;
}

void setColor(Polyhedron::RenderColor color_index,
unsigned char r, unsigned char g, unsigned char b) {
assert(color_index < Polyhedron::NUM_COLORS);
this->colors[color_index] = CGAL::Color(r,g,b);
}
private:
CGAL::Color colors[NUM_COLORS];

}; // Polyhedron

#endif // CGAL_RENDERER_H

-Next_Part(Wed_Jan_11_05_18_47_2012_893)-


To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Archive: http://lists.debian.org/
email Follow the discussion Replies Reply to this message
Help Create a new topicReplies Make a reply
Search Make your own search