開源軟件項目合規審查涉及的GPL協議的傳染性問題(上)
作者:丁華 陳岱源 2021-06-22一、GPL開源軟件許可協議的“傳染性”概述
(一) GPL開源軟件許可協議的法律性質 GPL開源軟件許可協議的全稱為GNU通用公共許可協議(GNU General Public License),該開源協議自1989年推出第一版本以來,目前已經累計推出了三個主要版本,最新版本為2007年推出的GPL.v3。GPL系列許可證一直是開源軟件領域最受歡迎的軟件許可之一。在三個版本中,最為常用的是GPL.v2。 GPL開源軟件許可協議并非放棄軟件著作權,而是通過強制性承襲適用GPL協議的方式,保障所有的開發者都能夠取得概括性的獲得和使用開源軟件的自由(copyleft)。因此,開源軟件許可協議的法律性質依然是著作權許可合同[1]。 另外,由于適用GPL協議開源軟件的后續開發者均無權選擇排除適用GPL協議,而僅有開源軟件的最初版本開發者可以選擇開源軟件適用何種協議,因此GPL開源協議也是一種由最初版本開發者預先擬定的格式合同。盡管開源協議中的義務性條款頗為嚴格,且沒有任何商議的余地,但是相較于需要支付許可費用的商業著作權許可成本和需要投入人力、資金和時間的軟件研發成本,秉持自由、共享和免費的開源協議對保障軟件行業的高速發展具有重要意義。因此開源協議中約定的義務未不適當地損害使用人的利益,是有效的格式條款[2]。 (二) GPL開源軟件許可協議的“傳染性”以及違反的法律風險 為保證開發者運行、學習、修改、分發副本等“自由”(copyleft)不被中斷,GPL開源協議具有“縱向”和“橫向”兩個維度的“傳染性”。 在“傳染性”的“縱向”維度上,開源軟件會“傳染”自身的修改版本(modifications)或衍生作品(a work based on the Program)。例如GPL.v2授予后續開發者修改開源軟件(及其副本)的權利,但是對于修改后形成的修改版本或衍生作品,一旦涉及到分發(distribute)或公布(publish),則應滿足使得修改版本整體繼續依照對應的GPL協議進行開源[3]。 在“傳染性”的“橫向”維度上,在一定的條件下,開源軟件會“傳染”自身及修改版本以外的,一同分發、傳輸的軟件或軟件的其他部分。例如,GPL.v3規定,如果在開發者傳輸[4]的軟件時,開源軟件與其他軟件之間組合的目的是為了生成一個更大的程序,則其他軟件也需要成為受到相應的GPL協議傳染的開源軟件[5]。 根據GPL協議的規定,如果違反“傳染性”條款,將直接導致通過開源協議獲得著作權許可(自由 copyleft)無效和被終止[6]。因此,違反“傳染性”條款以及其他GPL開源協議中的義務性條款的情形發生,構成著作權許可合同自動終止并自始無效的條件。 傳染性條款的加入,使得GPL開源軟件和派生作品的獲取和使用“自由”能夠得到有效保障,但是對于企業的開源軟件合規審查也提出更高的要求。如果企業在軟件的開發過程中有意或者無意中混入了GPL開源代碼,而又未按照GPL要求履行相關開源義務,則可能會導致軟件合規法律風險,例如:按照GPL的規定,如果開發者不遵守本協議,則開源協議授予的“自由”將會被無效和被終止,使用開源軟件的行為將直接成為一種未經授權的著作權侵權行為,開發者可能會面臨來自開源軟件著作權人的侵權索賠以及停止使用的知識產權行為禁令。同時,如果在企業對外宣傳“自主研發具有自主知識產權”的軟件中被發現存在適用GPL協議的開源代碼,而企業又并沒有履行開源義務,也會對企業的商譽造成的負面影響。 二、GPL.v1的“傳染性”條款摘要及評述 (一) GPL.v1的“傳染性”條款摘要 第2條. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: 您可以修改本程序的副本或程序的任何部分,并可以根據第1款的授權復制和分發此類修改,但前提是您還必須執行以下操作: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and a)使修改后的軟件文件帶有明顯的聲明,聲明您已修改代碼和修改的日期;和 b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). b)【傳染性條款】您應當使分發或發布的全部作品(包括本程序或其任何部分的全部或部分內容,無論是否經過修改)均根據本通則的條款,免費授予所有第三方GPL許可證(除非您選擇向第三方提供代碼擔保可以進行收費)。 c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. c)如果修改后的程序在運行時通常以交互方式讀取命令,則必須以一種最簡單,最常用的方式使它在開始運行以進行交互使用時,打印或顯示聲明,其中包括適當的版權聲明以及沒有擔保(或者說您提供擔保),并且用戶可以在這些條件下重新分發程序,您還需要告訴用戶如何查看此通用公共許可證的副本。 d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 【傳染性例外條款】僅將本程序(或其衍生產品)與另一項獨立作品聚合到一定數量的存儲或分發介質上,并不會將獨立作品歸入GPL的管轄。 第3條.You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: 您需要根據上面的第1和第2款規定,以提供目標代碼或可執行格式,復制和分發本程序(或根據第(2)款的規定,復制或分發程序的一部分或衍生作品)。除此之外,您還需要執行以下任一操作: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, 附上相應的源碼。源碼要求完整且機器可讀,并在條款一、二的約束下 …… Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; 作品的源代碼是指對作品進行修改的首選形式。對于可執行文件,完整的源代碼表示該文件包含的所有模塊的所有源代碼。 (二) GPL.v1的“傳染性”條款評述 為了保障開源軟件自由使用的行為,在開源軟件協議GPL.v1中就規定了“傳染性”條款。 根據GPL.v1的“傳染性”條款,如果開源軟件的修改者和使用者,需要復制或分發開源軟件,則GPL.v1對于完整包含了開源軟件全部或部分、完整包含了修改過的開源軟件全部或部分從而形成的派生作品,要求繼續遵循GPL.v1進行開源。 根據GPL.v1的“傳染性”例外條款,GPL.v1規定阻斷傳染性的情形是:如果“獨立作品”與開源軟件“僅僅聚合”在同一介質上,則“獨立作品”并不會因為聚合行為而被GPL.v1傳染,該“獨立作品”可獨立選擇適用的許可協議。 三、GPL.v2的“傳染性”條款摘要及評述 (一) GPL.v2的“傳染性”條款摘要 第2條:You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: 您可以修改開源軟件的副本,或者開源軟件的副本的任何部分,從而形成一個基于開源軟件的作品(派生作品)。只要滿足上面的三個條件(免責聲明、保留協議、一同發售)以及下列條件,就可以對開源軟件的派生作品進行復制和發行 a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. 您必須在您修改了的文件中醒目地聲明您的修改、修改日期 b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. 【傳染性條款】您發行或者發布的作品,如果包含開源軟件的全部或部分,或派生自開源軟件或開源軟件的部分。那么您就應該將這個作品整體,允許第三方在遵守本協議的情況下,進行本協議的使用,并且不能收費。 c) …… These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. 【獨立部分的發布方式對傳染性的影響】上述要求對派生作品整體有效。但是如果該派生作品中某些可區分的部分并非派生自開源軟件,并且可以被合理地看作是從中分離的獨立作品,則當您將它們分開發布時,這種獨立部分可以不受本協議約束。但是如果開發者在發布開源軟件的時候將上述獨立的部分與派生作品一起發布,那么整個派生作品連同獨立部分將被視為一個整體,受GPL.v2協議約束。 Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. 因此,本節的目的不是主張權利或反對完全由你開發的作品的權利; 相反,目的是控制分發開源軟件的派生作品或匯編作品的行為。 In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 【傳染性例外條款】另外,僅僅將另一個作品(并非基于開源軟件)和開源軟件或者開源軟件的衍生作品聚合在一起,并不會導致其他的作品受到本協議的約束。 (二) GPL.v2的“傳染性”條款評述 GPL.v2依然延續了GPL.v1“傳染性”條款,即GPL.v2對分發開源軟件修改后形成的派生作品依然采用嚴格的開源限制。只要開發者分發或發布的作品包含開源軟件的全部或部分,或派生自開源軟件或開源軟件的部分,均應當將作品整體開源,允許第三方在遵守本協議的情況下,進行本協議的使用,并且不能收費。 在GPL.v1“傳染性”條款基礎上,GPL.v2還進一步明確了:“傳染性”對開源軟件的派生作品中的獨立部分(section)的區分適用原則。 當作品中不涉及開源軟件代碼的獨立部分(section)具有足夠的獨立性,且開發者將該作品中獨立部分(section)與作品中涉及開源軟件的其他部分(section)分開發布,則作品中這種獨立部分(section)可以作為傳染性的例外,不受GPLv2的約束;但如果開發者將原本獨立的部分(section)與作品中涉及開源軟件的其他部分一起發布,則原本獨立的部分(section)則會被傳染,需要開源并受到GPLv2的約束。 在聚合作品“傳染性”例外問題上,GPL.v2與v1并沒有實質的區別。與基于開源軟件的派生作品聚合的獨立作品,可以不受到開源軟件的傳染性的約束。 四、GPL.v3的“傳染性”條款摘要及評述 (一) GPL.v3中“傳染性”條款摘要 第4條. Conveying Verbatim Copies.傳播完整版本 You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. 您可以原封不動地分發您獲得的開源軟件的源代碼,只要您: 1、顯著而適當地在每個副本上發布一個合適的版權通告; 2、保持完整所有敘述本授權和任何按照第7節加入的非許可的條款; 3、保持完整所有的免責申明; 4、并隨程序給所有的接受者一份本授權的副本。 您就可以通過任何媒介發布本程序源代碼的未被修改過的完整副本 第5條. Conveying Modified Source Versions.傳播修改過的源代碼 You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: 您可以在第4節的條款下以源碼形式發布一個基于本程序的軟件,或者從本程序中制作該軟件需要進行的修改,只要您同時滿足所有以下條件: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. 軟件必須包含明確的通知說明您修改了它,并給出相應的修改日期。 b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. 軟件必須包含明確的通知,聲明這個軟件是在本協議(以及本協議第七節增加的所有條件)授權下發布的,本條款修改了第四節的“保持所有通知完整”的要求。 c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. 【傳染性條款】被許可人必須將整個作品整體性地通過本許可證許可給持有復制件的人,無論組件以何種方式組成作品,本許可證及第7節所附加條款都將適用于作品的整體及其一切組件。本許可證不包括以其他方式授權作品許可。但被許可人單獨接收到許可不會導致該許可證失效。 …… A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 【傳染性例外條款】一個受保護的開源程序和其它獨立程序的“組合”,該“組合”作品并非該開源程序的擴展,也不是為了在某個存儲或發布媒介上,和開源程序的進行組合,為的是生成更大的程序,且如果“組合”的版權對使用者進行訪問等合法權利的限制,不超過獨立的作品對使用者進行訪問等合法權利的限制。那么這樣的“組合”就被稱為“聚合體”。包含開源程序的聚合體中,GPL并不會適用于開源程序以外的該聚合體的其他部分; (二) GPL.v3的“傳染性”條款評述 GPL.v3在規定傳染性問題時,首先調整了此前v2版本的用詞,v2版本在規定傳染性問題時,著眼點為“分發”(distribute),而v3版本的著眼點為“傳輸、傳播”(convey)。根據GNU發布的說明,分發與傳播,并無明顯區別,只是由于GNU在制定過程中,制定者發現一些法律體系在其版權法中使用“distribute”一詞,但是含義和GPL.v2的distribute并不相同。因此為了避免同詞不同義的情況發生,GNU創造了新的術語convey,用來避免這些不同造成的混淆和問題[7]。因此,GPL.v2和v3在將“傳染性”作為原則這一點上并沒有明顯的差別。 GPL.v3沒有延續GPL.v2中“傳染性”對開源軟件的派生作品中的獨立部分(section)的區分適用原則。GPL.v3采用了更嚴格的統一傳染性標準,GPL.v3將修改后的開源軟件及其他部分(無論是否是獨立部分),均統一視為一個完整的作品,因此在傳輸(convey)、分發這樣的作品時,無論其中開源部分與獨立部分如何組合(無論是分開發布或一起發布),對這個作品整體應當適用開源協議GPL.v3。 在橫向傳染性上,經過兩個版本的迭代演進,v3對于“傳染性”的例外規定比v2更為清晰,v3進一步明確了“聚合”(Mere aggregation)的概念邊界。“聚合”軟件指的是,除獨立軟件與開源軟件及其衍生作品存儲在同一個介質上并進行組合,為的是生成更大的程序以外,獨立作品與受開源協議保護的作品的“組合”,且這一“組合”(A compilation)的版權對使用者進行訪問等合法權利的限制,不超過獨立的作品(包括獨立的作品和開源軟件及其衍生作品)單獨自身對使用者進行訪問等合法權利的限制。 注釋: [1] 徐瑄,張漢華.計算機開源軟件許可證的許可條款性質認定——美國聯邦巡回上訴法院第2008-1001號裁決評析[J].知識產權,2014(06):85-93. [2] 羅瑞雪,《開源協議適用范圍及其對軟件著作權侵權判定的影響》,中國版權,http://ipc.court.gov.cn/zh-cn/news/view-842.html [3] 參見GPL.v2協議第2條,You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:……b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. [4] GPL.v3對于相關行為義務的表述進行了修改,用詞改為convey而非第二版本的distribute,根據自由軟件基金會的解釋,前述用詞的改變并沒有改變行為的實質,只是為了避免與部分法域的法律術語相沖突因而進行的技術性調整。 [5] 參見GPL.v3協議,第5條,該條規定了構成軟件“聚合體”(aggregate)的前提之一為開源軟件與其他軟件的“組合”并非為了形成更大的程序,反之,如果這樣的“組合”被法院認定為一個更大的軟件的兩個部分,那么將無法構成“聚合體”,從而應當進行整體開源。 [6] 以GPL.v2為例,該協議第4條規定:You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. 在本協議授權之外,您不能復制、修改、再授權或分發開源軟件。任何用其他方法復制、修改、再授權或分發開源軟件的企圖都是無效的,并使您從本協議獲得的權利自動終止。 [7] Frequently Asked Questions about the GNU Licenses, https://www.gnu.org/licenses/gpl-faq.en.html






