summaryrefslogtreecommitdiff
blob: b2b5bf2ec4a26ffb2519150490f9d3d604f63996 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
---
GLEP: 23
Title: Handling of ACCEPT_LICENSE
Author: Jason Stubbs <jstubbs@gentoo.org>,
        Marius Mauch <genone@gentoo.org>
Type: Standards Track
Status: Final
Version: 1
Created: 2004-03-09
Last-Modified: 2016-06-23
Post-History: 2004-03-08, 2004-03-10, 2004-10-25, 2006-11-18, 2006-11-21
Content-Type: text/x-rst
---


Status Update
=============

Repoman has been updated to check for the LICENSE syntax.  Portage now handles
ACCEPT_LICENSE and license groups, with NON-MUST-HAVE-READ's role handled
by @EULA.  Marking as Final as of 2014-01-16.

Abstract
========

Currently, every ebuild in the main Gentoo repository is required to have a
valid LICENSE entry.  However, the syntax of this entry is not officially 
defined and the entry itself is only used when outputting package 
details.

Motivation
==========

Many users wish to regulate the software they install with regards to 
licenses for various reasons [1]_.  Some want a system free of any 
software that is not OSI-approved; others are simply curious as to what 
licenses they are implicitly accepting.

Furthermore, some software requires that a user interactively accept its 
license for its author's to consider it legally binding.  This is 
currently implemented using ``eutils.eclass``.


Specification
=============

Ebuild LICENSE Variable
-----------------------

Most ebuilds are for software which is released under a single license.  
In these cases, the current LICENSE variable can remain as is.  For 
example:

::

	LICENSE="single-license"

However, there are several ebuilds for software which is released under 
several licenses, of which the user must accept one, some or all [2]_.  
To complicate this, some ebuilds include optional components which fall 
under a different license.

To accommodate these cases, LICENSE syntax should accommodate all
functionality offered by a DEPEND string.  To keep things simple, this 
GLEP proposes that the syntax be identical.  For example:

::

	LICENSE="mandatory-license
	    || ( choosable-licence1 chooseable-license-2 )
	    useflag? ( optional-component-license )"


License names may contain [a-zA-Z0-9] (english alphanumeric characters),
_ (underscore), - (hyphen), . (dot) and + (plus sign).  They must not
begin with a hyphen, a dot or a plus sign.

License Groups
--------------

Almost all users are willing to install any software that is 
FSF-approved.  Other users are willing to install any software and 
implicitly accept its license.  To this end, implementations will also 
need to handle grouping of licenses.

At a minimum, there needs to be the groups ``GPL-COMPATIBLE``, 
``FSF-APPROVED``, ``OSI-APPROVED`` and ``NON-MUST-HAVE-READ``.  
``NON-MUST-HAVE-READ`` licenses are those that don't require manual 
acceptance for to be considered legally binding.  This is the current 
behaviour of portage.

These groups are defined in a new file ``license_groups`` in 
the ``profiles`` subdirectory of the tree (or overlays).
Details of handling groups defined in overlays is implementation dependent.

The format of this file is

::
	
	<groupname> <license1> <license2> ... <licenseN>

Also any line starting with # is ignored and may be used for comments.
Group names use the same syntax as normal license names. Also license groups 
may contain other groups.
License groups may not contain negated elements, so a group

::
	
	mygroup foo -bar -bla

is illegal.


ACCEPT_LICENSE
--------------

This GLEP proposes that a user be able to explicitly accept or decline 
licenses by editing a new variable ``ACCEPT_LICENSE`` in 
``/etc/make.conf``.  Again, to keep things simple, the syntax should be 
similar to that of other incrementals.  For example:

::

	ACCEPT_LICENSE="-* accepted-license -declined-license"

As an extension, ``ACCEPT_LICENSE`` must also support `license groups`_.  
This GLEP proposes that the license group be prepended by the special 
character "``@``".  For example:

::

	ACCEPT_LICENSE="-* @FSF-APPROVED"

License groups may be negated with the result that all elements of that group
are also negated.

Portage will also offer a package.license facility to offer this functionality
on a per-package base (analog to package.keywords), other implementations may
implement such a facility differently or not at all.

Behaviour
---------

Unaccepted licenses will be treated like any other masked package, that is
the user interface of an implementation will display a message listing any 
license that has to be accepted before the package can be merged with a 
pointer to the exact license text.

Past versions of this document proposed to handle license-masked packages
like blockers, but this would be inconsistent with other visibility 
filters as well as the current blocker system (as a blocker affects two 
packages) and be more complicated to implement.

Rationale
=========

An implementation of this proposal should make it easy for users wishing 
to regulate their software without affecting those that don't.


Reference Implementation
========================

Available in portage svn repository under main/branches/license-masking


Backwards Compatibility
=======================

There should be no change to the user experience without the user 
explicitly choosing to do so.  This mandates that the 
configuration variable be named ``ACCEPT_LICENSE`` as some users may 
already have it set due to ebuilds using ``eutil.eclass``'s 
implementation.  It also mandates that the default ``ACCEPT_LICENSE`` be 
set to ``@NON-MUST-HAVE-READ`` in the main Gentoo repository as implementations
are not required to provide an internal default.

References
==========

.. [1] Gentoo Linux Bug 17367
       (http://bugs.gentoo.org/show_bug.cgi?id=17367)
.. [2] Gentoo Linux Bug 34146 
       (http://bugs.gentoo.org/show_bug.cgi?id=34146)


Copyright
=========

This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
Unported License.  To view a copy of this license, visit
https://creativecommons.org/licenses/by-sa/3.0/.