Swap
Compare Revisions
Showing 90 commits
Ancestor: 26def8538a10
90 2018-09-26 17:31:16
bkuhn
a2d90d4b73ff master
Merge branch 'next' New section regarding GPLv2 Irrevocability is ready to go live.
89 2018-09-26 16:30:21
bkuhn
d7ff8bd6ff1f next
Additional connecting text for irrevocability discussion. A forward reference is added to connect to the irrevocability section, and one transition sentence added in the irrevocability section itself, since it's another "digression" from the walk-through of GPLv2 in these sections.
88 2018-09-26 16:30:21
Pamela Chestek
d2b784546039
More detail on Irrevocability of GPLv2 This section, fit in just after the detailed discussion of GPLv2 Section 6, explains in futher detail various arguments for why the GPLv2 is irrevocable.
87 2018-09-26 16:30:21
bkuhn
fcfe1bea4d0f
Remove UTF-8 apostrophe in favor of a LaTeX one.
86 2018-09-26 16:30:21
bkuhn
462a1dad97db
Fix build issues.
85 2018-09-26 16:30:21
bkuhn
0c4135115309
More slides for CCS examples from a long time ago.
84 2018-09-26 16:30:21
bkuhn
06e02e66fa03
A few sentences more for the next section.
83 2018-09-26 16:30:21
bkuhn
8be5affab968
first draft: completed Historical Background section
82 2018-09-26 16:30:21
bkuhn
a9a051378798
Began work in Introduction and Historical Background These are probably too long, but various parts of this may work as replacements for some of the older text in the larger tutorial.
81 2018-09-26 16:30:21
bkuhn
871a6447e6bc
GPL Installation Instructions Article: abstract This is my first draft at an abstract for this article. I suspect that this Abstract is too long, so I may move some it out into other text.
80 2018-09-26 16:30:21
bkuhn
1905e9f3aa8f
Various links.
79 2018-09-26 16:30:21
bkuhn
d1cd46589643
Presentations as prepared by Karen for OSCON 2017.
78 2018-09-26 16:30:21
bkuhn
d9260dfb6a87
Copy over build details and CC BY SA logo.
77 2018-09-26 16:30:21
bkuhn
8b4068996f4d
Change name to this presentation.
76 2018-09-26 16:30:21
bkuhn
d5daec79418d
Change Karen requested verbally.
75 2018-09-26 16:30:21
bkuhn
9e63f702b02e
Copy over install scripts and CC BY SA logo.
74 2018-09-26 16:30:21
bkuhn
61dfaa4e6bcf
Rename presentation to this one.
73 2018-09-26 16:30:21
bkuhn
8ea8b1135de7
Add Karen's name.
72 2018-09-26 16:30:21
bkuhn
e0c3ae433b1a
Change base name to the one in this presentation.
71 2018-09-26 16:30:21
bkuhn
6999e756976c
Various changes based on Karen's verbal comments.
70 2018-09-26 16:30:21
bkuhn
5326ee76ab1e
Copied over Makefile and CC BY SA logo.
69 2018-09-26 16:30:21
bkuhn
e90904a62791
Working Makefile installation.
68 2018-09-26 16:30:21
bkuhn
6c38adff6c8c
Karen corrected me on this term.
67 2018-09-26 16:30:21
bkuhn
962fc7b9aaf6
Add Karen's name.
66 2018-09-26 16:30:21
bkuhn
e00e9b305e25
Set up Makefile and add CC By SA logo.
65 2018-09-26 16:30:21
bkuhn
0860716fb187
Add copyright notice.
64 2018-09-26 16:30:21
bkuhn
72d37b38c5d0
Non-Copyright systems slide first draft.
63 2018-09-26 16:30:21
bkuhn
81f752510ae3
Links to related Guide sections.
62 2018-09-26 16:30:21
bkuhn
cbc2c4f08213
Add introduction slide.
61 2018-09-26 16:30:21
bkuhn
c281fff393e7
Remove extraneous material to just CCS examples.
60 2018-09-26 16:30:21
bkuhn
c1f10c3379e8
Larger presentation -> CCS report examples cp -pa presentations/2hr-GPL-compliance-focus/2hr-GPL.md presentations/ccs-report-examples/ccs-examples.md Plan to reduce this just to the CCS examples.
59 2018-09-26 16:30:21
bkuhn
0d17adcb1a64
correct date again.
58 2018-09-26 16:30:21
bkuhn
0c977a2d49d5
Make plural.
57 2018-09-26 16:30:21
bkuhn
ed9ca638e923
CD is not the primary shipped media these days.
56 2018-09-26 16:30:21
bkuhn
21a273aea321
Update date.
55 2018-09-26 16:30:21
bkuhn
82d46f8782fb
Reduce slides to only those introducing violations
54 2018-09-26 16:30:21
bkuhn
ed0b045c26f5
2hr compliance to select sides for violation intro cp -pa presentations/2hr-GPL-compliance-focus/2hr-GPL.md presentations/20min-violation-intro/violation-intro.md
53 2018-09-26 16:30:21
bkuhn
cee13b2be4e7
Add final slide with links to pertinent sections.
52 2018-09-26 16:30:21
bkuhn
079ce32bf0b4
Shorten length; include only section discussion Shorten this down to include discussion only of specific GPL sections.
51 2018-09-26 16:30:21
bkuhn
e670a6ed6caf
Copy 1hr-GPL.markdown to specific-sections.md cp 1hr-GPL/1hr-GPL.markdown 30min-specific-sections/specific-sections.md Start from the 1hr version to make a short version that talks about just a few specific sections of the GPL.
50 2018-09-25 23:33:40
bkuhn
76b1557c0dec
Document the One Rule for merging into master.
49 2018-09-25 23:33:40
bkuhn
0dd9826afdcf
Correct reference to wrong section.
48 2018-09-25 23:33:40
bkuhn
5ade052eff61
Note new commit bits given out to three others.
47 2018-09-25 23:33:40
bkuhn
1e393d014ec5
Would help online contributors send small changes? HT: Loïc Dachary <loic@dachary.org> ... who told me about this project.
46 2018-09-25 23:31:54
bkuhn
7c2266b9661f
Fix build issues.
45 2018-09-25 23:31:34
bkuhn
01d216401704
More slides for CCS examples from a long time ago.
44 2018-09-25 23:31:05
bkuhn
bdae945705b8
A few sentences more for the next section.
43 2018-07-02 14:04:26
bkuhn
f07e7d4716bd
first draft: completed Historical Background section
42 2018-06-19 05:06:22
bkuhn
b7ae80de4873
Began work in Introduction and Historical Background These are probably too long, but various parts of this may work as replacements for some of the older text in the larger tutorial.
41 2018-06-19 03:04:06
bkuhn
ad0696d1865d
GPL Installation Instructions Article: abstract This is my first draft at an abstract for this article. I suspect that this Abstract is too long, so I may move some it out into other text.
40 2017-05-09 16:38:55
bkuhn
4a26646df629
Various links.
39 2017-05-09 16:15:22
bkuhn
d3e5b8053518
Presentations as prepared by Karen for OSCON 2017.
38 2017-05-09 14:55:04
bkuhn
1b3e3f879121
Copy over build details and CC BY SA logo.
37 2017-05-09 14:52:15
bkuhn
9e66a996bd0e
Change name to this presentation.
36 2017-05-09 14:52:05
bkuhn
a504d9f0417c
Change Karen requested verbally.
35 2017-05-09 14:50:49
bkuhn
e8963927dce4
Copy over install scripts and CC BY SA logo.
34 2017-05-09 14:50:40
bkuhn
3bf344051146
Rename presentation to this one.
33 2017-05-09 14:49:46
bkuhn
64fdf604a13b
Add Karen's name.
32 2017-05-09 14:48:48
bkuhn
88f38214308d
Change base name to the one in this presentation.
31 2017-05-09 14:48:00
bkuhn
c53c74a02bd4
Various changes based on Karen's verbal comments.
30 2017-05-09 14:45:32
bkuhn
0f15eade4ada
Copied over Makefile and CC BY SA logo.
29 2017-05-09 14:40:33
bkuhn
489d24a49f57
Working Makefile installation.
28 2017-05-09 14:40:24
bkuhn
4d3566829d31
Karen corrected me on this term.
27 2017-05-09 14:40:19
bkuhn
922f7f4b87f7
Add Karen's name.
26 2017-05-09 14:24:11
bkuhn
0e6bd590b639
Set up Makefile and add CC By SA logo.
25 2017-05-09 14:23:42
bkuhn
f41608f4f2c3
Add copyright notice.
24 2017-05-09 13:57:02
bkuhn
3329223addbb
Non-Copyright systems slide first draft.
23 2017-05-09 13:22:08
bkuhn
c3c5265c96c8
Links to related Guide sections.
22 2017-05-09 13:12:38
bkuhn
490107d60b96
Add introduction slide.
21 2017-05-09 13:12:21
bkuhn
594a4f744dde
Remove extraneous material to just CCS examples.
20 2017-05-09 12:52:35
bkuhn
a002bf4681ae
Larger presentation -> CCS report examples cp -pa presentations/2hr-GPL-compliance-focus/2hr-GPL.md presentations/ccs-report-examples/ccs-examples.md Plan to reduce this just to the CCS examples.
19 2017-05-09 12:41:30
bkuhn
b5c77f2ede00
correct date again.
18 2017-05-09 12:39:53
bkuhn
4dc867878bd1
Make plural.
17 2017-05-09 12:39:39
bkuhn
81ab95b0919e
CD is not the primary shipped media these days.
16 2017-05-09 12:39:25
bkuhn
e55bdd6f0c9f
Update date.
15 2017-05-09 12:27:37
bkuhn
a55777a6edd2
Reduce slides to only those introducing violations
14 2017-05-09 12:15:39
bkuhn
72ee4d2823b1
2hr compliance to select sides for violation intro cp -pa presentations/2hr-GPL-compliance-focus/2hr-GPL.md presentations/20min-violation-intro/violation-intro.md
13 2017-05-09 12:07:10
bkuhn
8495d9b65ebe
Add final slide with links to pertinent sections.
12 2017-05-09 12:02:13
bkuhn
a53d1919b05a
Shorten length; include only section discussion Shorten this down to include discussion only of specific GPL sections.
11 2017-05-09 11:51:59
bkuhn
9122138cf063
Copy 1hr-GPL.markdown to specific-sections.md cp 1hr-GPL/1hr-GPL.markdown 30min-specific-sections/specific-sections.md Start from the 1hr version to make a short version that talks about just a few specific sections of the GPL.
10 2016-10-25 22:34:29
bkuhn
be0abd7b1e18
Document the One Rule for merging into master.
9 2016-10-25 22:24:07
bkuhn
c7bf90446e45
Correct reference to wrong section.
8 2016-10-25 22:22:18
bkuhn
f1106e4c34e4
Note new commit bits given out to three others.
7 2016-08-16 10:02:02
bkuhn
0ad08b92d532
Would help online contributors send small changes? HT: Loïc Dachary <loic@dachary.org> ... who told me about this project.
6 2016-05-17 13:15:01
bkuhn
85bbbf1ec649
Gitorious Apocalypse: even more gitorious URLS I believe these are the last few Gitorious URLs
5 2016-05-17 12:19:09
bkuhn
eb51d8327cf8
Gitorious Apocalypse: remove gitorious more URLs The Gitorious URLs are now dead. A few Gitorious URLs continued to appear in the front matter of the Guide itself. This fixes those links to with k.copyleft.org equivalents.
4 2015-05-12 14:54:07
bkuhn
56ec3c68ee58
This clearly should have been \ref all along.
3 2015-05-04 21:10:36
bkuhn
0b3b7ecffd3a
Notice in Contributing section about individuals. Individuals act on their own behalf in this project, regardless of who sponsors it.
2 2015-04-03 03:51:35
bkuhn
4dcf54510828
Gitorious Apocalypse: recovery existing clone These instructions are simple and I've tested them.
1 2015-04-03 03:32:33
bkuhn
0a5d6db00372
Gitorious Apocalypse: remove all gitorious URLs The Gitorious URLs will disappear in the next few hours. The canonical hosting location of this project is now on copyleft.org. Specific gitorious URLs are generally replaced with k.copyleft.org, which is copyleft.org's self-hosted Kallithea instance.
26 files changed with 1785 insertions and 55 deletions:
CONTRIBUTING.md | tip tip
...
 
@@ -9,20 +9,24 @@ Free Software project.
9 9
 
## Who Is In Charge?
10 10
 

	
11 11
 
