↑點選藍字 關注我們
作者 | 李維朝,江蘇瑞途律師事務所合夥人
GPL許可證(General Public License)是應用最廣泛的開源許可證,作為互惠型許可證,以其強“傳染性”而著稱。
軟體著作權人以GPL許可證分發軟體,該軟體就以GPL許可證對任何人進行許可,成為我們常說的GPL程式。
使用人一旦將GPL程式與其自己開發的程式碼合併並分發了軟體,如果沒有采取技術隔離措施,使用人開發的那部分程式碼連同GPL程式一起就要以GPL許可證進行許可,遵守GPL許可證規定的義務。對“傳染性”是什麼卻有不同的理解。
一、什麼是“傳染性”
GPL V2第2條:你釋出或出版的軟體作品(包括程式的全部或一部分,也包括由程式的全部或部分演繹而成的作品)整體上必須受本許可協議條款的約束,並允許第三方免費使用。這些要求適用於修改後作品的整體。
GPL V3第5條:你必須在本許可證下將整個作品作為一個整體,授權給持有副本的任何人。因此本許可證與根據第7條而附加的任何條款一起,將適用於整個作品及其所有部分,無論它們是如何打包的。本許可證不允許以任何其他方式許可該作品,但不會使您單獨收到的許可無效。
“傳染性”規定見於GPL V2第2條和GPL V3第5條,核心意思是如果你分發的軟體(稱為目標軟體)包括你自己開發的程式以及GPL程式,你自己開發的程式與GPL程式作為整體成為GPL程式的演繹作品,目標軟體整體上受到GPL許可證的約束,應當以GPL許可證進行許可。
當然,GPL許可證也給了例外豁免,即,如果你自己開發的程式與GPL程式在技術上採取了隔離措施,使得你自己開發的程式與GPL程式不再成為一個整體軟體,而是相互獨立的兩個軟體,那麼,你自己開發的程式與GPL程式就不會作為整體認定為GPL程式的演繹作品,就不會受到GPL許可證的約束。
二、對“傳染性”的誤解
“傳染性”這個詞非常容易讓人理解GPL許可證的強著佐權特點,但同時也非常容易讓人誤解,以為GPL程式就像病毒一樣“傳染”,就像病毒在人與人之間的傳播,一個感染病毒的人將病毒傳染給另一個人或者一群人,使得人類整體感染病毒。

圖1-這樣理解對嗎
這種理解顯然是錯誤的。GPL許可證並不關心目標軟體中的各個檔案本身的許可證,而是關心目標軟體整體的許可證,只對整體許可證產生影響。
三、“傳染性”的本質
正如我們談論GPL等開源協議時常用的一個詞“許可證”,GPL最關心的是目標軟體應該怎樣對使用人進行許可,以GPL進行許可,還是其他。
仍以圖1為例,你自己開發的程式碼包括檔案B-I,各檔案之間不存在技術隔離措施,當你自己開發的程式碼連結檔案A,而檔案A適用GPL許可證,並且你自己開發的程式碼與檔案A不存在技術隔離措施,那麼,你自己開發的程式碼與檔案A構成一個整體,該整體軟體受GPL許可證的約束。
至於你自己開發的程式碼要以什麼許可證單獨對外許可,採用GPL以外的其他開源許可證,還是商業許可證,這對結果沒有影響,GPL許可證只約束目標軟體這一整體軟體。
如果你在分發目標軟體之後,又想對外進行商業許可,那麼你完全可以重寫檔案A,形成與檔案A相同功能的檔案J,再將檔案B-I與檔案J連結起來形成一個新的整體軟體,並以商業許可的方式對外發布。
也就是說,你自己開發的程式碼與受GPL許可證約束的檔案A合併之後,檔案A並不會把GPL“傳染”給你自己開發的程式碼。
我們再把這一討論設定得更復雜一些。我們都知道,今天的軟體已經幾乎沒有完全是自己的開發的了,或多或少都會引用他人開發的程式碼,大多數是以編譯好的檔案庫的形式使用。
如圖2所示,在你釋出的軟體中,你只開發了F,A-E都來自他人,它們的許可證各不相同,甚至有來自公有領域而沒有著作權的D,那麼你釋出的軟體該怎麼許可呢?

圖2-軟體開發現狀

圖3-技術隔離
四、開源實踐之更換許可證
經過上述講解,我們明白了GPL“傳染性”的本質,它不會把你自己開發的程式碼“傳染”成GPL,更不可能把你引用的他人開發的程式碼“傳染”成GPL,它只會影響最終對外發布的軟體整體。
正是因為“傳染性”的本質,在開源實踐中,軟體版本迭代時更換許可證也不鮮見,例如Cygwin庫從2.5.2版開始,採用LGPL許可證取代GPL許可證,LGPL許可證比GPL許可證寬鬆,允許在動態連結Cygwin庫時保持其他部分程式碼閉源。
需要指出的是,更換許可證不影響在此之前已經發布的版本,這些版本仍然保持原來的許可方式不變。
相反地,也有難以更換許可證的情況。以Linux核心為例,Linux核心採用GPL v2許可證,從技術和法律角度來看,Linux核心想要更換許可證實屬不易。Linux核心包括很多GPL元件,還包括很多他人貢獻的程式碼,只有在移除GPL元件並取得其他貢獻者的同意之後,才有可能更換許可證。
在(2019)粵73知民初207號案件中,法院認為根據GPLV3協議條款約定和性質,只要某個軟體版本加入GPLV3協議,則無法隨意刪除GPLV3協議,該版本原始碼將永久保持開源,即使授權方刪除GPLV3協議也無回溯力,授權方只能在後續的版本中變更或刪除GPLV3協議,但並不影響此前版本繼續適用GPLV3協議的效力。
本案中,羅盒公司確認其主張的涉案軟體2017年12月30日版本與撤回GPLV3協議即2017年10月29日前的版本差別不大,因此本院認定羅盒公司主張權利的版本仍屬於適用GPLV3協議的開源軟體。
即,法院認為羅盒公司2017年12月30日版本不能更換許可協議的原因在於,該版本與之前以GPL許可證釋出的版本實質相同。
很顯然法院的邏輯是錯誤的,真正的原因是,2017年12月30日版本合併有他人貢獻的程式碼,而他人是基於GPL許可證來貢獻程式碼的,在沒有取得貢獻者同意的情況下,羅盒公司不能獨立更換許可證。
也就是說如果你對全部的程式碼享有完整的權利,在不同版本中採用不同的許可方式就沒有那麼多的限制了。
五、總結
GPL“傳染性”並不是像病毒那樣傳染,而僅僅是對最終釋出的整體軟體的許可證的選擇造成影響,本質上是多個許可證之間的相容性問題,需要從多個許可證裡面選擇一個能夠相容其他許可證的許可證。
如果各個許可證之間存在衝突,不能相容,那你就無法從這些許可證中選擇了,如果可能的話你需要創設一個新的許可證,從而把這些不相容的許可證統一起來,如果這也做不到的話,那你就只能把某些程式碼移除了。
我們要正確理解開源許可證的本質,使用開源軟體推動軟體產業的發展,為社會大發展提供效率工具。
END
熱門文章


↓分享、在看與點贊~Orz