cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

license-rules.rst (14956B)


      1.. SPDX-License-Identifier: GPL-2.0
      2
      3.. SPDX-License-Identifier: GPL-2.0
      4
      5.. include:: ../disclaimer-zh_TW.rst
      6
      7:Original: :ref:`Documentation/process/license-rules.rst <kernel_licensing>`
      8:Translator: Alex Shi <alex.shi@linux.alibaba.com>
      9             Hu Haowen <src.res@email.cn>
     10
     11.. _tw_kernel_licensing:
     12
     13Linux內核許可規則
     14=================
     15
     16Linux內核根據LICENSES/preferred/GPL-2.0中提供的GNU通用公共許可證版本2
     17(GPL-2.0)的條款提供,並在LICENSES/exceptions/Linux-syscall-note中顯式
     18描述了例外的系統調用,如COPYING文件中所述。
     19
     20此文檔文件提供了如何對每個源文件進行注釋以使其許可證清晰明確的說明。
     21它不會取代內核的許可證。
     22
     23內核原始碼作爲一個整體適用於COPYING文件中描述的許可證,但是單個源文件可以
     24具有不同的與GPL-20兼容的許可證::
     25
     26    GPL-1.0+ : GNU通用公共許可證v1.0或更高版本
     27    GPL-2.0+ : GNU通用公共許可證v2.0或更高版本
     28    LGPL-2.0 : 僅限GNU庫通用公共許可證v2
     29    LGPL-2.0+: GNU 庫通用公共許可證v2或更高版本
     30    LGPL-2.1 : 僅限GNU寬通用公共許可證v2.1
     31    LGPL-2.1+: GNU寬通用公共許可證v2.1或更高版本
     32
     33除此之外,個人文件可以在雙重許可下提供,例如一個兼容的GPL變體,或者BSD,
     34MIT等許可。
     35
     36用戶空間API(UAPI)頭文件描述了用戶空間程序與內核的接口,這是一種特殊情況。
     37根據內核COPYING文件中的注釋,syscall接口是一個明確的邊界,它不會將GPL要求
     38擴展到任何使用它與內核通信的軟體。由於UAPI頭文件必須包含在創建在Linux內核
     39上運行的可執行文件的任何源文件中,因此此例外必須記錄在特別的許可證表述中。
     40
     41表達源文件許可證的常用方法是將匹配的樣板文本添加到文件的頂部注釋中。由於
     42格式,拼寫錯誤等,這些「樣板」很難通過那些在上下文中使用的驗證許可證合規性
     43的工具。
     44
     45樣板文本的替代方法是在每個源文件中使用軟體包數據交換(SPDX)許可證標識符。
     46SPDX許可證標識符是機器可解析的,並且是用於提供文件內容的許可證的精確縮寫。
     47SPDX許可證標識符由Linux 基金會的SPDX 工作組管理,並得到了整個行業,工具
     48供應商和法律團隊的合作夥伴的一致同意。有關詳細信息,請參閱
     49https://spdx.org/
     50
     51Linux內核需要所有源文件中的精確SPDX標識符。內核中使用的有效標識符在
     52`許可標識符`_ 一節中進行了解釋,並且已可以在
     53https://spdx.org/licenses/ 上的官方SPDX許可證列表中檢索,並附帶許可證
     54文本。
     55
     56許可標識符語法
     57--------------
     58
     591.安置:
     60
     61   內核文件中的SPDX許可證標識符應添加到可包含注釋的文件中的第一行。對於大多
     62   數文件,這是第一行,除了那些在第一行中需要'#!PATH_TO_INTERPRETER'的腳本。
     63   對於這些腳本,SPDX標識符進入第二行。
     64
     65|
     66
     672. 風格:
     68
     69   SPDX許可證標識符以注釋的形式添加。注釋樣式取決於文件類型::
     70
     71      C source:	// SPDX-License-Identifier: <SPDX License Expression>
     72      C header:	/* SPDX-License-Identifier: <SPDX License Expression> */
     73      ASM:	/* SPDX-License-Identifier: <SPDX License Expression> */
     74      scripts:	# SPDX-License-Identifier: <SPDX License Expression>
     75      .rst:	.. SPDX-License-Identifier: <SPDX License Expression>
     76      .dts{i}:	// SPDX-License-Identifier: <SPDX License Expression>
     77
     78   如果特定工具無法處理標準注釋樣式,則應使用工具接受的相應注釋機制。這是在
     79   C 頭文件中使用「/\*\*/」樣式注釋的原因。過去在使用生成的.lds文件中觀察到
     80   構建被破壞,其中'ld'無法解析C++注釋。現在已經解決了這個問題,但仍然有較
     81   舊的彙編程序工具無法處理C++樣式的注釋。
     82
     83|
     84
     853. 句法:
     86
     87   <SPDX許可證表達式>是SPDX許可證列表中的SPDX短格式許可證標識符,或者在許可
     88   證例外適用時由「WITH」分隔的兩個SPDX短格式許可證標識符的組合。當應用多個許
     89   可證時,表達式由分隔子表達式的關鍵字「AND」,「OR」組成,並由「(」,「)」包圍。
     90
     91   帶有「或更高」選項的[L]GPL等許可證的許可證標識符通過使用「+」來表示「或更高」
     92   選項來構建。::
     93
     94      // SPDX-License-Identifier: GPL-2.0+
     95      // SPDX-License-Identifier: LGPL-2.1+
     96
     97   當需要修正的許可證時,應使用WITH。 例如,linux內核UAPI文件使用表達式::
     98
     99      // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
    100      // SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note
    101
    102   其它在內核中使用WITH例外的事例如下::
    103
    104      // SPDX-License-Identifier: GPL-2.0 WITH mif-exception
    105      // SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
    106
    107   例外只能與特定的許可證標識符一起使用。有效的許可證標識符列在異常文本文件
    108   的標記中。有關詳細信息,請參閱 `許可標識符`_ 一章中的 `例外`_ 。
    109
    110   如果文件是雙重許可且只選擇一個許可證,則應使用OR。例如,一些dtsi文件在雙
    111   許可下可用::
    112
    113      // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
    114
    115   內核中雙許可文件中許可表達式的示例::
    116
    117      // SPDX-License-Identifier: GPL-2.0 OR MIT
    118      // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
    119      // SPDX-License-Identifier: GPL-2.0 OR Apache-2.0
    120      // SPDX-License-Identifier: GPL-2.0 OR MPL-1.1
    121      // SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT
    122      // SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause OR OpenSSL
    123
    124   如果文件具有多個許可證,其條款全部適用於使用該文件,則應使用AND。例如,
    125   如果代碼是從另一個項目繼承的,並且已經授予了將其放入內核的權限,但原始
    126   許可條款需要保持有效::
    127
    128      // SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) AND MIT
    129
    130   另一個需要遵守兩套許可條款的例子是::
    131
    132      // SPDX-License-Identifier: GPL-1.0+ AND LGPL-2.1+
    133
    134許可標識符
    135----------
    136
    137當前使用的許可證以及添加到內核的代碼許可證可以分解爲:
    138
    1391. _`優先許可`:
    140
    141   應儘可能使用這些許可證,因爲它們已知完全兼容並廣泛使用。這些許可證在內核
    142   目錄::
    143
    144      LICENSES/preferred/
    145
    146   此目錄中的文件包含完整的許可證文本和 `元標記`_ 。文件名與SPDX許可證標識
    147   符相同,後者應用於源文件中的許可證。
    148
    149   例如::
    150
    151      LICENSES/preferred/GPL-2.0
    152
    153   包含GPLv2許可證文本和所需的元標籤::
    154
    155      LICENSES/preferred/MIT
    156
    157   包含MIT許可證文本和所需的元標記
    158
    159   _`元標記`:
    160
    161   許可證文件中必須包含以下元標記:
    162
    163   - Valid-License-Identifier:
    164
    165     一行或多行, 聲明那些許可標識符在項目內有效, 以引用此特定許可的文本。通
    166     常這是一個有效的標識符,但是例如對於帶有'或更高'選項的許可證,兩個標識
    167     符都有效。
    168
    169   - SPDX-URL:
    170
    171     SPDX頁面的URL,其中包含與許可證相關的其他信息.
    172
    173   - Usage-Guidance:
    174
    175     使用建議的自由格式文本。該文本必須包含SPDX許可證標識符的正確示例,因爲
    176     它們應根據 `許可標識符語法`_ 指南放入源文件中。
    177
    178   - License-Text:
    179
    180     此標記之後的所有文本都被視爲原始許可文本
    181
    182   文件格式示例::
    183
    184      Valid-License-Identifier: GPL-2.0
    185      Valid-License-Identifier: GPL-2.0+
    186      SPDX-URL: https://spdx.org/licenses/GPL-2.0.html
    187      Usage-Guide:
    188        To use this license in source code, put one of the following SPDX
    189	tag/value pairs into a comment according to the placement
    190	guidelines in the licensing rules documentation.
    191	For 'GNU General Public License (GPL) version 2 only' use:
    192	  SPDX-License-Identifier: GPL-2.0
    193	For 'GNU General Public License (GPL) version 2 or any later version' use:
    194	  SPDX-License-Identifier: GPL-2.0+
    195      License-Text:
    196        Full license text
    197
    198   ::
    199
    200      SPDX-License-Identifier: MIT
    201      SPDX-URL: https://spdx.org/licenses/MIT.html
    202      Usage-Guide:
    203	To use this license in source code, put the following SPDX
    204	tag/value pair into a comment according to the placement
    205	guidelines in the licensing rules documentation.
    206	  SPDX-License-Identifier: MIT
    207      License-Text:
    208        Full license text
    209
    210|
    211
    2122. 不推薦的許可證:
    213
    214   這些許可證只應用於現有代碼或從其他項目導入代碼。這些許可證在內核目錄::
    215
    216      LICENSES/other/
    217
    218   此目錄中的文件包含完整的許可證文本和 `元標記`_ 。文件名與SPDX許可證標識
    219   符相同,後者應用於源文件中的許可證。
    220
    221   例如::
    222
    223      LICENSES/other/ISC
    224
    225   包含國際系統聯合許可文本和所需的元標籤::
    226
    227      LICENSES/other/ZLib
    228
    229   包含ZLIB許可文本和所需的元標籤.
    230
    231   元標籤:
    232
    233   「其他」許可證的元標籤要求與 `優先許可`_ 的要求相同。
    234
    235   文件格式示例::
    236
    237      Valid-License-Identifier: ISC
    238      SPDX-URL: https://spdx.org/licenses/ISC.html
    239      Usage-Guide:
    240        Usage of this license in the kernel for new code is discouraged
    241	and it should solely be used for importing code from an already
    242	existing project.
    243        To use this license in source code, put the following SPDX
    244	tag/value pair into a comment according to the placement
    245	guidelines in the licensing rules documentation.
    246	  SPDX-License-Identifier: ISC
    247      License-Text:
    248        Full license text
    249
    250|
    251
    2523. _`例外`:
    253
    254   某些許可證可以修改,並允許原始許可證不具有的某些例外權利。這些例外在
    255   內核目錄::
    256
    257      LICENSES/exceptions/
    258
    259   此目錄中的文件包含完整的例外文本和所需的 `例外元標記`_ 。
    260
    261   例如::
    262
    263      LICENSES/exceptions/Linux-syscall-note
    264
    265   包含Linux內核的COPYING文件中記錄的Linux系統調用例外,該文件用於UAPI
    266   頭文件。例如::
    267
    268      LICENSES/exceptions/GCC-exception-2.0
    269
    270   包含GCC'連結例外',它允許獨立於其許可證的任何二進位文件與標記有此例外的
    271   文件的編譯版本連結。這是從GPL不兼容原始碼創建可運行的可執行文件所必需的。
    272
    273   _`例外元標記`:
    274
    275   以下元標記必須在例外文件中可用:
    276
    277   - SPDX-Exception-Identifier:
    278
    279     一個可與SPDX許可證標識符一起使用的例外標識符。
    280
    281   - SPDX-URL:
    282
    283     SPDX頁面的URL,其中包含與例外相關的其他信息。
    284
    285   - SPDX-Licenses:
    286
    287     以逗號分隔的例外可用的SPDX許可證標識符列表。
    288
    289   - Usage-Guidance:
    290
    291     使用建議的自由格式文本。必須在文本後面加上SPDX許可證標識符的正確示例,
    292     因爲它們應根據 `許可標識符語法`_ 指南放入源文件中。
    293
    294   - Exception-Text:
    295
    296     此標記之後的所有文本都被視爲原始異常文本
    297
    298   文件格式示例::
    299
    300      SPDX-Exception-Identifier: Linux-syscall-note
    301      SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html
    302      SPDX-Licenses: GPL-2.0, GPL-2.0+, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+
    303      Usage-Guidance:
    304        This exception is used together with one of the above SPDX-Licenses
    305	to mark user-space API (uapi) header files so they can be included
    306	into non GPL compliant user-space application code.
    307        To use this exception add it with the keyword WITH to one of the
    308	identifiers in the SPDX-Licenses tag:
    309	  SPDX-License-Identifier: <SPDX-License> WITH Linux-syscall-note
    310      Exception-Text:
    311        Full exception text
    312
    313   ::
    314
    315      SPDX-Exception-Identifier: GCC-exception-2.0
    316      SPDX-URL: https://spdx.org/licenses/GCC-exception-2.0.html
    317      SPDX-Licenses: GPL-2.0, GPL-2.0+
    318      Usage-Guidance:
    319        The "GCC Runtime Library exception 2.0" is used together with one
    320	of the above SPDX-Licenses for code imported from the GCC runtime
    321	library.
    322        To use this exception add it with the keyword WITH to one of the
    323	identifiers in the SPDX-Licenses tag:
    324	  SPDX-License-Identifier: <SPDX-License> WITH GCC-exception-2.0
    325      Exception-Text:
    326        Full exception text
    327
    328
    329所有SPDX許可證標識符和例外都必須在LICENSES子目錄中具有相應的文件。這是允許
    330工具驗證(例如checkpatch.pl)以及準備好從源讀取和提取許可證所必需的, 這是
    331各種FOSS組織推薦的,例如 `FSFE REUSE initiative <https://reuse.software/>`_.
    332
    333_`模塊許可`
    334-----------------
    335
    336   可加載內核模塊還需要MODULE_LICENSE()標記。此標記既不替代正確的原始碼
    337   許可證信息(SPDX-License-Identifier),也不以任何方式表示或確定提供模塊
    338   原始碼的確切許可證。
    339
    340   此標記的唯一目的是提供足夠的信息,該模塊是否是自由軟體或者是內核模塊加
    341   載器和用戶空間工具的專有模塊。
    342
    343   MODULE_LICENSE()的有效許可證字符串是:
    344
    345    ============================= =============================================
    346    "GPL"			  模塊是根據GPL版本2許可的。這並不表示僅限於
    347                                  GPL-2.0或GPL-2.0或更高版本之間的任何區別。
    348                                  最正確許可證信息只能通過相應源文件中的許可證
    349                                  信息來確定
    350
    351    "GPL v2"			  和"GPL"相同,它的存在是因爲歷史原因。
    352
    353    "GPL and additional rights"   表示模塊源在GPL v2變體和MIT許可下雙重許可的
    354                                  歷史變體。請不要在新代碼中使用。
    355
    356    "Dual MIT/GPL"		  表達該模塊在GPL v2變體或MIT許可證選擇下雙重
    357                                  許可的正確方式。
    358
    359    "Dual BSD/GPL"		  該模塊根據GPL v2變體或BSD許可證選擇進行雙重
    360                                  許可。 BSD許可證的確切變體只能通過相應源文件
    361                                  中的許可證信息來確定。
    362
    363    "Dual MPL/GPL"		  該模塊根據GPL v2變體或Mozilla Public License
    364                                  (MPL)選項進行雙重許可。 MPL許可證的確切變體
    365                                  只能通過相應的源文件中的許可證信息來確定。
    366
    367    "Proprietary"		  該模塊屬於專有許可。此字符串僅用於專有的第三
    368                                  方模塊,不能用於在內核樹中具有原始碼的模塊。
    369                                  以這種方式標記的模塊在加載時會使用'P'標記汙
    370                                  染內核,並且內核模塊加載器拒絕將這些模塊連結
    371                                  到使用EXPORT_SYMBOL_GPL()導出的符號。
    372    ============================= =============================================
    373
    374