Currently, [Bradley M. Kuhn](http://ebb.org/bkuhn/) is the editor-in-chief of
12
 
this Guide project.  However, many other contributors have given patches and
13
 
improvements to the text.  Review the
14
 
[commit log in the Git repository](https://gitorious.org/copyleft-org/tutorial/commits/master)
12
 
this Guide project.  Bradley shares commit access with Ben Cotton, Donald
13
 
Roberston, and Engel Nyst.
14
 

	
15
 
Also, many other contributors have given patches and improvements to the
16
 
text.  Review the
17
 
[commit log in the Git repository](https://k.copyleft.org/guide/changelog)
15 18
 
for more details on who has contributed to the project.
16 19
 

	
17 20
 
## How Do I Get Involved?
18 21
 

	
19 22
 
The Guide is maintained in a copylefted distributed version control system called
20
 
[Git](http://git-scm.com/).  Currently, the project utilizes the services of
21
 
a  Git hosting website called [Gitorious](https://gitorious.org). (The
22
 
software which runs Gitorious is, itself, copylefted, too.)
23
 
[Git](http://git-scm.com/).  Currently, the project collaboration site is an
24
 
instance of the [Kallithea code hosting software](https://kallithea-scm.org/)
25
 
hosted at [k.copyleft.org](https://k.copyleft.org/guide/).  (Kallithea itself
26
 
us under a copyleft license, too, namely GPLv3.)
23 27
 

	
24
 
Those who are comfortable with Gitorious can submit
25
 
[merge requests on copyleft.org's gitorious site](https://gitorious.org/copyleft-org/tutorial/merge_requests).
28
 
Those who are comfortable with using Kallithea can submit
29
 
[pull requests via the Kallithea interface](https://k.copyleft.org/guide/pull-request).
26 30
 
See the section "Merge Request and Patch Workflow" below for more information
27 31
 
on the details of doing that.
28 32
 

	
...
 
@@ -79,7 +83,8 @@ procedures when doing so:
79 83
 

	
80 84
 
0. Target all changes for the 'next' branch (see below).  Likely, use of a
81 85
 
   secondary branch will be useful for the following steps (perhaps use the
82
 
   procedure below entitled "Contributing via Gitorious" to do so).
86
 
   procedure below entitled "Contributing via copyleft.org's Kallithea
87
 
   instance" to do so).
83 88
 

	
84 89
 
1. If possible, follow this procedure for the first commit that begins the
85 90
 
   work of integrating the third party text.
...
 
@@ -111,7 +116,7 @@ procedures when doing so:
111 116
 
   brought from the other source &mdash; more-or-less as it stood in the
112 117
 
   other work.  This is useful for historical archiving purposes.
113 118
 

	
114
 
   [Commit 678e841079aa708f98fe948ec8cef672d9a4c3cc](https://gitorious.org/copyleft-org/tutorial/commit/678e841079aa708f98fe948ec8cef672d9a4c3cc)
119
 
   [Commit 678e841079aa708f98fe948ec8cef672d9a4c3cc](https://k.copyleft.org/guide/changeset/678e841079aa708f98fe948ec8cef672d9a4c3cc)
115 120
 
   contains an example of this specific procedure.
116 121
 

	
117 122
 
2. In a second commit, by itself, add the following two things only:
...
 
@@ -141,7 +146,7 @@ procedures when doing so:
141 146
 
   Commit changes as necessary, in the smallest increments reasonably
142 147
 
   possible.
143 148
 

	
144
 
   [Commit 07a02b0b1c6d3ac2af9ed21b2a563abcf44d3d0f](https://gitorious.org/copyleft-org/tutorial/commit/07a02b0b1c6d3ac2af9ed21b2a563abcf44d3d0f)
149
 
   [Commit 07a02b0b1c6d3ac2af9ed21b2a563abcf44d3d0f](https://k.copyleft.org/guide/changeset/07a02b0b1c6d3ac2af9ed21b2a563abcf44d3d0f)
145 150
 
   is an example of the process for the last two steps.
146 151
 

	
147 152
 
5. Submit a merge request for your branch into 'next'.  In this particular
...
 
@@ -151,9 +156,9 @@ procedures when doing so:
151 156
 
## Merge Request and Patch Workflow
152 157
 

	
153 158
 
Currently, the main location for work on this project is
154
 
[on Gitorious](https://gitorious.org/copyleft-org/tutorial), and active new
159
 
[on k.copyleft.org](https://k.copyleft.org/guide), and active new
155 160
 
development on the project happens on the
156
 
['next' branch](https://gitorious.org/copyleft-org/tutorial/source/next:)
161
 
['next' branch](https://k.copyleft.org/guide/changelog?branch=next)
157 162
 
(which is
158 163
 
[auto-published on the copyleft.org/guide-next URL](https://copyleft.org/guide-next/)).
159 164
 
Here is a suggested workflow for submitting patches &mdash; first doing so
...
 
@@ -161,35 +166,37 @@ Here is a suggested workflow for submitting patches &mdash; first doing so
161 166
 
infrastructure but still using Git, and third avoiding Git altogether.
162 167
 

	
163 168
 
Merge requests and/or patches against
164
 
['next' branch](https://gitorious.org/copyleft-org/tutorial/source/next:) are
169
 
['next' branch](https://k.copyleft.org/guide/changelog?branch=next) are
165 170
 
typically much preferred, and the workflow explanations below assume that.
166 171
 
However, merge requests and/or patches against
167
 
['master' branch](https://gitorious.org/copyleft-org/tutorial/source/master:)
172
 
['master' branch](https://k.copyleft.org/guide/changelog?branch=master)
168 173
 
are not necessarily rejected.  In fact, if your change is a fix for typo,
169 174
 
spelling, grammar, formatting or anything urgent, submitting a patch against
170 175
 
'master' may make more sense.
171 176
 

	
172 177
 
To use the instructions below for proposals against the 'master' branch, just
173
 
replace 'next' everywhere below with 'master'.
178
 
replace 'next' everywhere below with 'master'.  However, please read below
179
 
the section entitled "Why Changes Should Target 'next' Branch" below before
180
 
pushing anything to the master branch.
174 181
 

	
175 182
 

	
176
 
### Contributing via Gitorious
183
 
### Contributing via copyleft.org's Kallithea instance
177 184
 

	
178 185
 
First-time contributors may want to do the following four items first:
179 186
 

	
180
 
0. [Create an account on Gitorious](https://gitorious.org/users/new)
187
 
0. [Create an account on k.copyleft.org](https://k.copyleft.org/_admin/register)
181 188
 

	
182
 
1. [Visit gitorious.org/copyleft-org/tutorial](https://gitorious.org/copyleft-org/tutorial)
183
 
    and click "Clone".
189
 
1. [Visit k.copyleft.org/guide](https://k.copyleft.org/guide)
190
 
    and choose "Fork" from the "Options" menu.
184 191
 

	
185 192
 
    Instead of the default, you might call your clone
186
 
    "MYNAME-copyleft-tutorial-suggestions".
193
 
    "guide-USERNAME".
187 194
 

	
188 195
 
2. On the command line create a *local* clone of your Clone, by typing:
189 196
 

	
190
 
        $ git clone git@gitorious.org:copyleft-org/MYNAME-copyleft-tutorial-suggestions.git copyleft-tutorial
191
 
        $ cd copyleft-tutorial
192
 
        $ git remote rename origin MYNAME-copyleft-tutorial-suggestions
197
 
        $ git clone https://USERNAME@k.copyleft.org/guide-USERNAME copyleft-guide
198
 
        $ cd copyleft-guide
199
 
        $ git remote rename origin guide-USERNAME
193 200
 

	
194 201
 
    (The last part isn't strictly necessary; you just might want to name the
195 202
 
    upstream repository a more descriptive name, since below you'll add the
...
 
@@ -198,9 +205,9 @@ First-time contributors may want to do the following four items first:
198 205
 
3. Now, add to your clone a copy of the "real" copyleft.org tutorial
199 206
 
   repository, and make a branch that tracks the official version:
200 207
 

	
201
 
        $ git remote add copyleft-tutorial-official git@gitorious.org:copyleft-org/tutorial.git
202
 
        $ git fetch copyleft-tutorial-official
203
 
        $ git branch --track official-next copyleft-tutorial-official/next
208
 
        $ git remote add guide-official https://bkuhn@k.copyleft.org/guide
209
 
        $ git fetch guide-official
210
 
        $ git branch --track official-next guide-official/next
204 211
 

	
205 212
 
That completes the first-time setup.  Next is a workflow each proposed merge
206 213
 
request.
...
 
@@ -222,8 +229,8 @@ request.
222 229
 

	
223 230
 
        $ git checkout master
224 231
 
        $ git branch -D official-next
225
 
        $ git fetch copyleft-tutorial-official
226
 
        $ git branch --track official-next copyleft-tutorial-official/next
232
 
        $ git fetch guide-official
233
 
        $ git branch --track official-next gude-official/next
227 234
 
        $ git checkout official-next
228 235
 
        $ git pull
229 236
 

	
...
 
@@ -258,20 +265,19 @@ request.
258 265
 

	
259 266
 
4. Next, upload and publish those ideas to your own clone on Gitorious.
260 267
 

	
261
 
        $ git push MYNAME-copyleft-tutorial-suggestions my-new-idea-for-tutorial
268
 
        $ git push guide-USERNAME my-new-idea-for-tutorial
262 269
 

	
263 270
 
    That's the end of the command-line part.
264 271
 

	
265
 
5. Now, visit Gitorious' merge-request creation web interface at
266
 
   https://gitorious.org/copyleft-org/MYNAME-copyleft-tutorial-suggestions/merge_requests/new
272
 
5. Now, visit the Kallithea pull request merge-request creation web interface at
273
 
   https://k.copyleft.org/guide-USERNAME/pull-request
267 274
 

	
268 275
 
   Initiate your merge request with by setting:
269 276
 

	
270
 
        Summary:       Briefly describe your proposal
271
 
        Description:   More completely describe your proposal
272
 
        Target:        tutorial
273
 
        Target Branch: next
274
 
        Source Branch: my-new-idea-for-tutorial
277
 
        Title:                  Briefly describe your proposal
278
 
        Description:            More completely describe your proposal
279
 
        Original Repository:    guide-USERNAME : my-new-idea-for-tutorial
280
 
        Destination Repository: guide (parent) : next
275 281
 

	
276 282
 
6. While it's possible to discuss the details of the merge request via the
277 283
 
   web interface, for larger changes, it may be worthwhile to start a thread
...
 
@@ -279,3 +285,58 @@ request.
279 285
 
   [the mailing list](http://lists.copyleft.org/cgi-bin/mailman/listinfo/discuss)
280 286
 
   about the merge request.  Include the URL of the merge request in the
281 287
 
   post.
288
 

	
289
 
## Why Changes Should Target 'next' Branch
290
 

	
291
 
The instructions above encourage you to submit your changes to the 'next'
292
 
branch, which is found
293
 
[on k.copyleft.org](https://k.copyleft.org/guide/files/next), and is
294
 
auto-deployed to
295
 
[copyleft.org/guide-next/](https://copyleft.org/guide-next/).
296
 

	
297
 
The "official" Copyleft Guide is published on
298
 
[copyleft.org/guide/](https://copyleft.org/guide/) automatically from the
299
 
'master' branch of the repository.
300
 

	
301
 
Since many use this Guide as a reference, non-trivial changes are merged into
302
 
the "official" Copyleft Guide carefully and only after
303
 
discussion on
304
 
[the mailing list](http://lists.copyleft.org/cgi-bin/mailman/listinfo/discuss).
305
 

	
306
 
There is one key rule with regard to merging changes from 'next' to 'master':
307
 

	
308
 
> Treat 'master' branch as if by committing there, you have single-handledly
309
 
> defined for the world what copyleft is.
310
 

	
311
 
If you have commit access to the public master branch, please carefully head
312
 
this.
313
 

	
314
 
## Gitorious Apocalypse Recovery
315
 

	
316
 
If you used to contribute via Gitorious, *don't panic*!  We were careful to
317
 
transition the project to Kallithea without requiring recloning the
318
 
repository.  If you initially did a clone of the main repository (i.e., not
319
 
your own clone) all you need to do one of these operations
320
 

	
321
 
For Git 1.8.0 or later:
322
 

	
323
 
    $ git remote set-url origin https://k.copyleft.org/guide
324
 
    $ git --set-upstream master origin/master
325
 
    $ git --set-upstream-to next origin/next
326
 

	
327
 
For any older version of Git:
328
 

	
329
 
    $ git remote set-url origin https://k.copyleft.org/guide
330
 
    $ git config branch.master.remote https://k.copyleft.org/guide
331
 
    $ git config branch.next.remote https://k.copyleft.org/guide
332
 

	
333
 
(If you renamed the gitorious remote to a different name, replace "origin"
334
 
with the name you used.  If you previously followed the workflow instructions
335
 
above, yours is probably called "guide-official", or "tutorial-official",
336
 
rather than "origin").
337
 

	
338
 
It's really that simple!
339
 

	
340
 
If you had a clone on gitorious, you have a bit more work to do, but feel
341
 
free to create a clone on k.copyleft.org and push any branches you care about
342
 
there!
README.md | tip tip
...
 
@@ -22,8 +22,8 @@ You may also
22 22
 
and [download a PDF of the Guide as well](http://copyleft.org/guide/comprehensive-gpl-guide.pdf).
23 23
 

	
24 24
 
Note the
25
 
[canonical repository for this project is on gitorious](https://gitorious.org/copyleft-org/tutorial/source/master:).
26
 
Typically, copies of this repository on  sites other than gitorious are for informational and backup
25
 
[canonical repository for this project is on k.copyleft.org](https://k.copyleft.org/guide/files/tip/).
26
 
Typically, copies of this repository on  sites other than copyleft.org are for informational and backup
27 27
 
purposes only.
28 28
 

	
29 29
 
## Contributing
...
 
@@ -31,3 +31,14 @@ purposes only.
31 31
 
Improvements of all kinds and manner are welcome.  Please review
32 32
 
[the instructions and details regarding making contributions](CONTRIBUTING.md)
33 33
 
for more information.
34
 

	
35
 
Copyleft.org may be sponsored by various organizations, and organizations may
36
 
also republish some, or all, of the output of this project under the terms of
37
 
the CC BY-SA license.  However, contributors' work is their own, and thus the
38
 
opinions expressed in their contributions, IRC utterances, commit messages,
39
 
mailing list posts, and/or other fora provided by copyleft.org may not
40
 
necessarily reflect the views of the contributors' employers and/or
41
 
organizations sponsoring the project and/or organizations republishing
42
 
copyleft.org's materials.  Generally speaking, unless stated otherwise,
43
 
please assume that individuals contribute to copyleft.org in their personal
44
 
capacity.
TODO.md | tip tip
...
 
@@ -8,3 +8,5 @@
8 8
 
  copyleft.org/guide/  I set a few of these up by hand already, but perhaps
9 9
 
  there's a way that tex4ht could dump an list of URL redirects automatically
10 10
 
  when it builds the HTML.
11
 
* https://hypothes.is/ might be useful for quickly allowing web readers
12
 
  to add changes.
comprehensive-gpl-guide.tex | tip tip
...
 
@@ -100,8 +100,9 @@ and Guide
100 100
 

	
101 101
 
{\parindent 0in
102 102
 
\begin{tabbing}
103
 
Copyright \= \copyright{} 2003--2005, 2008, 2014--2015 \hspace{1.mm} \=  \kill
104
 
Copyright \> \copyright{} 2003--2005, 2008, 2014--2015 \>  Bradley M. Kuhn. \\
103
 
Copyright \= \copyright{} 2003--2005, 2008, 2014--2015, 2018 \hspace{1.mm} \=  \kill
104
 
Copyright \> \copyright{} 2018 \>  Chestek Legal. \\
105
 
Copyright \> \copyright{} 2003--2005, 2008, 2014--2015, 2018 \>  Bradley M. Kuhn. \\
105 106
 
Copyright \> \copyright{} 2014--2015 \>  Anthony K. Sebro, Jr. \\
106 107
 
Copyright \= \copyright{} 2014 \> Denver Gingerich. \\
107 108
 
Copyright \= \copyright{} 2003--2007, 2014 \>  Free Software Foundation, Inc. \\
...
 
@@ -127,9 +128,9 @@ those licenses should note the
127 128
 

	
128 129
 
As a public, collaborative project, this Guide is primarily composed of the
129 130
 
many contributions received via its
130
 
\href{https://gitorious.org/copyleft-org/tutorial/source/master:CONTRIBUTING.md}{public
131
 
\href{https://k.copyleft.org/guide/files/master/CONTRIBUTING.md}{public
131 132
 
  contribution process}.  Please
132
 
\href{https://gitorious.org/copyleft-org/tutorial/history/master}{review its
133
 
\href{https://k.copyleft.org/guide/changelog/master/}{review its
133 134
 
  Git logs} for full documentation of all contributions, and
134 135
 
Appendix~\ref{third-party-citation-list}
135 136
 
  contains a list of third-party works from which some material herein was
...
 
@@ -138,7 +139,7 @@ adapted.
138 139
 
The most recent version is
139 140
 
available online at \url{https://copyleft.org/guide/}.  Patches
140 141
 
are indeed welcome to this material.  Sources can be found in the Git
141
 
repository at \url{https://gitorious.org/copyleft-org/tutorial/}.
142
 
repository at \url{https://k.copyleft.org/guide/}.
142 143
 
}
143 144
 
\end{center}
144 145
 

	
enforcement-case-studies.tex | tip tip
...
 
@@ -447,7 +447,7 @@ $ make
447 447
 
and waited approximately 40 minutes for the build to complete\footnote{Build
448 448
 
  times will likely vary widely on various host systems.}.  The investigator
449 449
 
kept a
450
 
\href{https://gitorious.org/copyleft-org/tutorial/source/master:enforcement-case-studies_log-output/thinkpenguin_librecmc-complete.log}{full
450
 
\href{https://k.copyleft.org/guide/files/master/enforcement-case-studies_log-output/thinkpenguin_librecmc-complete.log}{full
451 451
 
  log of the build}, which is not included herein due its size (approximately
452 452
 
7.2K of text).
453 453
 
\label{thinkpenguin-main-build}
...
 
@@ -515,7 +515,7 @@ mips-librecmc-linux-uclibc-gcc.bin: /lib/libc.so.6:
515 515
 
\end{lstlisting}
516 516
 

	
517 517
 
   (The
518
 
\href{https://gitorious.org/copyleft-org/tutorial/source/master:enforcement-case-studies_log-output/thinkpenguin_u-boot-build_fail.log}{complete
518
 
\href{https://k.copyleft.org/guide/files/master/enforcement-case-studies_log-output/thinkpenguin_u-boot-build_fail.log}{complete
519 519
 
  log output from the failure} is too lengthy to include herein.)
520 520
 

	
521 521
 
   This issue is an annoyance, not a compliance problem.  It was clear from
...
 
@@ -536,7 +536,7 @@ $ ln -s \
536 536
 
\end{itemize}
537 537
 

	
538 538
 
The
539
 
\href{https://gitorious.org/copyleft-org/tutorial/source/master:enforcement-case-studies_log-output/thinkpenguin_u-boot-finish_build.log}{full
539
 
\href{https://k.copyleft.org/guide/files/master/enforcement-case-studies_log-output/thinkpenguin_u-boot-finish_build.log}{full
540 540
 
  log of the build} is not included herein due its size (approximately 3.8K
541 541
 
of text).  After that, the investigator found a new U-Boot image in the
542 542
 
``bin'' directory.
...
 
@@ -741,7 +741,7 @@ The comparison steps were as follows:
741 741
 
\begin{enumerate}
742 742
 
  
743 743
 
\item Extract the filesystem from the image we built by running
744
 
  \href{https://gitorious.org/copyleft-org/gpl-compliance-scripts/source/master:find-firmware.pl}{find-firmware.pl}
744
 
  \href{https://k.copyleft.org/gpl-compliance-scripts/files/master/find-firmware.pl}{find-firmware.pl}
745 745
 
  on ``bin/ar71xx/librecmc-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin''
746 746
 
  and then running
747 747
 
  \href{http://www.binaryanalysis.org/en/content/show/download}{bat-extratools}'
gpl-installation.tex | Added tip
 
new file 100644
1
 
% Copyright (C) 2018, Bradley M. Kuhn
2
 
% License: CC-BY-SA-4.0
3
 

	
4
 
\documentstyle[twocolumn]{article}
5
 
\pagestyle{empty}
6
 
\begin{document}
7
 

	
8
 
%don't want date printed
9
 
\date{}
10
 

	
11
 
%make title bold and 14 pt font (Latex default is non-bold, 16 pt)
12
 

	
13
 
\title{\Large\bf A Comprehensive Consideration of Installation Requirements of the GPL}
14
 

	
15
 
%for two authors (this is what is printed)
16
 

	
17
 
\author{\begin{tabular}[t]{c@{\extracolsep{8em}}c@{\extracolsep{8em}}c}
18
 
    Bradley M. Kuhn & Behan Webster \\
19
 
    Software Freedom Conservancy, Inc. & Converse In Code
20
 
\end{tabular}
21
 
}
22
 

	
23
 
\thispagestyle{empty}
24
 

	
25
 
\maketitle
26
 

	
27
 
\subsection*{\centering Abstract}
28
 

	
29
 
The GNU General License (``GPL'') is the most widely used \textit{copyleft}
30
 
license for software.  Copyleft licenses function as copyright license in
31
 
atypical manner: rather than restricting permission to copy, modify and
32
 
redistribute the software, copyleft licenses encourage and enable such
33
 
activities.  However, these license have strict requirements that mandate
34
 
further software sharing by enabling downstream users to easily improve,
35
 
modify, and upgrade the copylefted software on their own.
36
 

	
37
 
GPL has two versions in common use: version 2 (``GPLv2'') and version 3
38
 
(``GPLv3'').  Both versions require those who redistribute the software to
39
 
provide information related to the installation of software modified by
40
 
downstream.  These installation requirements, however, differ somewhat in
41
 
their details.  While some business practices around license compliance
42
 
efforts have reached adequate sophistication to address simpler compliance
43
 
problems, firms have generally given inadequate attention to the installation
44
 
requirements of both common versions of GPL\@.  Misunderstanding of these
45
 
clauses is often common, and violations related to installation instructions
46
 
remain prevalent.
47
 

	
48
 
Furthermore, perceived differences in the requirements, and lack of rigorous
49
 
study of the Installation Information requirements of GPLv3\S6 has allowed
50
 
rumor and impression, rather than a textually grounded adherence to the
51
 
written rules, to govern industry response in adoption of software licensed
52
 
under GPLv3.  The resulting scenario often causes redistributors to assume
53
 
the GPLv2 has \textbf{no} requirements regarding installation information,
54
 
and that GPLv3's requirements in this regard are impossible to meet,
55
 
particularly in security-conscious embedded products.
56
 

	
57
 
This paper explores the installation provisions of both common versions of
58
 
GPL, discusses historical motivations and context for each, and suggests best
59
 
practices regarding installation information for firms that redistribute
60
 
software under both licenses.
61
 

	
62
 
\section{Introduction}
63
 

	
64
 
Free, Libre and Open Source (``FLOSS'') licenses are typically categorized as
65
 
either copyleft or non-copyleft licenses.  The license compliance demands of
66
 
most non-copyleft licenses typically center purely around issues of author
67
 
attribution, and thus are straightforwardly addressed by license compliance
68
 
programs such as OpenChain and SPDX, which focus on the details of properly
69
 
annotating licensing information for software in the supply-chain to assure
70
 
proper downstream license and related author credit notification.
71
 

	
72
 
Copyleft licenses do indeed require proper downstream license and credit
73
 
notification, and thus we can broadly model copyleft license requirements as
74
 
a proper superset of those requirements of non-copyleft licenses.  The
75
 
compliance subset of license annotation is a well-studied problem, and many
76
 
automation tools exist and remain under active development to assist in these
77
 
aspects of compliance. Unfortunately, the nascent state of industry
78
 
compliance efforts currently means that firms are often ill-equipped to
79
 
handle the additional requirements of copyleft licenses.
80
 

	
81
 
In particular, software copyleft licenses are specifically designed to
82
 
promulgate a transparent agenda to champion the rights of downstream users to
83
 
effectively and easily copy, modify, reinstall and redistribute the software
84
 
both commercially and non-commercially.  Proper verification of source code
85
 
for license compliance generally cannot be automated.  Indeed, given that
86
 
program equivalence (often colloquially called the ``Halting Problem'') was
87
 
mathematically proven as an undecidable problem in the computing subfield of
88
 
Theory of Computation, we know that a generalized solution that shows
89
 
specific source code corresponds to a specific set of binaries remains
90
 
unsolvable in the general case.
91
 

	
92
 
We do expect automation tools that approximate solutions for the specific
93
 
cases of most interest to adopter of copylefted software to eventually exist.
94
 
Currently, much research and industry attention has turned toward the
95
 
software engineering problem of ``reproducible builds''.  We find this area
96
 
of endeavor directly applicable to the requirements of copyleft license
97
 
compliance, and believe that reproducible build techniques will eventually
98
 
become as common for  compliance with source code provisioning terms of
99
 
FLOSS licenses as SPDX and OpenChain are for the license notice and
100
 
attribution requirements are today.
101
 

	
102
 
However, even that solution, when it exists, will not fully satisfy the goals
103
 
of many firms.  Frankly, most firms do not share the idealistic goals of
104
 
software freedom activists who design copyleft licenses.  These activists
105
 
seek to defends the rights of software users by creating copyleft licenses
106
 
that mandate source code provisioning, which include the rights to modify and
107
 
install modified versions of the software.  However, in what the inventor of
108
 
copyleft, Richard M.~Stallman, called ``pragmatic idealism'', copyleft
109
 
licenses make reasonable trade-offs regarding how much disclosure is required
110
 
to downstream.  While conventional wisdom often considered copyleft licenses
111
 
to contain substantial and complicated requirements, ultimately the
112
 
requirements are substantially more permissive than most industry-standard
113
 
proprietary licenses, which often complete prohibit redistribution of the
114
 
software and disclose absolutely no source code.  Copyleft licenses typically
115
 
make a clear compromise between maximal software freedom for the downstream
116
 
recipient and permission for firms to distribute proprietary software in
117
 
aggregation with copylefted software.
118
 

	
119
 
By way of hypothetical counterexample, consider this possible ``copyleft''
120
 
license that one might create:
121
 

	
122
 
\begin{quotation}
123
 
  \begin{center}
124
 
    {\Large The Unreasonably Overly Broad Copyleft License}
125
 
  If you distribute this software in any form, you agree to publicly release
126
 
  the complete source code of all software that you and your successors in
127
 
  interest write, in any form, for perpetuity.
128
 
\end{quotation}
129
 

	
130
 
Besides likely being unenforceable for various reasons, firms would quickly
131
 
ban all software under this license, and ban all employees from ever using
132
 
such software at home or work.  A highly broad license of this nature, even
133
 
if succeeded in the very short term in a few instances, would fail long-term
134
 
to reach the long term goal of maximizing software freedom for users.
135
 
Copyleft, therefore, must find a balance between two competing goals:
136
 

	
137
 
\begin{itemize}
138
 

	
139
 
\item Ensure the rights to copy, share, modify, redistribute,
140
 
  and reinstall the software for downstream users.
141
 

	
142
 
\item Entice firms that do not seek the same goals as the activists to adopt,
143
 
  share and improve the copylefted software to assure its promulgation.
144
 
\end{itemize}
145
 

	
146
 
In essence, much FLOSS licensing balances these competing goals.
147
 
Non-copyleft licenses favor the latter much more than the former, and
148
 
copyleft licenses seek to create an optimal policy between the ``maximal
149
 
software freedom'' vs. ``adoption and popularity'' dichotomy, to assure that
150
 
in the long term, users have these specific rights, but also allow for short
151
 
term interest of firms and individuals alike who may not share the software
152
 
freedom activist perspective.
153
 

	
154
 
\section{Historical Background}
155
 

	
156
 
Despite the awareness of copyleft activists, the adoption of copyleft
157
 
licenses has been wrought with acrimony and accusation.  To our knowledge,
158
 
there are no specific empirical studies of attitudes and reasoning why firms
159
 
initially rejected copyleft (and that some still do).  However, consideration
160
 
of anecdotes can illuminate study of the reasons why confusion exists
161
 
regarding copyleft licensing requirements in general, and in particular
162
 
(which will be the focus of this article) the installation requirements of
163
 
the GNU General Public License (``GPL'').
164
 

	
165
 
The Free Software Foundation (``FSF''), which is the license steward for all
166
 
existing versions of the GPL, was the first to license software under GPL\@.
167
 
Released in 1991, GPLv2 came into wide use by other software authors,
168
 
including those of Linux.  During the 1990s, the alternative body of software
169
 
released under GPLv2 gained slow but steady adoption, until major firms could
170
 
no longer ignore it.
171
 

	
172
 
In 2001, Microsoft launched a series of political attacks against the GPL\@.
173
 
Over a period of months, various Microsoft executives called the GPL
174
 
``unAmerican'' and a ``cancer'' on the software industry.  This was the first
175
 
time most in the industry had ever heard of the GPL, and the rhetoric created
176
 
the expected fervor.
177
 

	
178
 
The industry context of the time was the growing adoption of GPL'd software,
179
 
and Linux, in particular, by firms.  While Microsoft was not the first to
180
 
draw negative attention to GPL's copyleft provisions, but sadly the
181
 
misunderstandings launched in these attacks remain with us today.
182
 

	
183
 
Adoption of FLOSS grew quickly in the last two decades.  License compliance
184
 
and FLOSS supply-chain adoption techniques have become essential components
185
 
of most large firms along with this adoption.  However, these tools and
186
 
procedures have focused on the straightforward problems of license notice,
187
 
attribution, and supply-chain FLOSS inclusion discovery techniques.  The
188
 
finer points of copyleft license compliance, particularly source code
189
 
provisioning and installation requirements of GPL, remain often
190
 
misunderstood, and sometimes outright ignored.
191
 

	
192
 
Historically, firms have often reacted to the two popular versions of the GPL
193
 
in the same pattern.  During the feverish anti-copyleft rhetoric of the
194
 
1990s, firms widely considered the GPLv2 as a toxic license they could not
195
 
abide.  Eventually, executives and lawyers at major firms learned what their
196
 
engineers often already knew: that GPLv2 was not unreasonable, its
197
 
requirements were well understood and could be respected by businesses that
198
 
produced both FLOSS and proprietary products.
199
 

	
200
 
We now see the same process happening, albeit much more slowly, with GPLv3.
201
 
We hear rhetoric drawing attention to perceived differences between GPLv2's
202
 
and GPLv3's requirements, which seem untenable to firms, some of whom
203
 
maintain GPLv2'd forks of projects that have moved on to the
204
 
``GPLv3-or-later'' upstream.  It is our view that if firms give some
205
 
attention to the history of ``slow but sure'' adoption of copyleft licenses,
206
 
after careful study of the compliance requirements, that GPLv3 requirements
207
 
can become as acceptable as the GPLv2 requirements already are.  This paper
208
 
provides analysis, guidance and explanation of a set of specific terms in
209
 
GPLv3 that some firms have declared untenable: GPLv3's updated Installation
210
 
Information requirements.  It is our hope that this detailed analysis will
211
 
replace rumor and supposition about GPLv3 requirements with cool-headed
212
 
consideration of the trade-offs between avoiding GPLv3 and meeting those
213
 
requirements --- just as firms did in the late 1990s with GPLv2.
214
 

	
215
 
\section{GPLv2 Installation Requirements}
216
 

	
217
 
As discussed in the previous section, firms have generally been completely
218
 
comfortable 
219
 

	
220
 
\end{document}
gpl-lgpl.tex | tip tip
...
 
@@ -1504,7 +1504,7 @@ generally require permission from the copyright holder to grant explicit
1504 1504
 
permission to modify a work in any manner.  As discussed in the next chapter,
1505 1505
 
the GPL {\em does} grant such permission, but requires the modified work must
1506 1506
 
also be licensed under the terms of the GPL (and only GPL:
1507
 
see\S~\label{GPLv2s6} in this tutorial).  Determining whether software was
1507
 
see\S~\ref{GPLv2s6} in this tutorial).  Determining whether software was
1508 1508
 
modified is a substantially easier analysis than the derivative work
1509 1509
 
discussions and considerations in this chapter.
1510 1510
 

	
...
 
@@ -2160,7 +2160,8 @@ GPLv2~\S4 is GPLv2's termination clause.  Upon first examination, it seems
2160 2160
 
strange that a license with the goal of defending users' and programmers'
2161 2161
 
freedoms for perpetuity in an irrevocable way would have such a clause.
2162 2162
 
However, upon further examination, the difference between irrevocability
2163
 
and this termination clause becomes clear.
2163
 
and this termination clause becomes clear. (See~\ref{gplv2-irrevocable} for
2164
 
expanded discussion of GPLv2 irrevocability.)
2164 2165
 

	
2165 2166
 
The GPL is irrevocable in the sense that once a copyright holder grants
2166 2167
 
rights for someone to copy, modify and redistribute the software under terms
...
 
@@ -2320,6 +2321,120 @@ rights\footnote{While nearly all attorneys and copyleft theorists are in
2320 2321
 
  Jaeger and almost everyone else in the copyleft community for nearly a
2321 2322
 
  decade, regard an almost moot and wholly esoteric legal detail.}.
2322 2323
 

	
2324
 
\section{GPLv2 Irrevocability}
2325
 
\label{gplv2-irrevocable}
2326
 

	
2327
 
This section digresses briefly to examine the manner in which GPLv2\S\S~4--6
2328
 
interact together to assure that the license grant is irrevocable.
2329
 
There are two legal theories why a contributor cannot terminate their license
2330
 
grant. First is an argument that the text of the GPL prevents it; second is
2331
 
that a contributor would be estopped from succeeding on an infringement claim
2332
 
for continued use of the code even if it wasn't removed.
2333
 

	
2334
 
\subsection{The text of the GPLv2}
2335
 

	
2336
 
The GPLv2 have several provisions that, when taken together, can be construed
2337
 
as an irrevocable license from each contributor. First, the GPLv2 says ``by
2338
 
\emph{modifying} or distributing the Program (or any work based on the Program), you
2339
 
indicate your acceptance of this License to do so, and all its terms and
2340
 
conditions for copying, distributing or modifying the Program or works based
2341
 
on it'' (GPLv2\S5, emphasis added).  A contributor by definition is modifying
2342
 
the code and therefore has agreed to all the terms in the GPLv2, which
2343
 
includes the web of mechanisms in the GPLv2 that ensure the code can be used
2344
 
by all.
2345
 

	
2346
 
More specifically, the downstream license grant says ``the recipient
2347
 
automatically receives a license from the original licensor to copy,
2348
 
distribute or modify the Program subject to these terms and conditions.''
2349
 
(GPLv2\S6). So in this step, the contributor has granted a license to the
2350
 
downstream, on the condition that the downstream complies with the license
2351
 
terms.
2352
 

	
2353
 
That license granted to downstream is irrevocable, again provided that the
2354
 
downstream user complies with the license terms: ``[P]arties who have
2355
 
received copies, or rights, from you under this License will not have their
2356
 
licenses terminated so long as such parties remain in full compliance''
2357
 
(GPLv2\S4).
2358
 

	
2359
 
Thus, anyone downstream of the contributor (which is anyone using the
2360
 
contributor's code), has an irrevocable license from the contributor. A
2361
 
contributor may claim to revoke their grant, and subsequently sue for
2362
 
copyright infringement, but a court would likely find the revocation was
2363
 
ineffective and the downstream user had a valid license defense to a claim of
2364
 
infringement.
2365
 

	
2366
 
Nevertheless, for purposes of argument, we will assume that for some
2367
 
reason the GPLv2 is not enforceable against the contributor\footnote{For
2368
 
  example, the argument has been made that there may be a failure of
2369
 
  consideration on the part of the contributor. While \textit{Jacobsen
2370
 
    v. Katzer}, 535 F.3d 1373 (Fed. Cir. 2008) is accepted as holding that
2371
 
  there is consideration received by the contributor in a FOSS license, the
2372
 
  posture of the case was one where the contributor advocated for the theory,
2373
 
  not against it. The author is not aware of any other decisions that have analyzed
2374
 
  the question in any depth, so it perhaps could be challenged in the right
2375
 
  factual situation.}, or that the irrevocable license can be
2376
 
revoked\footnote{A contract without a definable duration can be terminated on
2377
 
  reasonable notice. \textit{Great W. Distillery Prod. v. John A. Wathen Distillery
2378
 
  Co.}, 10 Cal. 2d 442, 447, 74 P.2d 745, 747 (1937). The term nevertheless
2379
 
  can be a term of indefinite length where its continuing effect is tied to
2380
 
  the conduct of the parties. \emph{Id}.}. In that case, the application of
2381
 
promissory estoppel will likely mean that the contributor still cannot
2382
 
enforce their copyright against downstream users.
2383
 

	
2384
 
\subsection{Promissory estoppel}
2385
 

	
2386
 
``Promissory estoppel'' is a legal theory that says, under some
2387
 
circumstances, a promise is enforceable against the promisee even after the
2388
 
promisee tries to renege on the promise. The test for how and when promissory
2389
 
estoppel applies differs from state to state, but generally where there is a
2390
 
``promise which the promisor should reasonably expect to induce action or
2391
 
forbearance on the part of the promisee or a third person and which does
2392
 
induce such action or forbearance is binding if injustice can be avoided only
2393
 
by enforcement of the promise.''\footnote{\textit{Kajima/Ray Wilson v. Los Angeles
2394
 
Cty. Metro. Transp. Auth.}, 23 Cal. 4th 305, 310, 1 P.3d 63, 66 (2000), \emph{citing}
2395
 
Restatement (Second) of Contracts \S 90(1) (1979).} Breaking it down, it is:
2396
 
\begin{enumerate}
2397
 
\item where there is a clear and definite promise;
2398
 
\item where the promisor has a reasonable expectation that the offer will
2399
 
  induce action or forbearance on the part of the promisee;
2400
 

	
2401
 
\item which does induce actual and reasonable action or forbearance by the promisee; and
2402
 

	
2403
 
\item which causes a detriment which can only be avoided by the enforcement
2404
 
  of the promise.
2405
 
\end{enumerate}
2406
 

	
2407
 
In this case, the promisor is the contributor. This should be an easy
2408
 
standard to meet in any widely used software.
2409
 
\begin{enumerate}
2410
 
\item The promise is contained in the GPL, which is a promise that one can
2411
 
  continue to use the licensed software as long as the terms of the license
2412
 
  are met.
2413
 

	
2414
 

	
2415
 
\item A contributor knows that there is a broad user base and users consume
2416
 
  the software relying on the grant in the GPL as assuring their continued
2417
 
  ability to use the software (one might even say it is the \textit{sine qua
2418
 
    non} of the intent of the GPL).
2419
 

	
2420
 
\item Users do, in fact, rely on the promises in the GPL, as they ingest the software
2421
 
  and base their businesses on their continued ability to use the software.
2422
 

	
2423
 
\item Whether the user will suffer detriment is case-specific, but using
2424
 
  Linux, a software program that is often fundamental to the operation of a
2425
 
  business, as an example, the loss of its use would have a significantly
2426
 
  detrimental, perhaps even fatal, effect on the continued operation of the
2427
 
  business.
2428
 

	
2429
 
\end{enumerate}
2430
 

	
2431
 
\subsection{Conclusion}
2432
 

	
2433
 
Whether as a matter of a straightforward contractual obligation, or as a
2434
 
matter of promissory estoppel, a contributor's attempt to revoke a copyright
2435
 
license grant and then enforce their copyright against a user is highly
2436
 
unlikely to succeed.
2437
 

	
2323 2438
 
\section{GPLv2~\S7: ``Give Software Liberty or Give It Death!''}
2324 2439
 
\label{GPLv2s7}
2325 2440
 

	
...
 
@@ -4885,7 +5000,7 @@ found that for higher-end hardware, the profit made from proprietary
4885 5000
 
software licensing fees is negligible. The real profit is in the hardware,
4886 5001
 
but it is essential that software be stable, reliable and dependable, and
4887 5002
 
the users be allowed to have unfettered access to it. Free Software, and
4888
 
GPLd software in particular, is the right choice. For instance IBM can be
5003
 
GPL'd software in particular, is the right choice. For instance IBM can be
4889 5004
 
assured that proprietary versions of the their software will not exist to
4890 5005
 
compete on their hardware.
4891 5006
 

	
presentations/20min-violation-intro/Makefile | Added tip
 
new file 100644
1
 
# Makefile for Presentation
2
 
#
3
 
# You can change the PRESENTATION_BASE below, or if you like, or set it as
4
 
# an environment variable before you type make.
5
 

	
6
 
ifndef PRESENTATION_BASE
7
 
PRESENTATION_BASE=violation-intro
8
 
endif 
9
 

	
10
 
DO_INCREMENTAL_POINTS = -i -s
11
 

	
12
 

	
13
 
# This should be the path to your checkout of the repository.  Under that
14
 
# directory, you must have a checkout of /Admin/Forms/TeX.
15
 

	
16
 
PATH := $(PATH):/usr/share/tex4ht
17
 

	
18
 

	
19
 
PANDOC=/usr/bin/pandoc
20
 
TEX4HT=tex4ht
21
 
T4HT=t4ht
22
 
PDFLATEX = pdflatex
23
 
LATEX = /usr/bin/latex
24
 
BIBTEX = bibtex
25
 
FIG2DEV = fig2dev
26
 
DVIPS=/usr/bin/dvips
27
 

	
28
 
PDF_FIGS = ui/conservancy/logo.pdf
29
 
EPS_FIGS = ui/conservancy/logo.eps
30
 

	
31
 
all:	err $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).html
32
 
all:	$(PRESENTATION_BASE).html
33
 

	
34
 
.SUFFIXES: .fig .postscript .eps .pdf .pstex_t .pstex .ps .dvi .tex
35
 

	
36
 
.postscript.pdf:
37
 
	ps2pdf $< $@
38
 

	
39
 
.postscript.eps:
40
 
	ps2epsi $< $@
41
 

	
42
 
.dvi.ps:
43
 
	$(DVIPS) $< -o $@
44
 

	
45
 
.tex.dvi:
46
 
	$(LATEX) $<
47
 

	
48
 
.fig.pdf:
49
 
	$(FIG2DEV) -L pdf -p "portrait" -c $< > $@
50
 

	
51
 
.fig.pstex_t:
52
 
	$(FIG2DEV) -L pstex_t $< > $@
53
 

	
54
 
.fig.pstex:
55
 
	$(FIG2DEV) -L pstex $< > $@
56
 

	
57
 
$(PRESENTATION_BASE).tex: $(PDF_FIGS) $(PRESENTATION_BASE).md
58
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
59
 

	
60
 
$(PRESENTATION_BASE).pdf: $(PRESENTATION_BASE).tex $(PDF_FIGS)
61
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
62
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
63
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
64
 

	
65
 
$(PRESENTATION_BASE).html: $(PRESENTATION_BASE).md
66
 
	$(PANDOC) $(DO_INCREMENTAL_POINTS) -s -S --template ./ui/conservancy/pandoc-s5-template.html -f markdown -t s5 $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).html
67
 

	
68
 
$(PRESENTATION_BASE).dvi: $(PRESENTATION_BASE).tex $(EPS_FIGS)
69
 
	$(LATEX)  $(PRESENTATION_BASE).tex
70
 
	$(LATEX)  $(PRESENTATION_BASE).tex
71
 

	
72
 
clean:
73
 
	/bin/rm -f $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).pdf $(PRESENTATION_BASE).log texput.log $(PRESENTATION_BASE).lg $(PRESENTATION_BASE).tmp $(PRESENTATION_BASE).xref *.4ct *.4tc *.aux *.dvi $(PRESENTATION_BASE)*.html *.idv *.lg *.tmp $(PRESENTATION_BASE).css $(PRESENTATION_BASE).log $(PRESENTATION_BASE).out $(PRESENTATION_BASE)-js.* $(PRESENTATION_BASE).tex
74
 

	
75
 
err: ; $(ERR)
76
 

	
77
 
install: all
78
 
	/usr/bin/rsync -HavP --exclude ui ./ copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/
79
 
	-ssh copyleft.org 'mkdir -p /var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/'
80
 
	/usr/bin/rsync -HavP ui/conservancy/  copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/
81
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -exec chmod gou+r {} \;'
82
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -type d -exec chmod gou+rx {} \;'
83
 
	./pres-cmd
presentations/20min-violation-intro/cc-by-sa-4-0_88x31.png | Added tip
 
new file 100644
 
binary diff not shown
Show images
presentations/20min-violation-intro/pres-cmd | Added tip
 
new file 100755
1
 
#!/bin/sh
2
 

	
3
 
talk=half-day-gpl/violation-intro
4
 

	
5
 
rsync -HavP ./  /home/pres/$talk/
6
 
rm -rf /home/pres/$talk/ui
7
 
rsync -HavP ~/talks/ui/  /home/pres/$talk/ui/
8
 
find /home/pres/$talk -exec chmod gou+r {} \;
9
 
find /home/pres/$talk -type d -exec chmod gou+rx {} \;
presentations/20min-violation-intro/violation-intro.md | Added tip
 
new file 100644
1
 
% The What and How of GPL Violations
2
 
% Bradley M. Kuhn &amp; Karen M. Sandler
3
 
% Tuesday 9 May 2017
4
 

	
5
 
# What's a GPL Violation?
6
 

	
7
 
+ GPL (both v2 and v3) require:
8
 
     + The whole work licensed under GPL.
9
 
     + (which means all copyrighted material added must be under
10
 
       GPL-compatible licenses.)
11
 
     + Complete, Corresponding Source (CCS) of that work provided, under GPL.
12
 

	
13
 
+ The licenses terminate upon violation &hellip;
14
 
     + &hellip; thus failure to comply means lost distribution rights.
15
 
     + &hellip; enforcement uses this rights termination as leverage to
16
 
       restore compliance.
17
 

	
18
 
# Enforcement is Technical
19
 

	
20
 
+ Copyleft's policy goals related to technical acts.
21
 
     + modifying, building, and installing software is a technical process.
22
 

	
23
 
+ In embedded systems, this process is rarely straightforward.
24
 
     + GPL's requirements are strict.
25
 

	
26
 
+ In enforcement, we talk about &ldquo;the CCS adequately meeting GPL's requirements&rdquo;
27
 

	
28
 
# Compliance-Friendly Development
29
 

	
30
 
+ Use revision control ...
31
 
    - ... to pull in vendor branch.
32
 
    - ... to tag releases.
33
 

	
34
 
+ Avoid "Build Guru" ...
35
 
    - ... by documenting build process.
36
 
    - ... and versioning it, too.
37
 

	
38
 
# GPL Binary Requirements
39
 

	
40
 
(v2 &sect; 3, v3 &sect; 6)
41
 

	
42
 
+ Four options:
43
 
    - Source alongside binary (v2/v3).
44
 
    - Offer for source (v2/v3).
45
 
    - Internet side-by-side distribution (v3).
46
 
    - Torrent distribution (v3).
47
 

	
48
 
# Source Alongside Binary
49
 

	
50
 
+ Simplest option
51
 

	
52
 
+ **Obligations end at distribution time.**
53
 

	
54
 
+ Physical media required.
55
 

	
56
 
# Offer For Source
57
 

	
58
 
+ Useful if not shipping media already.
59
 

	
60
 
+ Lasts three years.
61
 

	
62
 
+ Mail fulfillment required (not in v3).
63
 

	
64
 
# Side-By-Side Distribution
65
 

	
66
 
+ Not in GPLv2, pedantically speaking.
67
 

	
68
 
+ Always been considered compliant for v2.
69
 

	
70
 
+ v3 clarifies this.
71
 

	
72
 
# Peer-to-Peer Distribution 
73
 

	
74
 
+ v2 obviously couldn't consider this.
75
 

	
76
 
+ v3 allows distribution of equally seeded source and binary.
77
 

	
78
 
# Preparing Corresponding Source
79
 

	
80
 
(v2 &sect; 3, v3 &sect; 1)
81
 

	
82
 
+ Make sure all sources are present.
83
 
     - revision system helps a lot here.
84
 

	
85
 
+ Build scripts
86
 
     - make sure someone skilled in art can build it.
87
 

	
88
 
# Termination
89
 

	
90
 
(v2 &sect; 4, v3 &sect; 8)
91
 

	
92
 
+ v2 is automatic and permanent.
93
 

	
94
 
+ v3 has auto-reinstatement.
95
 
    - 60 day self-correction timeout.
96
 
    - 30 day penalty-less after notice.
97
 

	
98
 
+ Usually, you need copyright holder to reinstate.
99
 

	
100
 
#  Actual Enforcement
101
 

	
102
 
+ [*The Principles of Community-Oriented GPL Enforcement* at sfconservancy.org/linux-compliance/principles.html](https://sfconservancy.org/linux-compliance/principles.html).
103
 

	
104
 
+ Send a Letter, carefully finding right person.
105
 

	
106
 
+ Communication is key.
107
 

	
108
 
+ Ask for CCS candidates.
109
 

	
110
 

	
111
 
# The "Rounds"
112
 

	
113
 
+ Ideally (it's only happened to me twice) the first source release is
114
 
  perfect.
115
 
     + but we don't live in an ideal world.
116
 

	
117
 
+ The worst we've ever experienced is 22 rounds.
118
 

	
119
 
+ We send detailed reports.
120
 

	
121
 
# More Info / Talk License
122
 

	
123
 
<img align="right" src="cc-by-sa-4-0_88x31.png" />
124
 

	
125
 
+ Specific Sections of Copyleft Guide relating to these topics:
126
 
      - [GPLv2 &sect;4: Termination on Violation](https://copyleft.org/guide/comprehensive-gpl-guidech8.html#x11-510007.1)
127
 
      - [GPLv3 &sect;7: Understanding License Compatibility](https://copyleft.org/guide/comprehensive-gpl-guidech10.html#x13-850009.10)
128
 
      - [GPLv3 &sect;8: A Lighter Termination](https://copyleft.org/guide/comprehensive-gpl-guidech10.html#x13-860009.11)
129
 
      - [A Practical Guide to GPL Compliance](https://copyleft.org/guide/comprehensive-gpl-guidech14.html)
130
 
<span class="fitonslide">
131
 
<p>Presentation and slides are: Copyright &copy; Bradley M. Kuhn (2008&ndash;2011, 2015, 2017), Karen M. Sandler (2017), and are licensed under the <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/legalcode">Creative Commons Attribution-Share Alike 4.0 International License</a>. </p>
132
 
</span>
presentations/30min-specific-sections/Makefile | Added tip
 
new file 100644
1
 
# Makefile for Presentation
2
 
#
3
 
# You can change the PRESENTATION_BASE below, or if you like, or set it as
4
 
# an environment variable before you type make.
5
 

	
6
 
ifndef PRESENTATION_BASE
7
 
PRESENTATION_BASE=specific-sections
8
 
endif 
9
 

	
10
 
DO_INCREMENTAL_POINTS = -i -s
11
 

	
12
 

	
13
 
# This should be the path to your checkout of the repository.  Under that
14
 
# directory, you must have a checkout of /Admin/Forms/TeX.
15
 

	
16
 
PATH := $(PATH):/usr/share/tex4ht
17
 

	
18
 

	
19
 
PANDOC=/usr/bin/pandoc
20
 
TEX4HT=tex4ht
21
 
T4HT=t4ht
22
 
PDFLATEX = pdflatex
23
 
LATEX = /usr/bin/latex
24
 
BIBTEX = bibtex
25
 
FIG2DEV = fig2dev
26
 
DVIPS=/usr/bin/dvips
27
 

	
28
 
PDF_FIGS = ui/conservancy/logo.pdf
29
 
EPS_FIGS = ui/conservancy/logo.eps
30
 

	
31
 
all:	err $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).html
32
 
all:	$(PRESENTATION_BASE).html
33
 

	
34
 
.SUFFIXES: .fig .postscript .eps .pdf .pstex_t .pstex .ps .dvi .tex
35
 

	
36
 
.postscript.pdf:
37
 
	ps2pdf $< $@
38
 

	
39
 
.postscript.eps:
40
 
	ps2epsi $< $@
41
 

	
42
 
.dvi.ps:
43
 
	$(DVIPS) $< -o $@
44
 

	
45
 
.tex.dvi:
46
 
	$(LATEX) $<
47
 

	
48
 
.fig.pdf:
49
 
	$(FIG2DEV) -L pdf -p "portrait" -c $< > $@
50
 

	
51
 
.fig.pstex_t:
52
 
	$(FIG2DEV) -L pstex_t $< > $@
53
 

	
54
 
.fig.pstex:
55
 
	$(FIG2DEV) -L pstex $< > $@
56
 

	
57
 
$(PRESENTATION_BASE).tex: $(PDF_FIGS) $(PRESENTATION_BASE).md
58
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
59
 

	
60
 
$(PRESENTATION_BASE).pdf: $(PRESENTATION_BASE).tex $(PDF_FIGS)
61
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
62
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
63
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
64
 

	
65
 
$(PRESENTATION_BASE).html: $(PRESENTATION_BASE).md
66
 
	$(PANDOC) $(DO_INCREMENTAL_POINTS) -s -S --template ./ui/conservancy/pandoc-s5-template.html -f markdown -t s5 $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).html
67
 

	
68
 
$(PRESENTATION_BASE).dvi: $(PRESENTATION_BASE).tex $(EPS_FIGS)
69
 
	$(LATEX)  $(PRESENTATION_BASE).tex
70
 
	$(LATEX)  $(PRESENTATION_BASE).tex
71
 

	
72
 
clean:
73
 
	/bin/rm -f $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).pdf $(PRESENTATION_BASE).log texput.log $(PRESENTATION_BASE).lg $(PRESENTATION_BASE).tmp $(PRESENTATION_BASE).xref *.4ct *.4tc *.aux *.dvi $(PRESENTATION_BASE)*.html *.idv *.lg *.tmp $(PRESENTATION_BASE).css $(PRESENTATION_BASE).log $(PRESENTATION_BASE).out $(PRESENTATION_BASE)-js.* $(PRESENTATION_BASE).tex
74
 

	
75
 
err: ; $(ERR)
76
 

	
77
 
install: all
78
 
	/usr/bin/rsync -HavP --exclude ui ./ copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/
79
 
	-ssh copyleft.org 'mkdir -p /var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/'
80
 
	/usr/bin/rsync -HavP ui/conservancy/  copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/
81
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -exec chmod gou+r {} \;'
82
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -type d -exec chmod gou+rx {} \;'
83
 
	./pres-cmd
presentations/30min-specific-sections/cc-by-sa-4-0_88x31.png | Added tip
 
new file 100644
 
binary diff not shown
Show images
presentations/30min-specific-sections/pres-cmd | Added tip
 
new file 100755
1
 
#!/bin/sh
2
 

	
3
 
talk=half-day-gpl/specific-sections
4
 

	
5
 
rsync -HavP ./  /home/pres/$talk/
6
 
rm -rf /home/pres/$talk/ui
7
 
rsync -HavP ~/talks/ui/  /home/pres/$talk/ui/
8
 
find /home/pres/$talk -exec chmod gou+r {} \;
9
 
find /home/pres/$talk -type d -exec chmod gou+rx {} \;
presentations/30min-specific-sections/specific-sections.md | Added tip
 
new file 100644
1
 
% Considering Key Sections of the GPL
2
 
% Bradley M. Kuhn &amp; Karen M. Sandler
3
 
% Tuesday 9 May 2017
4
 

	
5
 

	
6
 
# Conditional Permissions
7
 

	
8
 
+ A copyleft license grants copyright permissions, conditionally.
9
 

	
10
 
+ Think of the phrase: &ldquo;provided that&rdquo;
11
 

	
12
 
+ &ldquo;provided that&rdquo;: appears (in some form) only
13
 

	
14
 
+ 4 times in GPLv2
15
 

	
16
 
+ 9 times in GPLv3.
17
 

	
18
 
# Considering Sections of the GPL
19
 

	
20
 
+ GPL interacts extensively with 17 USC&sect;106(2) &amp; 17 USC&sect;106(3)
21
 

	
22
 
+ GPL hinges on modification and distribution.
23
 

	
24
 
# Why Permission to Modify?
25
 

	
26
 
+ Your new copyrights are your copyrights:
27
 
     + you are fixed it in a tangible medium.
28
 

	
29
 
+ Exclusive right of copyright holders:
30
 
     + Control on &ldquo;preparation of derivative works&rdquo;
31
 
     + Distribution of the work.
32
 
     + Note the combination of these.
33
 
     
34
 
+ Again, see 17 USC&sect;106
35
 

	
36
 
+ N.B.: &ldquo;derivative works&rdquo; is USA-centric, modify is more international)
37
 

	
38
 
# Modification As a Center Provision
39
 

	
40
 
+ GPL's central tenant:
41
 

	
42
 
+ You can make a modified version of various types privately as much as you'd like.
43
 

	
44
 
+ When you distribute that modified version, you have requirements to meet.
45
 

	
46
 
+ Technological considerations dictate necessity of more complex rules for
47
 
certain types of modifications.
48
 

	
49
 
# GPLv2 &sect; 2(a-b)
50
 

	
51
 
<span class="fitonslide">
52
 
<p>[GPLv2&sect;]2. You may modify your copy or copies of the Program or any
53
 
portion of it, thus forming a work based on the Program, and copy and
54
 
distribute such modifications or work under the terms of Section 1 above,
55
 
provided that you also meet all of these conditions:
56
 
<br/>
57
 
<br/>
58
 
a) You must cause the modified files to carry prominent notices stating
59
 
that you changed the files and the date of any change.
60
 
<br/>
61
 
<br/>
62
 
b) You must cause any work that you distribute or publish, that in
63
 
whole or in part contains or is derived from the Program or any
64
 
part thereof, to be licensed as a whole at no charge to all third
65
 
parties under the terms of this License.
66
 
</p>
67
 
</span>
68
 

	
69
 
# GPLv3&sect;5(a-c)
70
 

	
71
 
<span class="fitonslide">
72
 
<p>
73
 
You may convey a work based on the Program, or the modifications to
74
 
produce it from the Program, in the form of source code under the
75
 
terms of section 4, provided that you also meet all of these conditions:
76
 
<br/>
77
 
<br/>
78
 
a) The work must carry prominent notices stating that you modified it, and
79
 
giving a relevant date.
80
 
<br/>
81
 
<br/>
82
 
b) The work must carry prominent notices stating that it is released under
83
 
this License and any conditions added under section 7.  This requirement
84
 
modifies the requirement in section 4 to "keep intact all notices".
85
 
<br/>
86
 
<br/>
87
 
c) You must license the entire work, as a whole, under this License to anyone
88
 
who comes into possession of a copy.  This License will therefore apply,
89
 
along with any applicable section 7 additional terms, to the whole of the
90
 
work, and all its parts, regardless of how they are packaged.  This License
91
 
gives no permission to license the work in any other way, but it does not
92
 
invalidate such permission if you have separately received it.
93
 
</p>
94
 
</span>
95
 

	
96
 
# GPLv2&sect;2&para; penultimates
97
 

	
98
 
<span class="fitonslide">
99
 
<p>
100
 
These requirements apply to the modified work as a whole.  If
101
 
identifiable sections of that work are not derived from the Program,
102
 
and can be reasonably considered independent and separate works in
103
 
themselves, then this License, and its terms, do not apply to those
104
 
sections when you distribute them as separate works.  But when you
105
 
distribute the same sections as part of a whole which is a work based
106
 
on the Program, the distribution of the whole must be on the terms of
107
 
this License, whose permissions for other licensees extend to the
108
 
entire whole, and thus to each and every part regardless of who wrote it.
109
 
<br/>
110
 
<br/>
111
 
Thus, it is not the intent of this section to claim rights or contest
112
 
your rights to work written entirely by you; rather, the intent is to
113
 
exercise the right to control the distribution of derivative or
114
 
collective works based on the Program.
115
 
</p>
116
 

	
117
 
</span>
118
 

	
119
 
# GPLv3 &sect;0 &para;1-5
120
 
<span class="fitonslide">
121
 
<p>
122
 
  "Copyright" also means copyright-like laws that apply to other kinds of
123
 
works, such as semiconductor masks.
124
 
<br/>
125
 
<br/>
126
 
  "The Program" refers to any copyrightable work licensed under this
127
 
License.  Each licensee is addressed as "you".  "Licensees" and
128
 
"recipients" may be individuals or organizations.
129
 
<br/>
130
 
<br/>
131
 
To "modify" a work means to copy from or adapt all or part of the work
132
 
in a fashion requiring copyright permission, other than the making of an
133
 
exact copy.  The resulting work is called a "modified version" of the
134
 
earlier work or a work "based on" the earlier work.
135
 
<br/>
136
 
<br/>
137
 
  A "covered work" means either the unmodified Program or a work based
138
 
on the Program.
139
 
</p>
140
 

	
141
 
# Binaries (Object Code) are Modifications
142
 

	
143
 
+ Software that the computer understands is different than software humans
144
 
  read.
145
 

	
146
 
+ There is often a process required to modify (and/or translate) the software
147
 
  from human-readable
148
 
      + This process can be done ahead of time.
149
 

	
150
 
+ Separation of source and binary create first proprietary software.
151
 
      + GPL uses the fact that binaries are modifications (which are often
152
 
        distribution) to prevent proprietarization.
153
 

	
154
 
# GPLv2 &sect; 3(a-b)
155
 

	
156
 
<span class="fitonslide">
157
 
<p>
158
 
<p>[GPLv2&sect;]3. You may copy and distribute the Program (or a work based on it,
159
 
under Section 2) in object code or executable form under the terms of
160
 
Sections 1 and 2 above provided that you also do one of the following:
161
 
<br/>
162
 
<br/>
163
 
a) Accompany it with the complete corresponding machine-readable
164
 
source code, which must be distributed under the terms of Sections
165
 
1 and 2 above on a medium customarily used for software interchange; or,
166
 
<br/>
167
 
<br/>
168
 
b) Accompany it with a written offer, valid for at least three
169
 
years, to give any third party, for a charge no more than your
170
 
cost of physically performing source distribution, a complete
171
 
machine-readable copy of the corresponding source code, to be
172
 
distributed under the terms of Sections 1 and 2 above on a medium
173
 
customarily used for software interchange;
174
 
</p>
175
 
</span>
176
 

	
177
 
# GPLv3 &sect; 6(a-b)
178
 

	
179
 
<span class="fitonslide">
180
 
<p>
181
 
[GPLv3 &sect; ] 6. Conveying Non-Source Forms.
182
 
<br/>
183
 
<br/>
184
 
You may convey a covered work in object code form under the terms
185
 
of sections 4 and 5, provided that you also convey the
186
 
machine-readable Corresponding Source under the terms of this License,
187
 
in one of these ways:
188
 
<br/>
189
 
<br/>
190
 
a) Convey the object code in, or embodied in, a physical product
191
 
(including a physical distribution medium), accompanied by the
192
 
Corresponding Source fixed on a durable physical medium
193
 
customarily used for software interchange.
194
 
<br/>
195
 
<br/>
196
 
b) Convey the object code in, or embodied in, a physical product
197
 
(including a physical distribution medium), accompanied by a
198
 
written offer, valid for at least three years and valid for as
199
 
long as you offer spare parts or customer support for that product
200
 
model, to give anyone who possesses the object code either (1) a
201
 
copy of the Corresponding Source for all the software in the
202
 
product that is covered by this License, on a durable physical
203
 
medium customarily used for software interchange, for a price no
204
 
more than your reasonable cost of physically performing this
205
 
conveying of source, or (2) access to copy the
206
 
Corresponding Source from a network server at no charge.
207
 
</p>
208
 
</span>
209
 

	
210
 
# GPLv3 &sect; 1 &para; 1, 4-6
211
 

	
212
 
<span class="fitonslide">
213
 
<p>
214
 
The "source code" for a work means the preferred form of the work
215
 
for making modifications to it.  "Object code" means any non-source
216
 
form of a work.
217
 
<br/>
218
 
<br/>
219
 
The "Corresponding Source" for a work in object code form means all the
220
 
source code needed to generate, install, and (for an executable work) run the
221
 
object code and to modify the work, including scripts to control those
222
 
activities.  However, it does not include the work's System Libraries, or
223
 
general-purpose tools or generally available free programs which are used
224
 
unmodified in performing those activities but which are not part of the work.
225
 
For example, Corresponding Source includes interface definition files
226
 
associated with source files for the work, and the source code for shared
227
 
libraries and dynamically linked subprograms that the work is specifically
228
 
designed to require, such as by intimate data communication or control flow
229
 
between those subprograms and other parts of the work.
230
 
<br/>
231
 
<br/>
232
 
The Corresponding Source need not include anything that users
233
 
can regenerate automatically from other parts of the Corresponding
234
 
Source.
235
 
<br/>
236
 
<br/>
237
 
The Corresponding Source for a work in source code form is that
238
 
same work.
239
 
</p>
240
 
</span>
241
 

	
242
 
# More Info / Talk License
243
 

	
244
 
<img align="right" src="cc-by-sa-4-0_88x31.png" />
245
 

	
246
 
+ Specific Sections of Copyleft Guide relating to these topics:
247
 
     - [Modified Source and Binary Distribution](https://copyleft.org/guide/comprehensive-gpl-guidech6.html#x9-410005)
248
 
     - [GPLv3 &sect;5: Modified Source](https://copyleft.org/guide/comprehensive-gpl-guidech10.html#x13-780009.8)
249
 
     - [GPLv3 &sect;6: Non-Source and Corresponding Source](https://copyleft.org/guide/comprehensive-gpl-guidech10.html#x13-790009.9)
250
 

	
251
 
<span class="fitonslide">
252
 
<p>Presentation and slides are: Copyright &copy; Bradley M. Kuhn (2008&ndash;2011, 2015, 2017), Karen M. Sandler (2017), and are licensed under the <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/legalcode">Creative Commons Attribution-Share Alike 4.0 International License</a>. </p>
253
 
</span>
presentations/Basic-Legal-Issues-for-Understanding-Copyleft.odp | Added tip
 
new file 100644
 
binary diff not shown
presentations/Landscape-of-GPL-Enforcement.odp | Added tip
 
new file 100644
 
binary diff not shown
presentations/ccs-report-examples/Makefile | Added tip
 
new file 100644
1
 
# Makefile for Presentation
2
 
#
3
 
# You can change the PRESENTATION_BASE below, or if you like, or set it as
4
 
# an environment variable before you type make.
5
 

	
6
 
ifndef PRESENTATION_BASE
7
 
PRESENTATION_BASE=ccs-examples
8
 
endif 
9
 

	
10
 
DO_INCREMENTAL_POINTS = -i -s
11
 

	
12
 

	
13
 
# This should be the path to your checkout of the repository.  Under that
14
 
# directory, you must have a checkout of /Admin/Forms/TeX.
15
 

	
16
 
PATH := $(PATH):/usr/share/tex4ht
17
 

	
18
 

	
19
 
PANDOC=/usr/bin/pandoc
20
 
TEX4HT=tex4ht
21
 
T4HT=t4ht
22
 
PDFLATEX = pdflatex
23
 
LATEX = /usr/bin/latex
24
 
BIBTEX = bibtex
25
 
FIG2DEV = fig2dev
26
 
DVIPS=/usr/bin/dvips
27
 

	
28
 
PDF_FIGS = ui/conservancy/logo.pdf
29
 
EPS_FIGS = ui/conservancy/logo.eps
30
 

	
31
 
all:	err $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).html
32
 
all:	$(PRESENTATION_BASE).html
33
 

	
34
 
.SUFFIXES: .fig .postscript .eps .pdf .pstex_t .pstex .ps .dvi .tex
35
 

	
36
 
.postscript.pdf:
37
 
	ps2pdf $< $@
38
 

	
39
 
.postscript.eps:
40
 
	ps2epsi $< $@
41
 

	
42
 
.dvi.ps:
43
 
	$(DVIPS) $< -o $@
44
 

	
45
 
.tex.dvi:
46
 
	$(LATEX) $<
47
 

	
48
 
.fig.pdf:
49
 
	$(FIG2DEV) -L pdf -p "portrait" -c $< > $@
50
 

	
51
 
.fig.pstex_t:
52
 
	$(FIG2DEV) -L pstex_t $< > $@
53
 

	
54
 
.fig.pstex:
55
 
	$(FIG2DEV) -L pstex $< > $@
56
 

	
57
 
$(PRESENTATION_BASE).tex: $(PDF_FIGS) $(PRESENTATION_BASE).md
58
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
59
 

	
60
 
$(PRESENTATION_BASE).pdf: $(PRESENTATION_BASE).tex $(PDF_FIGS)
61
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
62
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
63
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
64
 

	
65
 
$(PRESENTATION_BASE).html: $(PRESENTATION_BASE).md
66
 
	$(PANDOC) $(DO_INCREMENTAL_POINTS) -s -S --template ./ui/conservancy/pandoc-s5-template.html -f markdown -t s5 $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).html
67
 

	
68
 
$(PRESENTATION_BASE).dvi: $(PRESENTATION_BASE).tex $(EPS_FIGS)
69
 
	$(LATEX)  $(PRESENTATION_BASE).tex
70
 
	$(LATEX)  $(PRESENTATION_BASE).tex
71
 

	
72
 
clean:
73
 
	/bin/rm -f $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).pdf $(PRESENTATION_BASE).log texput.log $(PRESENTATION_BASE).lg $(PRESENTATION_BASE).tmp $(PRESENTATION_BASE).xref *.4ct *.4tc *.aux *.dvi $(PRESENTATION_BASE)*.html *.idv *.lg *.tmp $(PRESENTATION_BASE).css $(PRESENTATION_BASE).log $(PRESENTATION_BASE).out $(PRESENTATION_BASE)-js.* $(PRESENTATION_BASE).tex
74
 

	
75
 
err: ; $(ERR)
76
 

	
77
 
install: all
78
 
	/usr/bin/rsync -HavP --exclude ui ./ copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/
79
 
	-ssh copyleft.org 'mkdir -p /var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/'
80
 
	/usr/bin/rsync -HavP ui/conservancy/  copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/
81
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -exec chmod gou+r {} \;'
82
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -type d -exec chmod gou+rx {} \;'
83
 
	./pres-cmd
presentations/ccs-report-examples/cc-by-sa-4-0_88x31.png | Added tip
 
new file 100644
 
binary diff not shown
Show images
presentations/ccs-report-examples/ccs-examples.md | Added tip
 
new file 100644
1
 
% Examples of CCS Reports
2
 
% Bradley M. Kuhn &amp; Karen M. Sandler
3
 
% Tuesday 9 May 2017
4
 

	
5
 
# CCS
6
 

	
7
 
Complete, Corresponding Source
8
 

	
9
 
# How GPLv3 says CCS.
10
 

	
11
 
<hr/>
12
 

	
13
 
> The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.
14
 
<span class="fitonslide">
15
 
<p align=right>
16
 
&mdash; GPLv3&sect;1
17
 
</p>
18
 
</span>
19
 

	
20
 
# How GPLv2 says CCS.
21
 

	
22
 
<hr/>
23
 

	
24
 
> You may copy and distribute the Program (or a work based on it, under
25
 
> &sect; 2) in object code or executable form under the terms of &sect; 1
26
 
> &amp; 2 above provided that you &hellip; [a]ccompany it with the complete
27
 
> corresponding machine-readable source code &hellip; The source code for a
28
 
> work means the preferred form of the work for making modifications to it.
29
 
> For an executable work, complete source code means all the source code for
30
 
> all modules it contains, plus any associated interface definition files,
31
 
> plus the scripts used to control compilation and installation of the
32
 
> executable.
33
 

	
34
 
<p align=right>
35
 
&mdash; GPLv2&sect;3
36
 
</p>
37
 
</span>
38
 

	
39
 
# The 11 Words That Consumed My Life
40
 

	
41
 
+ GPLv2 enforcement, for embedded products, is all about the these eleven
42
 
  words.
43
 

	
44
 
+ I could give an entire talk on any one of these 11 words.
45
 
    + Yes, I can even give 20-30 minute treatises on each use of &ldquo;the&rdquo;. 
46
 

	
47
 
+ Yet, when enforcement processes are at their best, they're about the spirit
48
 
  behind these words, not the words themselves.
49
 

	
50
 
<hr>
51
 
> the scripts used to control compilation and installation of the executable.
52
 

	
53
 
<p align=right>
54
 
&mdash; GPLv2&sect;3
55
 
</p>
56
 
</span>
57
 

	
58
 
# The 11 Words That Consumed My Life
59
 

	
60
 
+  Basic reference rule:
61
 
     + Can a developer reasonably skilled in the art of embedded software
62
 
       build your sources, take the (copylefted) executables and install
63
 
       them?
64
 

	
65
 
+ Enforcement spends its most attention on testing CSS
66
 
  &ldquo;candidates&rdquo; to verify that.
67
 

	
68
 
<hr>
69
 
> the scripts used to control compilation and installation of the executable.
70
 

	
71
 
<p align=right>
72
 
&mdash; GPLv2&sect;3
73
 
</p>
74
 
</span>
75
 

	
76
 
# CCS "Round" Reports
77
 

	
78
 
+ Evaluate each CCS candidate.
79
 

	
80
 
+ Someone "skilled in the art" attempts to build.
81
 

	
82
 
+ Detailed notes are sent, asking for new CCS candidate "round".
83
 

	
84
 
+ Some anonyomized real world examples.
85
 

	
86
 
# No Build Instructions
87
 

	
88
 
<hr/>
89
 
    The primary issues we found were a dearth of build instructions as well 
90
 
    as a complete lack of installation instructions.  There was no 
91
 
    information that mentioned how one might build each package so we had to 
92
 
    guess about which Makefile and/or build script to run for each package.
93
 
    And in many cases it was not possible or straight-forward to build - this
94
 
    must be resolved in the next source candidate.
95
 

	
96
 
# Making General Recommendations
97
 

	
98
 
<hr/>
99
 
    We generally recommend that the source release be a single file (ie. one
100
 
    tarball containing all packages required for the build) that includes a
101
 
    README or similar in the main directory explaining exactly how to build
102
 
    and install all of the packages.  See section 21.2 of
103
 
    http://compliance.guide/pristine-example for an excellent example.
104
 

	
105
 
# Suspicious, But Not Captious.
106
 

	
107
 
<hr/>
108
 
    Also, we noticed that some packages mentioned in the "OPEN SOURCE
109
 
    SOFTWARE NOTICE" included with the device (and also downloaded as part of
110
 
    the source release; see
111
 
    Open_Source_Software_Notice_and_Privacy_Policy.pdf ) could not be found
112
 
    in the source release.  For example, we found "Software: Samba 3.0.XX" in
113
 
    the notice, but could not find any trace of Samba in the source release.
114
 
    Please ensure that all the software included in the notice is included in
115
 
    the source release as well.
116
 

	
117
 
# Nesting Doll Packages
118
 

	
119
 
<hr/>
120
 

	
121
 
    Once extracted, the 3 .rar files above produce the following output 
122
 
    files:
123
 
         * busybox-1.21.1.rar
124
 
         * AB_A0101.123.tar.gz
125
 
         * source.rar
126
 
         * a small text file that gives two-word descriptions of the above files
127
 

	
128
 

	
129
 
# Actual(ly Trying to) Build
130
 

	
131
 
<hr/>
132
 

	
133
 
    This file included no instructions for how one might build it so we 
134
 
    tried to run "make" but received the following error:
135
 

	
136
 
    $ make
137
 
    .../busybox-1.21.1/scripts/gcc-version.sh: line 11: 
138
 
    arm-none-linux-gnueabi-gcc: command not found
139
 

	
140
 
# Toolchain?
141
 

	
142
 
+ The toolchain is rarely considered mandatory as part of &ldquo;the
143
 
  scripts&rdquo;.
144
 

	
145
 
+ Admittedly, it doesn't *control* compilation, it *is* compilation.
146
 

	
147
 
+ The script here is explaining precisely what type of toolchain is needed.
148
 

	
149
 
+ Something like: &ldquo;GCC vX built with the following ./configure
150
 
  line&rdquo; is usually adequate.
151
 

	
152
 
+ But including the toolchain is a nice step to make it easy for your users.
153
 

	
154
 
<hr>
155
 
> the scripts used to **control compilation** and installation of the executable.
156
 

	
157
 
<p align=right>
158
 
&mdash; GPLv2&sect;3
159
 
</p>
160
 
</span>
161
 

	
162
 
# We Guess at Compiler Anyway
163
 

	
164
 
<hr/>
165
 
    So we searched for an arm-none-linux-gnueabi- cross-compiler in the 
166
 
    other files but could not find one.  We then tried to use our own (be 
167
 
    editing the PATH appropriately), which did get us past this error.  Note 
168
 
    that this is not acceptable in a source release - the cross-compiler 
169
 
    that a user must use needs to be clearly indicated (name, version, etc.) 
170
 
    and/or included with the source release.
171
 

	
172
 
# Feedback on Small Problems
173
 

	
174
 
<hr/>
175
 

	
176
 
     Once we had the custom cross-compiler configured, we then ran into these 
177
 
     errors:
178
 
     
179
 
     $ make
180
 
     .../busybox-1.21.1/scripts/gen_build_files.sh: Permission denied
181
 
     make: *** [gen_build_files] Error 127
182
 
     
183
 
     $ make
184
 
     .../busybox-1.21.1/scripts/mkconfigs: Permission denied
185
 
     make: *** [include/config/MARKER] Error 126
186
 
     
187
 
     $ make
188
 
     /bin/sh: applets/usage_compressed: Permission denied
189
 
     make[1]: *** [include/usage_compressed.h] Error 126
190
 
     make: *** [applets_dir] Error 2
191
 
     
192
 
     $ make
193
 
     .../busybox-1.21.1/scripts/trylink: Permission denied
194
 
     make: *** [busybox_unstripped] Error 126
195
 
     
196
 
     In each case, we found the mentioned file and then added executable 
197
 
     permissions to it (ie. "chmod u+x scripts/gen_build_files.sh").  This 
198
 
     must be fixed in the next source release - please set the executable 
199
 
     bits on the above files appropriately in the archive file you 
200
 
     distribute.
201
 

	
202
 
# Install Instructions missing
203
 

	
204
 
<hr/>
205
 
     After fixing the above, a "busybox" binary was generated.  However, 
206
 
     there were no instructions to indicate how one might install this binary 
207
 
     on the device.  Such instructions are required by GPLv2, under which 
208
 
     BusyBox is licensed.  Please include the instructions in your next 
209
 
     source release.
210
 

	
211
 
# Build "Only Seems" To build
212
 

	
213
 
<hr/>
214
 
     For the AAB_A0101.123.tar.gz package, we ran "./build.sh", the build
215
 
     took about 140 seconds, which is less than one would expect for building
216
 
     all of the programs listed in the "OPEN SOURCE SOFTWARE NOTICE".  The
217
 
     only files we could immediately find that were clearly the result of
218
 
     this "./build.sh" invocation were some kernel image binaries, found in
219
 
     path/path/path/path/path/KERNEL_OBJ .  This path was not mentioned at
220
 
     all and we had to guess at where they might be.
221
 

	
222
 
# Maybe Proprietary Kernel Modules?
223
 

	
224
 
<hr/>
225
 
     Furthermore, there were no .ko files generated, which is abnormal for a
226
 
     build of the kernel, Linux.  Please ensure that all .ko files which are
227
 
     used on the system are generated with "./build.sh" or a similar script.
228
 

	
229
 
# Weird versioning
230
 

	
231
 
<hr/>
232
 

	
233
 
     * The following libraries have different versions in the firmware than
234
 
        is built from the candidate CCS.  Specifically, your candidate CCS
235
 
        contains version "1800", and the firmware has version "2400".  Since
236
 
        most of these libraries are licensed under the LGPL, you are required
237
 
        to have the complete, corresponding source present for the correct
238
 
        version as distributed in the firmware.  You also must include the
239
 
        "scripts to control compilation and installation of the executable".
240
 
     
241
 
           * lib/libgio-2.0.so.0.2400.2
242
 
           * lib/libglib-2.0.so.0.2400.2
243
 
           * lib/libgmodule-2.0.so.0.2400.2
244
 
           * lib/libgobject-2.0.so.0.2400.2
245
 
           * lib/libgthread-2.0.so.0.2400.2
246
 
           * lib/libz.so.1.2.5  (version 1.2.2 is provided in the sources)
247
 
      
248
 
# Weird Build Issues Over Many Candidates
249
 

	
250
 
<hr/>
251
 
    You mentioned in your Round 6 commentary that you have corrected the
252
 
    thatlib issues.  However, we are unable to see what you mean.  There are
253
 
    now two copies of thatlib, one in 2624.7_524/uclinux-rootfs/lib/thatlib/,
254
 
    as well as the one in yourlibs.  We aren't sure which one you intend to
255
 
    be built to generate the binaries on the firmware.  When we try to build
256
 
    the yourlibs one from scratch, by cleaning the whole area, we get the
257
 
    following build issues.  Here's what we did:
258
 

	
259
 
# Getting Really build-technical
260
 

	
261
 
<hr/>
262
 

	
263
 
    We ran:
264
 

	
265
 
      make -C libsrc/thatlib install
266
 

	
267
 
    which did not work because of a missing Makefile error. We read the
268
 
    build source and discovered that the Makefile, etc, for that directory
269
 
    is generated by running:
270
 

	
271
 
       cd libsrc/thatlib/thatlib-0.9.22_mipsel-uclibc; sh configure_thatlib_mipsel-uclibc
272
 

	
273
 
    Once we did that
274
 

	
275
 
       make -C libsrc/thatlib install
276
 

	
277
 
     worked correctly. The only remaining binaries were in build source and
278
 
     discovered that the Makefile, etc, for that directory is generated by
279
 
     running:
280
 

	
281
 
       cd libsrc/thatlib/thatlib-0.9.22_mipsel-uclibc; sh configure_thatlib_mipsel-uclibc
282
 

	
283
 
# Getting Really build-technical
284
 

	
285
 
<hr/>
286
 

	
287
 
    Once we did that
288
 

	
289
 
       make -C libsrc/thatlib install
290
 

	
291
 
     worked correctly. The only remaining binaries were in
292
 
     ./libsrc/thatlib/\{YOURLIB_ROOT_DIR\}/ which looks like a build with a
293
 
     misconfigured environment somehow, so we simply removed that
294
 
     directory.
295
 

	
296
 
     Then, after running make clean, thatlib failed with the following
297
 
     errors. Random .o/.so files laying around in the thatlib source
298
 
     directory, and then it failing to build correctly after they are
299
 
     removed.  If there some set of .so files you claim are not required
300
 
     as part of the C&CS since thatlib is LGPL'd, we understand that, but
301
 
     the rest of the sources must build and install those other .so's.
302
 
     Here's the build error we get in the bdvdlibs version:
303
 

	
304
 
# Getting Really build-technical
305
 

	
306
 
<hr/>
307
 

	
308
 
     mkdir .libs/libthatlibwm_default.a.tmp
309
 
     (cd .libs/libthatlibwm_default.a.tmp && ar x ../../.libs/libthatlibwm_default.a)
310
 
     mkdir .libs/libthatlibwm_default.a.tmp
311
 
     (cd .libs/libthatlibwm_default.a.tmp && ar x ../../.libs/libthatlibwm_default.a)
312
 
     /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc-
313
 
       ld -o libthatlibwm_default.o -r .libs/libthatlibwm_default.a.tmp/*.o
314
 
     /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc-
315
 
       ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3)
316
 
     /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc-
317
 
       ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3)
318
 
     /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc-
319
 
       ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3)
320
 
     /opt/toolchains/crosstools_sf-linux-2.6.18.0_gcc-4.2-9ts_uclibc-nptl-0.9.29-20070423_20080702/bin//mipsel-uclibc-
321
 
       ld: .libs/libthatlibwm_default.a.tmp/default.o: Relocations in generic ELF (EM: 3)
322
 
     .libs/libthatlibwm_default.a.tmp/default.o: could not read symbols: File in wrong format
323
 
     make[4]: *** [libthatlibwm_default.o] Error 1
324
 

	
325
 
# Proprietary Linux Modules Are Everywhere 
326
 

	
327
 
<hr/>
328
 
     We did find one .ko file that was already included in the package, but
329
 
     wasn't built when we ran "./build.sh".  This is
330
 
     path/path/android_X.X/device/device-type/mydevice.ko , which notes that
331
 
     its license is "GPL v2" in the modinfo, but for which we could find no
332
 
     source code in the source release.  Please ensure that the source code
333
 
     for mydevice.ko is included in the next source candidate.
334
 

	
335
 
# Proprietary Linux Modules Are Everywhere 
336
 

	
337
 
<hr/>
338
 

	
339
 
     * The following files are derivative of the kernel named Linux and
340
 
        therefore covered by the GPL.  However, no source code, scripts to
341
 
        control compilation nor installation are included in your CCS
342
 
        candidate:
343
 
              lib/modules/myfilesystem.ko
344
 
              lib/modules/mydevicecontroller.ko
345
 
              lib/modules/myblockdevice.ko
346
 
              lib/modules/mypcicard.ko
347
 

	
348
 
# Non-Technical GPL Compliance Issues
349
 

	
350
 
<hr/>
351
 
    Regarding over the air updates: we'd like to see a screenshot or other
352
 
      details documenting what has now been implemented by BestBuy to make
353
 
      sure the offer for source appears to users appropriately after
354
 
      upgrade.  There was a consensus reached on the last conference call
355
 
      how this would be done, so we only need follow up and implementation
356
 
      on that.
357
 

	
358
 

	
359
 
# Binary Comparison.
360
 

	
361
 
<hr/>
362
 

	
363
 
     Note that we did not receive a firmware image to compare this with 
364
 
    (though we do have the device).  Company's website did not appear to 
365
 
    have any firmware images available for download.  It would be helpful to 
366
 
    have such an image for the next CCS check.
367
 

	
368
 
    The above source candidate was downloaded from 
369
 
    http:///sourcez.company.com/en/search/index.htm?keywords=X1234Y, which 
370
 
    was alluded to in Company's 2017-01-18 email to us that said:
371
 

	
372
 
    "You can check this website 
373
 
    http://sourcez.company.com/en/search/index.htm "
374
 

	
375
 
    The email did not mention how to use that website, but we found that by 
376
 
    entering "X1234Y" into the top right search box that we could find the 
377
 
    source file list.
378
 

	
379
 
    Note that the offer for source included in the web UI of the device said 
380
 
    to email NAME@COMPANY.com , which is how the above instructions for 
381
 
    downloading the source were received.
382
 

	
383
 
# A Pristine Example
384
 

	
385
 
+ Enforcement must often use a &ldquo;know it when I see it&rdquo; standard.
386
 
    + i.e., can we take your CCS build it, and install it?
387
 

	
388
 
+ We've reached compliant CCS with hundreds of companies:
389
 
    + but that didn't mean the CCS was pretty.
390
 

	
391
 
+ Thanks to ThinkPenguin, we finally have an example of beautiful embedded
392
 
  product compliance. 
393
 

	
394
 
# Lessons Learned from Pristine Example
395
 

	
396
 
+ The full paper for this talk is available online:
397
 
    + [compliance.guide/pristine-example](http://compliance.guide/pristine-example)
398
 

	
399
 

	
400
 
+ It's part of the larger tutorial called [*Copyleft and the GNU General
401
 
  Public License: A Comprehensive Tutorial and Guide*](https://copyleft.org/guide/)
402
 
  at copyleft.org.
403
 

	
404
 
# Give a roadmap in a README
405
 

	
406
 
+ Scripts doesn't only mean shell scripts and Makefiles.
407
 

	
408
 
+ Think of the script of a play or movie. 
409
 

	
410
 
+ If your build process includes human intervention &hellip;
411
 

	
412
 
+ &hellip; then the script are a written explanation of what the human must
413
 
do.
414
 

	
415
 
<hr>
416
 
> **the scripts** used to control compilation and installation of the executable.
417
 

	
418
 
<p align=right>
419
 
&mdash; GPLv2&sect;3
420
 
</p>
421
 
</span>
422
 

	
423
 
# ThinkPengiun's README
424
 

	
425
 
A file called “README” at the top-level directory said:
426
 

	
427
 
    In order to build firmware images for your router, the following needs to be installed:
428
 

	
429
 
    gcc, binutils, bzip2, flex, python, perl, make, find, grep, diff, unzip,
430
 
    gawk, getopt, libz-dev and libc headers.
431
 

	
432
 
    Please use “make menuconfig” to configure your appreciated configuration
433
 
    for the toolchain and firmware. Please note that the default configuration
434
 
    is what was used to build the firmware image for your router. It is advised
435
 
    that you use this configuration.
436
 

	
437
 
    Simply running “make” will build your firmware. The build system will
438
 
    download all sources, build the cross-compile toolchain, the kernel and all
439
 
    chosen applications.
440
 

	
441
 
     To build your own firmware you need to have access to a GNU/Linux system
442
 
     (case-sensitive filesystem required).
443
 

	
444
 
# Make Sure It Builds
445
 

	
446
 
+ Can your CCS pass this test?
447
 
    + Give you source release to another developer from another department.
448
 
    + Ask them to follow the instructions you wrote.
449
 
    + They should get the equivalent binaries you get in building.
450
 

	
451
 
+ Very few organizations bother to do this.
452
 

	
453
 
+ It's probably the most useful step to verify compliance, yet *no*
454
 
  compliance process recommendations I've ever seen include this.
455
 

	
456
 
<hr>
457
 
> the scripts used to **control compilation** and installation of the executable.
458
 

	
459
 
<p align=right>
460
 
&mdash; GPLv2&sect;3
461
 
</p>
462
 
</span>
463
 

	
464
 

	
465
 
# It's not &ldquo;make install&rdquo;
466
 

	
467
 
+ Server system software can offer a &ldquo;make install&rdquo; that
468
 
  reasonable works to meet installation requirements.
469
 

	
470
 
+ Embedded products are admittedly difficult to install.
471
 

	
472
 
+ To comply here, you'll usually just have write out the instructions.
473
 

	
474
 
+ It is required; don't skip this part.
475
 

	
476
 
<hr>
477
 
> the scripts used to **control** compilation and **installation** of the executable.
478
 
<p align=right>
479
 
&mdash; GPLv2&sect;3
480
 
</p>
481
 
</span>
482
 

	
483
 
# Missing hardware components
484
 

	
485
 
+ Inclusion of specialized installation hardware is not a
486
 
  &ldquo;script&rdquo;.
487
 

	
488
 
+ In our ThinkPenguin example, we had to go buy a USB serial adapter to
489
 
  install the modified firmware.
490
 

	
491
 
+ Just tell the user what they have to go buy for the install to work.
492
 

	
493
 
# More Info / Talk License
494
 

	
495
 
<img align="right" src="cc-by-sa-4-0_88x31.png" />
496
 

	
497
 
+ Specific Sections of Copyleft Guide relating to these topics:
498
 
      - [The Pristine Example](https://copyleft.org/guide/comprehensive-gpl-guidech22.html#x29-15900021)
499
 
      - [Details of a Compliant Distribution](https://copyleft.org/guide/comprehensive-gpl-guidech16.html#x21-12700015)
500
 

	
501
 
<span class="fitonslide">
502
 
<p>Presentation and slides are: Copyright &copy; Bradley M. Kuhn (2008&ndash;2011, 2015, 2017), Karen M. Sandler (2017), and are licensed under the <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/legalcode">Creative Commons Attribution-Share Alike 4.0 International License</a>. </p>
503
 
</span>
presentations/ccs-report-examples/pres-cmd | Added tip
 
new file 100755
1
 
#!/bin/sh
2
 

	
3
 
talk=half-day-gpl/ccs-examples
4
 

	
5
 
rsync -HavP ./  /home/pres/$talk/
6
 
rm -rf /home/pres/$talk/ui
7
 
rsync -HavP ~/talks/ui/  /home/pres/$talk/ui/
8
 
find /home/pres/$talk -exec chmod gou+r {} \;
9
 
find /home/pres/$talk -type d -exec chmod gou+rx {} \;
presentations/non-copyright-systems/Makefile | Added tip
 
new file 100644
 
# Makefile for Presentation
 
#
 
# You can change the PRESENTATION_BASE below, or if you like, or set it as
 
# an environment variable before you type make.
 

	
 
ifndef PRESENTATION_BASE
 
PRESENTATION_BASE=non-copyright
 
endif 
 

	
 
DO_INCREMENTAL_POINTS = -i -s
 

	
 

	
 
# This should be the path to your checkout of the repository.  Under that
 
# directory, you must have a checkout of /Admin/Forms/TeX.
 

	
 
PATH := $(PATH):/usr/share/tex4ht
 

	
 

	
 
PANDOC=/usr/bin/pandoc
 
TEX4HT=tex4ht
 
T4HT=t4ht
 
PDFLATEX = pdflatex
 
LATEX = /usr/bin/latex
 
BIBTEX = bibtex
 
FIG2DEV = fig2dev
 
DVIPS=/usr/bin/dvips
 

	
 
PDF_FIGS = ui/conservancy/logo.pdf
 
EPS_FIGS = ui/conservancy/logo.eps
 

	
 
all:	err $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).html
 
all:	$(PRESENTATION_BASE).html
 

	
 
.SUFFIXES: .fig .postscript .eps .pdf .pstex_t .pstex .ps .dvi .tex
 

	
 
.postscript.pdf:
 
	ps2pdf $< $@
 

	
 
.postscript.eps:
 
	ps2epsi $< $@
 

	
 
.dvi.ps:
 
	$(DVIPS) $< -o $@
 

	
 
.tex.dvi:
 
	$(LATEX) $<
 

	
 
.fig.pdf:
 
	$(FIG2DEV) -L pdf -p "portrait" -c $< > $@
 

	
 
.fig.pstex_t:
 
	$(FIG2DEV) -L pstex_t $< > $@
 

	
 
.fig.pstex:
 
	$(FIG2DEV) -L pstex $< > $@
 

	
 
$(PRESENTATION_BASE).tex: $(PDF_FIGS) $(PRESENTATION_BASE).md
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
 

	
 
$(PRESENTATION_BASE).pdf: $(PRESENTATION_BASE).tex $(PDF_FIGS)
 
	$(PANDOC) -S -s -f markdown -t latex $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).tex
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
 
	$(PDFLATEX)  $(PRESENTATION_BASE).tex
 

	
 
$(PRESENTATION_BASE).html: $(PRESENTATION_BASE).md
 
	$(PANDOC) $(DO_INCREMENTAL_POINTS) -s -S --template ./ui/conservancy/pandoc-s5-template.html -f markdown -t s5 $(PRESENTATION_BASE).md -o $(PRESENTATION_BASE).html
 

	
 
$(PRESENTATION_BASE).dvi: $(PRESENTATION_BASE).tex $(EPS_FIGS)
 
	$(LATEX)  $(PRESENTATION_BASE).tex
 
	$(LATEX)  $(PRESENTATION_BASE).tex
 

	
 
clean:
 
	/bin/rm -f $(PRESENTATION_BASE).ps $(PRESENTATION_BASE).pdf $(PRESENTATION_BASE).log texput.log $(PRESENTATION_BASE).lg $(PRESENTATION_BASE).tmp $(PRESENTATION_BASE).xref *.4ct *.4tc *.aux *.dvi $(PRESENTATION_BASE)*.html *.idv *.lg *.tmp $(PRESENTATION_BASE).css $(PRESENTATION_BASE).log $(PRESENTATION_BASE).out $(PRESENTATION_BASE)-js.* $(PRESENTATION_BASE).tex
 

	
 
err: ; $(ERR)
 

	
 
install: all
 
	/usr/bin/rsync -HavP --exclude ui ./ copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/
 
	-ssh copyleft.org 'mkdir -p /var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/'
 
	/usr/bin/rsync -HavP ui/conservancy/  copyleft.org:/var/www/presentations/$(PRESENTATION_BASE)/ui/conservancy/
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -exec chmod gou+r {} \;'
 
	-ssh copyleft.org 'find /var/www/presentations/$(PRESENTATION_BASE) -type d -exec chmod gou+rx {} \;'
 
	./pres-cmd
presentations/non-copyright-systems/cc-by-sa-4-0_88x31.png | Added tip
 
new file 100644
 
binary diff not shown
Show images
presentations/non-copyright-systems/non-copyright.md | Added tip
 
new file 100644
 
% GPL's Handling of Non-Copyright Systems
 
% Bradley M. Kuhn &amp; Karen M. Sandler
 
% Tuesday 9 May 2017
 

	
 
# Non-Copyright Systems
 

	
 
+ Patents, NDAs, &amp; other agreements often impact software.
 

	
 
+ GPL is essentially a copyright license.
 
     - so, how does GPL handle these systems?
 

	
 
+ As always, GPL has **conditional** permissions.
 
     - some such conditions relate to these other legal regimes.
 

	
 
+ Compliance for these is much more legalistic than technical.
 

	
 

	
 
# GPLv2&sect;7
 

	
 
<span class="fitonslide">
 
<p>[GPLv2&sect;]7. If, as a consequence of a court judgment or allegation of patent
 
infringement or for any other reason (not limited to patent issues),
 
conditions are imposed on you (whether by court order, agreement or
 
otherwise) that contradict the conditions of this License, they do not
 
excuse you from the conditions of this License.  If you cannot
 
distribute so as to satisfy simultaneously your obligations under this
 
License and any other pertinent obligations, then as a consequence you
 
may not distribute the Program at all.  For example, if a patent
 
license would not permit royalty-free redistribution of the Program by
 
all those who receive copies directly or indirectly through you, then
 
the only way you could satisfy both it and this License would be to
 
refrain entirely from distribution of the Program.
 
</p>
 
</span>
 

	
 
# GPLv3 Improvements
 

	
 
+ GPLv3 expands GPLv2&sect;7 into multiple sections.
 

	
 
+ Creates detailed rules.
 
      - an improvement
 
      - legal compliance analysis is less complicated.
 

	
 
# Staffing Question
 

	
 
+ In complex environments, both lawyers &amp; developers should analyze
 
  compliance obligations.
 

	
 
+ Simple environments (i.e., no actual proprietary components in product),
 
  less expertise &amp; cross-disciplinary staff time needed.
 

	
 
# More Info / Talk License
 

	
 
<img align="right" src="cc-by-sa-4-0_88x31.png" />
 

	
 
+ Specific Sections of Copyleft Guide relating to these topics:
 
      - [GPLv2 &sect;7: “Give Software Liberty or Give It Death!”](https://copyleft.org/guide/comprehensive-gpl-guidech8.html#x11-540007.4)
 
      - [GPLv3 &sect;10: Explicit Downstream License](https://copyleft.org/guide/comprehensive-gpl-guidech10.html#x13-880009.13)
 
      - [GPLv3 &sect;11: Explicit Patent Licensing](https://copyleft.org/guide/comprehensive-gpl-guidech10.html#x13-890009.14)
 
      - [GPLv3 &sect;12: Familiar as GPLv2 &sect;7](https://copyleft.org/guide/comprehensive-gpl-guidech10.html#x13-920009.15)
 

	
 
<span class="fitonslide">
 
<p>Presentation and slides are: Copyright &copy; Bradley M. Kuhn (2008&ndash;2011, 2015, 2017), Karen M. Sandler (2017), and are licensed under the <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/legalcode">Creative Commons Attribution-Share Alike 4.0 International License</a>. </p>
 
</span>
presentations/non-copyright-systems/pres-cmd | Added tip
 
new file 100755
 
#!/bin/sh
 

	
 
talk=half-day-gpl/non-copyright
 

	
 
rsync -HavP ./  /home/pres/$talk/
 
rm -rf /home/pres/$talk/ui
 
rsync -HavP ~/talks/ui/  /home/pres/$talk/ui/
 
find /home/pres/$talk -exec chmod gou+r {} \;
 
find /home/pres/$talk -type d -exec chmod gou+rx {} \;
third-party-citations.tex | tip tip
...
 
@@ -5,16 +5,16 @@
5 5
 

	
6 6
 
As a public, collaborative project, this Guide is primarily composed of the
7 7
 
many contributions received via its
8
 
\href{https://gitorious.org/copyleft-org/tutorial/source/master:CONTRIBUTING.md}{public
8
 
\href{https://k.copyleft.org/guide/files/master/CONTRIBUTING.md}{public
9 9
 
  contribution process}.  Please
10
 
\href{https://gitorious.org/copyleft-org/tutorial/history/master}{review its
10
 
\href{https://k.copyleft.org/guide/changelog}{review its
11 11
 
  Git logs} for full documentation of all contributions.
12 12
 

	
13 13
 
Below is a list of CC-By-SA-licensed works, with specific titles and
14 14
 
publication dates, from which any material was incorporated into this Guide.
15 15
 
The specific methods and details of incorporation are fully
16 16
 
documented in the
17
 
\href{https://gitorious.org/copyleft-org/tutorial/history/master}{Git logs}
17
 
\href{https://k.copyleft.org/guide/changelog}{Git logs}
18 18
 
of the project.
19 19
 

	
20 20
 
\label{third-party-citation-list}
...
 
@@ -47,6 +47,6 @@ contributed to this Guide using its Git (and formerly, CVS) repository.
47 47
 
Rather, this is a list of third-party published works from which any text was
48 48
 
herein included under their CC-By-SA licensing.  Thus, as the reader might
49 49
 
expect, the
50
 
\href{https://gitorious.org/copyleft-org/tutorial/history/master}{version
50
 
\href{https://k.copyleft.org/guide/changelog}{version
51 51
 
  control logs} contain the only true and accurate view available of who has
52 52
 
contributed which portions of this project.