五種預(yù)防開(kāi)源許可違規(guī)的方法
開(kāi)發(fā)人員可以通過(guò)將開(kāi)源軟件集成到其代碼庫(kù)中,節(jié)省時(shí)間并避免重復(fù)發(fā)明輪子。然而,這也帶來(lái)了嚴(yán)重的許可侵權(quán)風(fēng)險(xiǎn)。你必須遵守適用于重新使用的開(kāi)源代碼的眾多開(kāi)源許可證之一。如果你不這樣做,你(或你所在公司)有可能因違反開(kāi)源許可證條款而被起訴。即使這種訴訟并不普遍發(fā)生,它們確實(shí)存在。
1、熟悉開(kāi)源許可證
了解開(kāi)源許可證是防止開(kāi)源許可侵權(quán)問(wèn)題中最重要的一步。很容易認(rèn)為所有開(kāi)源許可證都施加相同的條件,或者它們都基本要求源代碼的持續(xù)可用性。實(shí)際上,有數(shù)十種不同的開(kāi)源許可證,它們都有著非常不同的條款。簡(jiǎn)單地認(rèn)為只要你從一個(gè)開(kāi)源項(xiàng)目獲取代碼,你可以隨意使用它并保持源代碼可訪問(wèn),這是一個(gè)嚴(yán)重的錯(cuò)誤。幾個(gè)開(kāi)源許可證的一個(gè)典型但經(jīng)常被忽視的條件可能是需要向原始作者提供致謝。
2、記錄你使用的開(kāi)源內(nèi)容
建立一個(gè)標(biāo)準(zhǔn)化的方法來(lái)記錄你使用開(kāi)源代碼的情況是一個(gè)優(yōu)秀的做法。導(dǎo)入模塊或從 GitHub 粘貼代碼并不難。但如果你不追蹤代碼來(lái)自何處以及使用了何種許可證,你可能會(huì)忘記在代碼庫(kù)中如何以及在哪里集成開(kāi)源內(nèi)容。此外,如果你在借用代碼時(shí)無(wú)法證明自己遵守了有效的許可條件,那么在開(kāi)源許可證發(fā)生變化時(shí)可能會(huì)產(chǎn)生問(wèn)題??紤]在文檔維基(如果有的話)中添加一個(gè)頁(yè)面,列出你使用的開(kāi)源代碼,以避免出現(xiàn)這個(gè)問(wèn)題。每當(dāng)你包含開(kāi)源組件或依賴時(shí),至少在你自己的源代碼中添加注釋。
3、避免使用未經(jīng)授權(quán)的開(kāi)源組件
有時(shí),你可能會(huì)偶然發(fā)現(xiàn)一個(gè)隱藏的 GitHub 存儲(chǔ)庫(kù)或其他源代碼托管位置,其中包含你希望使用的代碼,但沒(méi)有提到任何許可指南。你可能會(huì)認(rèn)為代碼的創(chuàng)建者希望讓其成為開(kāi)源代碼,并且你可以根據(jù)自己的意愿使用它。但這是一個(gè)危險(xiǎn)的假設(shè)。開(kāi)發(fā)人員可能會(huì)后續(xù)對(duì)代碼設(shè)置特定的許可條件,并要求你遵守這些條件,這可能導(dǎo)致未來(lái)產(chǎn)生許可侵權(quán)的指控。除非你有非常充分的理由,否則避免使用缺乏明確許可限制的模糊代碼。
4、創(chuàng)建自己的開(kāi)源代碼
將你自己的軟件完全開(kāi)源是減少與開(kāi)源許可相關(guān)風(fēng)險(xiǎn)的一種方法。這意味著你將自動(dòng)遵守任何要求保留派生源代碼的開(kāi)源許可條件。然而,請(qǐng)記住,僅僅開(kāi)放你自己的代碼并不能確保完全遵守許可證。你仍然需要努力確保你遵守每個(gè)許可證的規(guī)定,因?yàn)檫m用于你借用的代碼的許可證可能與你選擇的開(kāi)源許可證不同。然而,你無(wú)需擔(dān)心與源代碼共享相關(guān)的任何條款。
5、自動(dòng)檢測(cè)開(kāi)源組件
雖然在代碼庫(kù)內(nèi)手動(dòng)跟蹤你如何使用開(kāi)源是很好的做法,但通過(guò)使用能夠自動(dòng)識(shí)別開(kāi)源組件和依賴項(xiàng)的軟件,你可以降低出錯(cuò)的可能性。在這里,我們應(yīng)該考慮兩種不同類型的工具。一種是源代碼組成分析(SCA)軟件,它會(huì)自動(dòng)掃描源代碼并識(shí)別從值得信任的外部來(lái)源獲取的元素。另一種是軟件供應(yīng)鏈管理解決方案,除其他功能外,還支持查找和監(jiān)控應(yīng)用程序堆棧中的任何開(kāi)源依賴項(xiàng)。