開(kāi)發(fā)狂想曲:如何在開(kāi)源Java下生存
自Sun公司宣稱(chēng)要將Java代碼基礎(chǔ)的大部分“發(fā)布之后,網(wǎng)上就充滿(mǎn)了這樣的疑問(wèn):此舉措對(duì)于Java,開(kāi)源以及開(kāi)發(fā)者社區(qū)來(lái)說(shuō)意味著什么……
自從Sun公司宣稱(chēng)要將Java代碼基礎(chǔ)的大部分“發(fā)布之后,Internet上就充滿(mǎn)了這樣的疑問(wèn):此舉措對(duì)于Java,開(kāi)源以及開(kāi)發(fā)者社區(qū)來(lái)說(shuō)意味著什么?
首先,我們來(lái)看一條通告:Java的關(guān)鍵部分將會(huì)在遵循開(kāi)源GPL V2許可證以及Classpath例外的條件下發(fā)布。這一套重要且遵循開(kāi)源許可證的Java軟件的發(fā)布可以看作是對(duì)開(kāi)源社區(qū)最大的一次代碼貢獻(xiàn),同時(shí)也產(chǎn)生了很多反應(yīng),從擔(dān)心企業(yè)Java社區(qū)會(huì)在剎那間坍塌,到許多私有軟件不可避免地衰敗。那些不了解軟件許可證的Java技術(shù)人員可能會(huì)奇怪有什么值得大驚小怪的,也不清楚這則通告對(duì)他們的影響。
GNU通用公共許可證或者GPL,是由自由軟件基金會(huì)支持的開(kāi)源軟件的許可證。一旦某軟件項(xiàng)目中使用了遵循GPL許可證的代碼,則該項(xiàng)目也必須遵循GPL,這意味著它的許可證對(duì)項(xiàng)目使用不添加任何的附加約束。后面一點(diǎn)也就是我們?cè)陂_(kāi)源社區(qū)中經(jīng)常提及的“copyleft,這也是產(chǎn)生爭(zhēng)論的來(lái)源。Java的開(kāi)源是否意味著,如果使用新近發(fā)布的遵循GPL許可證的Java虛擬機(jī)開(kāi)發(fā)出Java項(xiàng)目也會(huì)被強(qiáng)制性地要求遵循GPL許可證呢?批評(píng)者稱(chēng)前面的情況為“許可證的病毒天性:遵循GPL的代碼會(huì)“傳染其它由其演繹出的代碼,并且強(qiáng)迫作者在GPL下公布源代碼。
很顯然,這會(huì)造成一些恐慌——-免費(fèi)開(kāi)放源代碼的要求會(huì)威脅到企業(yè)Java開(kāi)發(fā)人員的商業(yè)模式。但是Sun公司很快就取消了大家的擔(dān)憂(yōu),對(duì)于現(xiàn)有Java開(kāi)發(fā)人員來(lái)說(shuō),軟件的發(fā)布意味著一切正常。Sun公司如此有信心的原因就在于前面所說(shuō)的Classpath例外,Classpath例外是為Classpath項(xiàng)目而開(kāi)發(fā)的:它是通過(guò)開(kāi)源編寫(xiě)的Java類(lèi)標(biāo)準(zhǔn),也在其它開(kāi)源Java項(xiàng)目中采用,例如Kaffe。Classpath例外的內(nèi)容較短,所以也值得一讀:
靜態(tài)或者動(dòng)態(tài)地將java庫(kù)和其它模塊鏈接在一起,完成基于此庫(kù)的組合工作。這樣,GNU的GPL規(guī)定和條件將覆蓋在整個(gè)組合體之上。
作為一種特殊的例外,此庫(kù)的版權(quán)持有者分配給你權(quán)限來(lái)將用于生產(chǎn)可執(zhí)行程序的獨(dú)立模塊鏈接到這一庫(kù)。無(wú)論這些獨(dú)立模塊的授權(quán)如何規(guī)定,如何復(fù)制、發(fā)行可執(zhí)行程序都依賴(lài)于你的選擇。這里的獨(dú)立模塊是指非來(lái)源于或是基于此庫(kù)的模塊。如果你修改這個(gè)庫(kù),就可以擴(kuò)展這個(gè)例外到你的版本中,然而這并不是必須的義務(wù),如果不想這樣做,可以從你的版本中刪除這條例外。
這段話(huà)的實(shí)質(zhì)就是關(guān)于Java代碼問(wèn)題。當(dāng)你只是通過(guò)鏈接使用Java方法或者對(duì)Java類(lèi)進(jìn)行擴(kuò)展時(shí),你的代碼就不需要遵循GPL標(biāo)準(zhǔn)。只有當(dāng)對(duì)Java代碼進(jìn)行直接更改的時(shí)候才需要遵循GPL的“copylef規(guī)則。例如,如果你擴(kuò)展了一個(gè)遵循GPL許可證的Java類(lèi),并且在你的項(xiàng)目中使用它。則Classpath例外意味著你不要按照GPL的要求發(fā)布你的項(xiàng)目,但是如果你修改了原來(lái)的類(lèi),并且期望發(fā)布項(xiàng)目的話(huà),則必須要遵循GPL的許可證。這樣做的結(jié)果就是只有那些從事Java語(yǔ)言本身的開(kāi)發(fā)人員需要公布他們的源代碼,而不是那些使用Java語(yǔ)言進(jìn)行項(xiàng)目開(kāi)發(fā)的人員。
相關(guān)文章:
1. 如何在Python項(xiàng)目中引入日志2. Java 網(wǎng)絡(luò)編程之 TCP 實(shí)現(xiàn)簡(jiǎn)單的聊天系統(tǒng)3. 每日六道java新手入門(mén)面試題,通往自由的道路第二天4. Java源碼解析之ConcurrentHashMap5. EJB3.0部署消息驅(qū)動(dòng)Bean拋javax.naming.NameNotFoundException異常6. 淺談JAVA 線(xiàn)程狀態(tài)中可能存在的一些誤區(qū)7. Java Socket實(shí)現(xiàn)Redis客戶(hù)端的詳細(xì)說(shuō)明8. Java之JSP教程九大內(nèi)置對(duì)象詳解(中篇)9. JavaScript快速實(shí)現(xiàn)一個(gè)顏色選擇器10. java冒泡排序和選擇排序詳解
