1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
|
.. SPDX-License-Identifier: GPL-2.0
.. include:: ../disclaimer-ita.rst
:Original: :ref:`Documentation/process/license-rules.rst <kernel_licensing>`
:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
.. _it_kernel_licensing:
Regole per licenziare il kernel Linux
=====================================
Il kernel Linux viene rilasciato sotto i termini definiti dalla seconda
versione della licenza *GNU General Public License* (GPL-2.0), di cui una
copia è disponibile nel file LICENSES/preferred/GPL-2.0; a questo si
aggiunge eccezione per le chiamate di sistema come descritto in
LICENSES/exceptions/Linux-syscall-note; tutto ciò è descritto nel file COPYING.
Questo documento fornisce una descrizione su come ogni singolo file sorgente
debba essere licenziato per far si che sia chiaro e non ambiguo. Questo non
sostituisce la licenza del kernel.
La licenza descritta nel file COPYING si applica ai sorgenti del kernel nella
loro interezza, quindi i singoli file sorgenti possono avere diverse licenze ma
devono essere compatibili con la GPL-2.0::
GPL-1.0+ : GNU General Public License v1.0 o successiva
GPL-2.0+ : GNU General Public License v2.0 o successiva
LGPL-2.0 : GNU Library General Public License v2
LGPL-2.0+ : GNU Library General Public License v2 o successiva
LGPL-2.1 : GNU Lesser General Public License v2.1
LGPL-2.1+ : GNU Lesser General Public License v2.1 o successiva
A parte questo, i singolo file possono essere forniti con una doppia licenza,
per esempio con una delle varianti compatibili della GPL e alternativamente con
una licenza permissiva come BSD, MIT eccetera.
I file d'intestazione per l'API verso lo spazio utente (UAPI) descrivono
le interfacce usate dai programmi, e per questo sono un caso speciale.
Secondo le note nel file COPYING, le chiamate di sistema sono un chiaro
confine oltre il quale non si estendono i requisiti della GPL per quei
programmi che le usano per comunicare con il kernel. Dato che i file
d'intestazione UAPI devono poter essere inclusi nei sorgenti di un
qualsiasi programma eseguibile sul kernel Linux, questi meritano
un'eccezione documentata da una clausola speciale.
Il modo più comune per indicare la licenza dei file sorgenti è quello di
aggiungere il corrispondente blocco di testo come commento in testa a detto
file. Per via della formattazione, dei refusi, eccetera, questi blocchi di
testo sono difficili da identificare dagli strumenti usati per verificare il
rispetto delle licenze.
Un'alternativa ai blocchi di testo è data dall'uso degli identificatori
*Software Package Data Exchange* (SPDX) in ogni file sorgente. Gli
identificatori di licenza SPDX sono analizzabili dalle macchine e sono precisi
simboli stenografici che identificano la licenza sotto la quale viene
licenziato il file che lo include. Gli identificatori di licenza SPDX sono
gestiti del gruppo di lavoro SPDX presso la Linux Foundation e sono stati
concordati fra i soci nell'industria, gli sviluppatori di strumenti, e i
rispettivi gruppi legali. Per maggiori informazioni, consultate
https://spdx.org/
Il kernel Linux richiede un preciso identificatore SPDX in tutti i file
sorgenti. Gli identificatori validi verranno spiegati nella sezione
`Identificatori di licenza`_ e sono stati copiati dalla lista ufficiale di
licenze SPDX assieme al rispettivo testo come mostrato in
https://spdx.org/licenses/.
Sintassi degli identificatori di licenza
----------------------------------------
1. Posizionamento:
L'identificativo di licenza SPDX dev'essere posizionato come prima riga
possibile di un file che possa contenere commenti. Per la maggior parte
dei file questa è la prima riga, fanno eccezione gli script che richiedono
come prima riga '#!PATH_TO_INTERPRETER'. Per questi script l'identificativo
SPDX finisce nella seconda riga.
|
2. Stile:
L'identificativo di licenza SPDX viene aggiunto sotto forma di commento.
Lo stile del commento dipende dal tipo di file::
sorgenti C: // SPDX-License-Identifier: <SPDX License Expression>
intestazioni C: /* SPDX-License-Identifier: <SPDX License Expression> */
ASM: /* SPDX-License-Identifier: <SPDX License Expression> */
scripts: # SPDX-License-Identifier: <SPDX License Expression>
.rst: .. SPDX-License-Identifier: <SPDX License Expression>
.dts{i}: // SPDX-License-Identifier: <SPDX License Expression>
Se un particolare programma non dovesse riuscire a gestire lo stile
principale per i commenti, allora dev'essere usato il meccanismo accettato
dal programma. Questo è il motivo per cui si ha "/\* \*/" nei file
d'intestazione C. Notammo che 'ld' falliva nell'analizzare i commenti del
C++ nei file .lds che venivano prodotti. Oggi questo è stato corretto,
ma ci sono in giro ancora vecchi programmi che non sono in grado di
gestire lo stile dei commenti del C++.
|
3. Sintassi:
Una <espressione di licenza SPDX> può essere scritta usando l'identificatore
SPDX della licenza come indicato nella lista di licenze SPDX, oppure la
combinazione di due identificatori SPDX separati da "WITH" per i casi
eccezionali. Quando si usano più licenze l'espressione viene formata da
sottoespressioni separate dalle parole chiave "AND", "OR" e racchiuse fra
parentesi tonde "(", ")".
Gli identificativi di licenza per licenze come la [L]GPL che si avvalgono
dell'opzione 'o successive' si formano aggiungendo alla fine il simbolo "+"
per indicare l'opzione 'o successive'.::
// SPDX-License-Identifier: GPL-2.0+
// SPDX-License-Identifier: LGPL-2.1+
WITH dovrebbe essere usato quando sono necessarie delle modifiche alla
licenza. Per esempio, la UAPI del kernel linux usa l'espressione::
// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
// SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note
Altri esempi di usi di WITH all'interno del kernel sono::
// SPDX-License-Identifier: GPL-2.0 WITH mif-exception
// SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
Le eccezioni si possono usare solo in combinazione con identificatori di
licenza. Gli identificatori di licenza riconosciuti sono elencati nei
corrispondenti file d'eccezione. Per maggiori dettagli consultate
`Eccezioni`_ nel capitolo `Identificatori di licenza`_
La parola chiave OR dovrebbe essere usata solo quando si usa una doppia
licenza e solo una dev'essere scelta. Per esempio, alcuni file dtsi sono
disponibili con doppia licenza::
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
Esempi dal kernel di espressioni per file licenziati con doppia licenza
sono::
// SPDX-License-Identifier: GPL-2.0 OR MIT
// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
// SPDX-License-Identifier: GPL-2.0 OR Apache-2.0
// SPDX-License-Identifier: GPL-2.0 OR MPL-1.1
// SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT
// SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause OR OpenSSL
La parola chiave AND dovrebbe essere usata quando i termini di più licenze
si applicano ad un file. Per esempio, quando il codice viene preso da
un altro progetto il quale da i permessi per aggiungerlo nel kernel ma
richiede che i termini originali della licenza rimangano intatti::
// SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) AND MIT
Di seguito, un altro esempio dove entrambe i termini di licenza devono
essere rispettati::
// SPDX-License-Identifier: GPL-1.0+ AND LGPL-2.1+
Identificatori di licenza
-------------------------
Le licenze attualmente in uso, così come le licenze aggiunte al kernel, possono
essere categorizzate in:
1. _`Licenze raccomandate`:
Ovunque possibile le licenze qui indicate dovrebbero essere usate perché
pienamente compatibili e molto usate. Queste licenze sono disponibile nei
sorgenti del kernel, nella cartella::
LICENSES/preferred/
I file in questa cartella contengono il testo completo della licenza e i
`Metatag`_. Il nome di questi file è lo stesso usato come identificatore
di licenza SPDX e che deve essere usato nei file sorgenti.
Esempi::
LICENSES/preferred/GPL-2.0
Contiene il testo della seconda versione della licenza GPL e i metatag
necessari::
LICENSES/preferred/MIT
Contiene il testo della licenza MIT e i metatag necessari.
_`Metatag`:
I seguenti metatag devono essere presenti in un file di licenza:
- Valid-License-Identifier:
Una o più righe che dichiarano quali identificatori di licenza sono validi
all'interno del progetto per far riferimento alla licenza in questione.
Solitamente, questo è un unico identificatore valido, ma per esempio le
licenze che permettono l'opzione 'o successive' hanno due identificatori
validi.
- SPDX-URL:
L'URL della pagina SPDX che contiene informazioni aggiuntive riguardanti
la licenza.
- Usage-Guidance:
Testo in formato libero per dare suggerimenti agli utenti. Il testo deve
includere degli esempi su come usare gli identificatori di licenza SPDX
in un file sorgente in conformità con le linea guida in
`Sintassi degli identificatori di licenza`_.
- License-Text:
Tutto il testo che compare dopo questa etichetta viene trattato
come se fosse parte del testo originale della licenza.
Esempi::
Valid-License-Identifier: GPL-2.0
Valid-License-Identifier: GPL-2.0+
SPDX-URL: https://spdx.org/licenses/GPL-2.0.html
Usage-Guide:
To use this license in source code, put one of the following SPDX
tag/value pairs into a comment according to the placement
guidelines in the licensing rules documentation.
For 'GNU General Public License (GPL) version 2 only' use:
SPDX-License-Identifier: GPL-2.0
For 'GNU General Public License (GPL) version 2 or any later version' use:
SPDX-License-Identifier: GPL-2.0+
License-Text:
Full license text
::
SPDX-License-Identifier: MIT
SPDX-URL: https://spdx.org/licenses/MIT.html
Usage-Guide:
To use this license in source code, put the following SPDX
tag/value pair into a comment according to the placement
guidelines in the licensing rules documentation.
SPDX-License-Identifier: MIT
License-Text:
Full license text
|
2. Licenze deprecate:
Questo tipo di licenze dovrebbero essere usate solo per codice già esistente
o quando si prende codice da altri progetti. Le licenze sono disponibili
nei sorgenti del kernel nella cartella::
LICENSES/deprecated/
I file in questa cartella contengono il testo completo della licenza e i
`Metatag`_. Il nome di questi file è lo stesso usato come identificatore
di licenza SPDX e che deve essere usato nei file sorgenti.
Esempi::
LICENSES/deprecated/ISC
Contiene il testo della licenza Internet System Consortium e i suoi
metatag::
LICENSES/deprecated/GPL-1.0
Contiene il testo della versione 1 della licenza GPL e i suoi metatag.
Metatag:
I metatag necessari per le 'altre' ('other') licenze sono gli stessi
di usati per le `Licenze raccomandate`_.
Esempio del formato del file::
Valid-License-Identifier: ISC
SPDX-URL: https://spdx.org/licenses/ISC.html
Usage-Guide:
Usage of this license in the kernel for new code is discouraged
and it should solely be used for importing code from an already
existing project.
To use this license in source code, put the following SPDX
tag/value pair into a comment according to the placement
guidelines in the licensing rules documentation.
SPDX-License-Identifier: ISC
License-Text:
Full license text
|
3. Solo per doppie licenze
Queste licenze dovrebbero essere usate solamente per codice licenziato in
combinazione con un'altra licenza che solitamente è quella preferita.
Queste licenze sono disponibili nei sorgenti del kernel nella cartella::
LICENSES/dual
I file in questa cartella contengono il testo completo della rispettiva
licenza e i suoi `Metatags`_. I nomi dei file sono identici agli
identificatori di licenza SPDX che dovrebbero essere usati nei file
sorgenti.
Esempi::
LICENSES/dual/MPL-1.1
Questo file contiene il testo della versione 1.1 della licenza *Mozilla
Pulic License* e i metatag necessari::
LICENSES/dual/Apache-2.0
Questo file contiene il testo della versione 2.0 della licenza Apache e i
metatag necessari.
Metatag:
I requisiti per le 'altre' ('*other*') licenze sono identici a quelli per le
`Licenze raccomandate`_.
Esempio del formato del file::
Valid-License-Identifier: MPL-1.1
SPDX-URL: https://spdx.org/licenses/MPL-1.1.html
Usage-Guide:
Do NOT use. The MPL-1.1 is not GPL2 compatible. It may only be used for
dual-licensed files where the other license is GPL2 compatible.
If you end up using this it MUST be used together with a GPL2 compatible
license using "OR".
To use the Mozilla Public License version 1.1 put the following SPDX
tag/value pair into a comment according to the placement guidelines in
the licensing rules documentation:
SPDX-License-Identifier: MPL-1.1
License-Text:
Full license text
|
4. _`Eccezioni`:
Alcune licenze possono essere corrette con delle eccezioni che forniscono
diritti aggiuntivi. Queste eccezioni sono disponibili nei sorgenti del
kernel nella cartella::
LICENSES/exceptions/
I file in questa cartella contengono il testo completo dell'eccezione e i
`Metatag per le eccezioni`_.
Esempi::
LICENSES/exceptions/Linux-syscall-note
Contiene la descrizione dell'eccezione per le chiamate di sistema Linux
così come documentato nel file COPYING del kernel Linux; questo viene usato
per i file d'intestazione per la UAPI. Per esempio
/\* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note \*/::
LICENSES/exceptions/GCC-exception-2.0
Contiene la 'eccezione di linking' che permette di collegare qualsiasi
binario, indipendentemente dalla sua licenza, con un compilato il cui file
sorgente è marchiato con questa eccezione. Questo è necessario per creare
eseguibili dai sorgenti che non sono compatibili con la GPL.
_`Metatag per le eccezioni`:
Un file contenente un'eccezione deve avere i seguenti metatag:
- SPDX-Exception-Identifier:
Un identificatore d'eccezione che possa essere usato in combinazione con
un identificatore di licenza SPDX.
- SPDX-URL:
L'URL della pagina SPDX che contiene informazioni aggiuntive riguardanti
l'eccezione.
- SPDX-Licenses:
Una lista di licenze SPDX separate da virgola, che possono essere usate
con l'eccezione.
- Usage-Guidance:
Testo in formato libero per dare suggerimenti agli utenti. Il testo deve
includere degli esempi su come usare gli identificatori di licenza SPDX
in un file sorgente in conformità con le linea guida in
`Sintassi degli identificatori di licenza`_.
- Exception-Text:
Tutto il testo che compare dopo questa etichetta viene trattato
come se fosse parte del testo originale della licenza.
Esempi::
SPDX-Exception-Identifier: Linux-syscall-note
SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html
SPDX-Licenses: GPL-2.0, GPL-2.0+, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+
Usage-Guidance:
This exception is used together with one of the above SPDX-Licenses
to mark user-space API (uapi) header files so they can be included
into non GPL compliant user-space application code.
To use this exception add it with the keyword WITH to one of the
identifiers in the SPDX-Licenses tag:
SPDX-License-Identifier: <SPDX-License> WITH Linux-syscall-note
Exception-Text:
Full exception text
::
SPDX-Exception-Identifier: GCC-exception-2.0
SPDX-URL: https://spdx.org/licenses/GCC-exception-2.0.html
SPDX-Licenses: GPL-2.0, GPL-2.0+
Usage-Guidance:
The "GCC Runtime Library exception 2.0" is used together with one
of the above SPDX-Licenses for code imported from the GCC runtime
library.
To use this exception add it with the keyword WITH to one of the
identifiers in the SPDX-Licenses tag:
SPDX-License-Identifier: <SPDX-License> WITH GCC-exception-2.0
Exception-Text:
Full exception text
Per ogni identificatore di licenza SPDX e per le eccezioni dev'esserci un file
nella sotto-cartella LICENSES. Questo è necessario per permettere agli
strumenti di effettuare verifiche (come checkpatch.pl), per avere le licenze
disponibili per la lettura e per estrarre i diritti dai sorgenti, così come
raccomandato da diverse organizzazioni FOSS, per esempio l'`iniziativa FSFE
REUSE <https://reuse.software/>`_.
_`MODULE_LICENSE`
-----------------
I moduli del kernel necessitano di un'etichetta MODULE_LICENSE(). Questa
etichetta non sostituisce le informazioni sulla licenza del codice sorgente
(SPDX-License-Identifier) né fornisce informazioni che esprimono o
determinano l'esatta licenza sotto la quale viene rilasciato.
Il solo scopo di questa etichetta è quello di fornire sufficienti
informazioni al caricatore di moduli del kernel, o agli strumenti in spazio
utente, per capire se il modulo è libero o proprietario.
Le stringe di licenza valide per MODULE_LICENSE() sono:
============================= =============================================
"GPL" Il modulo è licenziato con la GPL versione 2.
Questo non fa distinzione fra GPL'2.0-only o
GPL-2.0-or-later. L'esatta licenza può essere
determinata solo leggendo i corrispondenti
file sorgenti.
"GPL v2" Stesso significato di "GPL". Esiste per
motivi storici.
"GPL and additional rights" Questa è una variante che esiste per motivi
storici che indica che i sorgenti di un
modulo sono rilasciati sotto una variante
della licenza GPL v2 e quella MIT. Per favore
non utilizzatela per codice nuovo.
"Dual MIT/GPL" Questo è il modo corretto per esprimere il
il fatto che il modulo è rilasciato con
doppia licenza a scelta fra: una variante
della GPL v2 o la licenza MIT.
"Dual BSD/GPL" Questo modulo è rilasciato con doppia licenza
a scelta fra: una variante della GPL v2 o la
licenza BSD. La variante esatta della licenza
BSD può essere determinata solo attraverso i
corrispondenti file sorgenti.
"Dual MPL/GPL" Questo modulo è rilasciato con doppia licenza
a scelta fra: una variante della GPL v2 o la
Mozilla Public License (MPL). La variante
esatta della licenza MPL può essere
determinata solo attraverso i corrispondenti
file sorgenti.
"Proprietary" Questo modulo è rilasciato con licenza
proprietaria. Questa stringa è solo per i
moduli proprietari di terze parti e non può
essere usata per quelli che risiedono nei
sorgenti del kernel. I moduli etichettati in
questo modo stanno contaminando il kernel e
gli viene assegnato un flag 'P'; quando
vengono caricati, il caricatore di moduli del
kernel si rifiuterà di collegare questi
moduli ai simboli che sono stati esportati
con EXPORT_SYMBOL_GPL().
============================= =============================================
|