用于確定軟件許可之間的兼容性的系統(tǒng)及方法
【專利說明】
【背景技術(shù)】
[0001]在編寫源代碼時,開發(fā)者可使用已寫的代碼段,而不用自己創(chuàng)建這種功能。在許多情況下,包含在開發(fā)者的應(yīng)用程序中的代碼段服從開源軟件(OSS)許可。存在許多不同類型的OSS許可,且各許可的條款根據(jù)許可的不同而不同。服從OSS許可的軟件的越來越多的使用提出了一種邏輯問題:跟蹤各種OSS許可強(qiáng)加的限制和責(zé)任。
[0002]OSS許可具有許多條款。通過示例,一個OSS許可條款可要求:如果該許可覆蓋的軟件被開發(fā)者修改,必須公開整個應(yīng)用程序(不僅是服從OSS許可的代碼段,而是整個應(yīng)用程序)。在某些情況下,一些條款可要求源代碼的公開,而其它條款可要求對所有人公布可執(zhí)行代碼,以在服從一定的許可條款下使用。另一個OSS許可條款可要求:在某些情況下,可給服從許可的代碼段的作者信用。各種許可在增多,且可用條款很多。跟蹤可用的責(zé)任以及限制是成問題的。
【附圖說明】
[0003]為了詳細(xì)描述本公開的示例,現(xiàn)在將參照附圖,其中:
[0004]圖1不出根據(jù)各種不例的系統(tǒng);
[0005]圖2描繪根據(jù)各種示例的對應(yīng)用程序的使用定義的輸入;
[0006]圖3示出根據(jù)各種示例的方法;以及
[0007]圖4示出根據(jù)各種示例的另一方法。
[0008]整個下面的說明書和權(quán)利要求中所使用的某些術(shù)語指特定的系統(tǒng)組件。本領(lǐng)域的技術(shù)人員將理解,計算機(jī)公司可用不同的名字來指一種組件。本文檔目的不在于區(qū)分名字不同的組件,而在于區(qū)分功能不同的組件。在下面的討論中以及在權(quán)利要求中,以開放式的方式使用術(shù)語“包括”和“包含”,且因此,應(yīng)解釋為表示“包括,但不限于…”。此外,術(shù)語“聯(lián)接”和“耦合”意在表示間接、直接、光學(xué)的或無線電氣連接。因此,如果第一設(shè)備聯(lián)接至第二設(shè)備,該聯(lián)接可以是通過直接的電氣連接的、通過經(jīng)由其他設(shè)備和連接件的間接的電氣連接的、通過光電連接的、或通過無線電氣連接的。
【具體實施方式】
[0009]下面的討論針對本公開的各種示例。盡管這些示例中的一個或多個可能是優(yōu)選的,但所公開的示例不應(yīng)理解為或用作限制本公開的包括權(quán)利要求的范圍。此外,本領(lǐng)域的技術(shù)人員應(yīng)理解,下面的描述具有廣泛的應(yīng)用,且任何示例的討論僅意味著該示例是示范性的,且目的不在于暗示本公開的包括權(quán)利要求的范圍受限于該示例。
[0010]根據(jù)本公開的各種示例,確定更大范圍的項目中使用的兩個或多個軟件組件的開源軟件(OSS)許可之間的兼容性。為了將兩個或多個組件組合到更大范圍的項目中,組件必須適用于其在該項目中的預(yù)期用途。如果OSS許可允許該預(yù)期用途,則它們可兼容;如果沒有辦法同時滿足兩個許可,則它們不兼容。隨著項目中服從OSS許可的組件的數(shù)量的增加,兼容性的確定變得越來越復(fù)雜。
[0011]項目定義指定將在項目中使用的OSS組件,且對于每個組件,指定組件的預(yù)期用途或動作(例如,將不修改的使用,將修改,或?qū)㈡溄又亮硪粋€組件)。在組件將鏈接至第二組件的情況下,還指定第二組件。項目定義還指定項目的預(yù)期用途,IP定位描述是否將公開源代碼,且交付的類型規(guī)定項目是否將在內(nèi)部使用或分發(fā)到客戶端或重新許可。
[0012]隨后分析每個組件許可與其它組件許可的兼容性。不兼容的一個示例是一個組件由GNU通用公共許可(GPL)管理,另一個組件由Mozilla公共許可(MPL)管理。每個許可允許關(guān)聯(lián)的組件的修改,但具有重新分配時在組件許可的多個條款下許可項目的要求。如果兩個組件的動作指定修改,且該項目將為分布式的,則由于不能夠同時在兩個不同的許可下重新許可項目,存在不兼容。
[0013]如果發(fā)生不兼容,為用戶顯示關(guān)于如何避免不兼容的建議。在上述場景中,例如,建議可以是查找兩個沖突組件中的一個的替代(例如,通過在內(nèi)部設(shè)計類似的組件,或通過定位不要求使用沖突許可重新許可產(chǎn)品的替代組件)。建議的另一個示例可以是“你應(yīng)重建與客戶的關(guān)系,使得客戶提供軟件而不是你。作為替代,你應(yīng)該為客戶提供服務(wù)(而不是產(chǎn)品),以修改其軟件”。因此,避免對許可產(chǎn)生不兼容的任何OSS組件的需要。
[0014]圖1圖示包括聯(lián)接至輸入設(shè)備104的硬件處理器102(例如,中央處理單元“CPU”)、輸出設(shè)備106、以及非瞬態(tài)存儲設(shè)備108的系統(tǒng)100。盡管在圖1的示例中僅示出一個硬件處理器102,但在其他示例中可包括多于一個硬件處理器。輸入設(shè)備104可包括鍵盤、鼠標(biāo)、軌跡球、或其結(jié)合。輸出設(shè)備106可包括顯示器。用戶經(jīng)由輸入和輸出設(shè)備104和106與圖1的系統(tǒng)交互。
[0015]非瞬態(tài)存儲設(shè)備108可包括隨機(jī)存取存儲器(“RAM”)、硬盤驅(qū)動器、光盤只讀存儲器(“⑶-ROM”)、閃存、及其他非瞬態(tài)存儲設(shè)備。存儲設(shè)備108存儲軟件兼容工具110,軟件兼容工具HO包括可由處理器102執(zhí)行的機(jī)器可讀指令。通過處理器102執(zhí)行軟件兼容工具110引起處理器102實現(xiàn)本文描述的功能中的一些或全部。存儲設(shè)備108還可包括日志數(shù)據(jù)114、消息數(shù)據(jù)庫116、約束兼容性數(shù)據(jù)庫118、以及許可數(shù)據(jù)庫120。
[0016]軟件兼容工具110準(zhǔn)許用戶創(chuàng)建軟件項目的描述。項目包括已由作者(例如,軟件開發(fā)者)創(chuàng)建或正由作者創(chuàng)建的軟件應(yīng)用程序。為了方便討論,以將來時態(tài)討論項目,但軟件工具110還可用于分析已存在的軟件項目。
[0017]將創(chuàng)建的項目將包括源代碼,將由作者編寫該源代碼中的一些,且該源代碼中的一些將包括軟件組件,作者將不創(chuàng)建該軟件組件,但該軟件組件將包含在該項目中。例如,作者可將特定的軟件組件,或多個軟件組件下載到項目中。不是項目的作者編寫的這種軟件組件的使用避免作者不得不創(chuàng)建已存在的軟件組件,且因此,使軟件項目的開發(fā)更有效。在本公開中,術(shù)語“軟件組件”指將用在軟件項目中、但可由項目的作者編寫的機(jī)器可讀指令的集合。
[0018]軟件組件中的一個或多個可服從軟件許可,有時稱作“開源軟件許可”。這種許可準(zhǔn)許使用對應(yīng)的軟件組件,但要依照某些限制和約束。存在或可在未來創(chuàng)建許多不同類型的開源軟件。
[0019]限制包括對用軟件組件可做什么的限制??赏ㄟ^軟件組件的開源軟件許可置于軟件組件上的限制的示例包括:
[0020]A.可不修改軟件組件的源代碼
[0021]B.源代碼不可用于商業(yè)用途
[0022]C.可準(zhǔn)許對源代碼的修改,且可以以例如補(bǔ)丁的獨立于原始源的形式分發(fā)這種修改。
[0023]不同的或其它限制也是可能的。
[0024]約束包括項目的作者必須履行的責(zé)任。約束是作者必須采取的積極措施,然而,限制是禁止的操作。約束的示例包括:
[0025]A.返回軟件組件的修改。
[0026]B.分發(fā)軟件組件的源代碼。
[0027]C.給軟件組件的原作者以信用。
[0028]D.通過同樣的軟件許可重新許可結(jié)果項目。
[0029]不同和/或其他約束也是可能的。一個類型的約束稱為“倒數(shù)約束”。倒數(shù)約束是在某些條件下應(yīng)用的約束責(zé)任,該某些條件要求使用軟件組件的開發(fā)者將其工作貢獻(xiàn)給原作者。例如,約束“將對原始源代碼的任何修改返回給作者”是倒數(shù)約束,或者“在同樣的原始許可下分發(fā)/重新許可整個工作”是另一種倒數(shù)約束。
[0030]軟件許可定義可應(yīng)用于一個或多個“對象”的限制和約束。對象可包括源代碼、二進(jìn)制代碼、衍生軟件作品,等等。在一些實現(xiàn)方式中,許可數(shù)據(jù)庫120包括一個或多個開源軟件許可及這種許可的條款(例如,限制和約束)。每個許可可以以對象類實例化的形式存儲在數(shù)據(jù)庫120中。因此,每個許可可以包括與一個或多個其他對象相互關(guān)聯(lián)的多個對象。在至少一些實現(xiàn)方式中,在數(shù)據(jù)庫120中用四個名稱表示許可一 “許可”、“對象、“動作”和“約束”。這些名稱準(zhǔn)許軟件兼容工具110表示各種許可中的(如果不是全部)大多數(shù)條款。名稱“