許可”包含例如許可名、版本、描述、有效日期等屬性。名稱“對(duì)象”定義許可中的對(duì)象,且許可的規(guī)則或條款應(yīng)用到“對(duì)象”上。對(duì)象的示例包括“源代碼”、“二進(jìn)制代碼”、“衍生作品”、以及“許可”??啥x其他類型的對(duì)象。名稱“動(dòng)作”包含受許可本身的規(guī)則支配的任何動(dòng)作。動(dòng)作的示例包括“修改源代碼”、“分發(fā)”、“鏈接”、“復(fù)制”、“使用”,等等。如果允許給定的對(duì)象的特定的動(dòng)作,在數(shù)據(jù)庫(kù)中將指定該對(duì)象和動(dòng)作之間的關(guān)系。名稱“約束”表示許可下要求的責(zé)任。對(duì)于給定的許可,軟件兼容工具110的用戶可指定該許可管理哪些對(duì)象。通過軟件兼容工具110實(shí)現(xiàn)的用戶界面實(shí)施此操作。用戶界面使用例如樹表示來(lái)顯示各種“許可”、“對(duì)象”、“動(dòng)作”和“約束”信息。樹的根是許可。在樹表示的第二級(jí)顯示對(duì)象。第三級(jí)提供準(zhǔn)許的動(dòng)作,且樹的第四級(jí)提供與動(dòng)作關(guān)聯(lián)的約束。
[0031]圖2圖示軟件兼容工具110創(chuàng)建及分析項(xiàng)目的OSS用例214的操作。給定的項(xiàng)目的用例214定義預(yù)期如何使用項(xiàng)目,以及將在該項(xiàng)目中使用哪些軟件組件及關(guān)聯(lián)的開源軟件許可。OSS用例214由多個(gè)輸入構(gòu)成,包括一個(gè)或多個(gè)軟件組件202、組件關(guān)系204、軟件組件上的動(dòng)作206、OSS許可208、整個(gè)項(xiàng)目的用途210、以及項(xiàng)目的“知識(shí)產(chǎn)權(quán)(IP) ”定位212。通過軟件兼容工具110實(shí)現(xiàn)的合適的用戶界面提供各種輸入。
[0032]通過例如從軟件組件選擇菜單、通過輸入軟件組件名或通過任何其他合適的方式來(lái)輸入軟件組件列表202。組件關(guān)系204指定例如每個(gè)軟件組件與總體項(xiàng)目相關(guān)的方式。這樣的關(guān)系204的示例包括靜態(tài)鏈接或動(dòng)態(tài)鏈接。
[0033]軟件組件206上的動(dòng)作指定對(duì)應(yīng)的軟件組件將實(shí)現(xiàn)或已實(shí)現(xiàn)的方式。軟件組件動(dòng)作的示例包括“修改”、“鏈接”、以及“僅使用”。修改動(dòng)作表示項(xiàng)目的作者想要修改軟件組件的源代碼。鏈接動(dòng)作表示項(xiàng)目的作者想要將軟件組件與例如程序庫(kù)鏈接。僅使用動(dòng)作表示作者想要將沒有修改的軟件組件并入項(xiàng)目中。
[0034]許可208識(shí)別控制指定的軟件組件202的使用的OSS許可。OSS許可208可包括已知的許可(例如,GNU通用公共許可(GPL)、Apache許可2.0、或Mozilla公共許可(MPL))以及未來(lái)創(chuàng)建的許可。可從菜單選擇已知的許可。還可通過輸入許可名來(lái)指定許可。通過用戶界面,軟件兼容工具110的用戶能夠?qū)⒚總€(gè)軟件組件202與對(duì)應(yīng)的許可208關(guān)聯(lián)起來(lái)??捎赏瑯拥脑S可208覆蓋(即,對(duì)應(yīng)于)多于一個(gè)軟件組件202。
[0035]可提供用戶界面,通過該用戶界面,可由軟件兼容工具110的用戶指定許可的多種條款。軟件許可可包括任意數(shù)量的可能的條款。說明性的示例包括:如果修改源代碼,則必須公開源代碼;使用合適的軟件組件的任何項(xiàng)目必須在同樣的許可條款下重新許可為與該軟件組件有關(guān)的許可。這種許可和許可條款信息存儲(chǔ)在存儲(chǔ)設(shè)備108中的許可數(shù)據(jù)庫(kù)120 中。
[0036]項(xiàng)目用途210輸入的指定預(yù)期如何使用及交付包括各種軟件組件202及關(guān)聯(lián)的許可208的項(xiàng)目。項(xiàng)目用途210可指定項(xiàng)目的商務(wù)用途。項(xiàng)目用途的示例包括:項(xiàng)目?jī)H用于內(nèi)部使用(項(xiàng)目將僅由作者或作者的機(jī)構(gòu)使用,且將不分發(fā)或出售)。另一個(gè)項(xiàng)目用途示例包括:將向客戶交付項(xiàng)目。這種后面的項(xiàng)目用途還可指定是否可由客戶再售客戶交付的項(xiàng)目,或僅由客戶自己使用。項(xiàng)目用途輸入還可以是:該項(xiàng)目將用于特定的工業(yè)(例如,軍事)。項(xiàng)目用途信息存儲(chǔ)在項(xiàng)目數(shù)據(jù)庫(kù)112中。
[0037]IP定位212指定總體許可的條款中的一些應(yīng)用于結(jié)果項(xiàng)目上。IP定位的示例包括:
[0038]A.重新許可:指定將在專有軟件許可下發(fā)布該項(xiàng)目。
[0039]B.公開制品:指定該項(xiàng)目將在開源軟件許可下發(fā)布。
[0040]C.封閉制品:指定該項(xiàng)目將通過專有許可發(fā)布,該專有許可控制作者編寫的任何源代碼,且對(duì)于包含在該項(xiàng)目中的軟件組件,這些軟件組件受控于其自己的OSS許可。
[0041]仍參照?qǐng)D2,一旦通過軟件兼容工具110的用戶、分析引擎216 (可為工具110的一部分或?yàn)楠?dú)立的軟件應(yīng)用程序)構(gòu)建了 OSS用例214,那么就分析該用例,以確定是否存在任何問題,且如果是,提供一個(gè)或多個(gè)建議218。
[0042]圖3示出軟件兼容工具110如何確定問題及提供建議(218)的方法300??梢耘c示出的順序不同的順序?qū)嵤﹫D3中提供的動(dòng)作,且可并行實(shí)施兩個(gè)或多個(gè)動(dòng)作。可由軟件兼容工具110實(shí)施方法300。
[0043]方法300始于:接收對(duì)將包括在項(xiàng)目中的軟件組件的軟件許可進(jìn)行識(shí)別的輸入(框302)。方法還包括:接收對(duì)將如何使用應(yīng)用程序進(jìn)行識(shí)別的項(xiàng)目用途信息(框304)。上面提供了框302和304的示例的說明。
[0044]方法300繼續(xù):確定第一軟件組件的軟件許可和第二軟件組件的另一個(gè)軟件許可之間是否存在不兼容(框306)??梢勒崭鞣N技術(shù)實(shí)現(xiàn)此確定。在一個(gè)實(shí)施例中,諸如程序員之類的用戶指定每個(gè)組件的動(dòng)作(例如,修改組件,使用組件而不修改,將該組件鏈接到另一個(gè)組件)。用戶還指定整個(gè)項(xiàng)目的用途,包括其IP定位以及項(xiàng)目交付類型。
[0045]軟件兼容工具110開始分析項(xiàng)目中使用的第一組件的許可。如果第一組件的許可不允許第一組件的動(dòng)作(例如,動(dòng)作將修改組件,且將分發(fā)該項(xiàng)目,但許可禁止該組件的任何修改的版本的分發(fā)),則確定不兼容,生成給用戶的消息。例如,一個(gè)消息可以是“找出具有不需要公開項(xiàng)目源代碼的許可的組件A(即,第一組件)的等同的軟件組件”。另一個(gè)消息可以是“與客戶重新協(xié)商,以使客戶用外部提供的支持服務(wù)來(lái)內(nèi)部地開發(fā)項(xiàng)目”。在這種情況下,將不從一方向另一方交付結(jié)果項(xiàng)目,且結(jié)果項(xiàng)目將僅由創(chuàng)建它的客戶在內(nèi)部使用。
[0046]如果第一組件的許可允許第一組件指定的動(dòng)作,則軟件兼容工具110識(shí)別許可要求的任何約束,以維持與許可的兼容。例如,特定的動(dòng)作可能引起特定的約束(例如,如果組件被修改且項(xiàng)目被分發(fā),那么必須在同樣的許可條款下重新許可該項(xiàng)目)。軟件兼容工具110對(duì)項(xiàng)目中的其它許可實(shí)施類似的分析;也即,基于項(xiàng)目中所用的所有組件的預(yù)期動(dòng)作確定約束。在已基于各種組件的動(dòng)作識(shí)別每個(gè)組件的約束之后,該工具確定各種約束之間是否存在不兼容。
[0047]例如,軟件兼容工具110的用戶之前可能已經(jīng)創(chuàng)建了約束兼容數(shù)據(jù)庫(kù)118 (圖1),并將這種數(shù)據(jù)庫(kù)存儲(chǔ)在存儲(chǔ)設(shè)備108中。這種約束兼容數(shù)據(jù)庫(kù)118的一個(gè)示例包括識(shí)別特定的約束的不兼容約束的表。也即,針對(duì)每個(gè)約束,識(shí)別多個(gè)不兼容的其它約束。例如,如果組件修改了,則組成軟件組件的一個(gè)或多個(gè)軟件許可的OSS許可的約束可能要求使用同樣的許可條款許可結(jié)果項(xiàng)目。但是,具有不同的許可條款的第二組件包含同樣的需求。程序員已確定有必要修改兩個(gè)組件。在這種情況下,針對(duì)每個(gè)約束,約束兼容數(shù)據(jù)庫(kù)118會(huì)識(shí)別需要在不同的許可條款下重新許可的其他約束是不兼容的,且因此,不兼容被識(shí)別。通過在一個(gè)或多個(gè)數(shù)據(jù)庫(kù)112、116、118中提供這樣的許可、責(zé)任、及約束信息,大大簡(jiǎn)化了分析項(xiàng)目的多個(gè)軟件組件的OSS許可的兼容性。
[0048]如上所述,系統(tǒng)100還可包括存儲(chǔ)在存儲(chǔ)設(shè)備108中的消息數(shù)據(jù)庫(kù)116。消息數(shù)據(jù)庫(kù)116包括對(duì)應(yīng)于一個(gè)或多個(gè)不兼容的一個(gè)或多個(gè)消息。每個(gè)消息指定關(guān)于如何解決對(duì)應(yīng)的不兼容的建議。消息數(shù)據(jù)庫(kù)116包括可在輸出設(shè)備106上顯示的字母數(shù)字字符的字符串,以向軟件兼容工具110的用戶提供關(guān)于如何解決組件的預(yù)期動(dòng)作和將包括在項(xiàng)目中的其它軟件組件的OSS許可之間的一個(gè)或多個(gè)不兼容的反饋。
[0049]再次參照?qǐng)D3,方法300進(jìn)一步包括顯示建議消息,以避免在框306處確定的不兼容(框308)。否則,如果在框306處確定沒有不兼容,則方法在框310處終止。
[0050]圖4示出硬件處理器102執(zhí)行軟件兼容工具110時(shí)實(shí)施的另一個(gè)方法400??梢砸耘c示出的順序不同的順序?qū)嵤﹫D4中提供的動(dòng)作,且可并行執(zhí)行兩個(gè)或多個(gè)操作。除此之外,方法