開發(fā)狂想曲:如何在開源Java下生存
自Sun公司宣稱要將Java代碼基礎(chǔ)的大部分“發(fā)布之后,網(wǎng)上就充滿了這樣的疑問:此舉措對于Java,開源以及開發(fā)者社區(qū)來說意味著什么……
自從Sun公司宣稱要將Java代碼基礎(chǔ)的大部分“發(fā)布之后,Internet上就充滿了這樣的疑問:此舉措對于Java,開源以及開發(fā)者社區(qū)來說意味著什么?
首先,我們來看一條通告:Java的關(guān)鍵部分將會在遵循開源GPL V2許可證以及Classpath例外的條件下發(fā)布。這一套重要且遵循開源許可證的Java軟件的發(fā)布可以看作是對開源社區(qū)最大的一次代碼貢獻(xiàn),同時(shí)也產(chǎn)生了很多反應(yīng),從擔(dān)心企業(yè)Java社區(qū)會在剎那間坍塌,到許多私有軟件不可避免地衰敗。那些不了解軟件許可證的Java技術(shù)人員可能會奇怪有什么值得大驚小怪的,也不清楚這則通告對他們的影響。
GNU通用公共許可證或者GPL,是由自由軟件基金會支持的開源軟件的許可證。一旦某軟件項(xiàng)目中使用了遵循GPL許可證的代碼,則該項(xiàng)目也必須遵循GPL,這意味著它的許可證對項(xiàng)目使用不添加任何的附加約束。后面一點(diǎn)也就是我們在開源社區(qū)中經(jīng)常提及的“copyleft,這也是產(chǎn)生爭論的來源。Java的開源是否意味著,如果使用新近發(fā)布的遵循GPL許可證的Java虛擬機(jī)開發(fā)出Java項(xiàng)目也會被強(qiáng)制性地要求遵循GPL許可證呢?批評者稱前面的情況為“許可證的病毒天性:遵循GPL的代碼會“傳染其它由其演繹出的代碼,并且強(qiáng)迫作者在GPL下公布源代碼。
很顯然,這會造成一些恐慌——-免費(fèi)開放源代碼的要求會威脅到企業(yè)Java開發(fā)人員的商業(yè)模式。但是Sun公司很快就取消了大家的擔(dān)憂,對于現(xiàn)有Java開發(fā)人員來說,軟件的發(fā)布意味著一切正常。Sun公司如此有信心的原因就在于前面所說的Classpath例外,Classpath例外是為Classpath項(xiàng)目而開發(fā)的:它是通過開源編寫的Java類標(biāo)準(zhǔn),也在其它開源Java項(xiàng)目中采用,例如Kaffe。Classpath例外的內(nèi)容較短,所以也值得一讀:
靜態(tài)或者動態(tài)地將java庫和其它模塊鏈接在一起,完成基于此庫的組合工作。這樣,GNU的GPL規(guī)定和條件將覆蓋在整個(gè)組合體之上。
作為一種特殊的例外,此庫的版權(quán)持有者分配給你權(quán)限來將用于生產(chǎn)可執(zhí)行程序的獨(dú)立模塊鏈接到這一庫。無論這些獨(dú)立模塊的授權(quán)如何規(guī)定,如何復(fù)制、發(fā)行可執(zhí)行程序都依賴于你的選擇。這里的獨(dú)立模塊是指非來源于或是基于此庫的模塊。如果你修改這個(gè)庫,就可以擴(kuò)展這個(gè)例外到你的版本中,然而這并不是必須的義務(wù),如果不想這樣做,可以從你的版本中刪除這條例外。
這段話的實(shí)質(zhì)就是關(guān)于Java代碼問題。當(dāng)你只是通過鏈接使用Java方法或者對Java類進(jìn)行擴(kuò)展時(shí),你的代碼就不需要遵循GPL標(biāo)準(zhǔn)。只有當(dāng)對Java代碼進(jìn)行直接更改的時(shí)候才需要遵循GPL的“copylef規(guī)則。例如,如果你擴(kuò)展了一個(gè)遵循GPL許可證的Java類,并且在你的項(xiàng)目中使用它。則Classpath例外意味著你不要按照GPL的要求發(fā)布你的項(xiàng)目,但是如果你修改了原來的類,并且期望發(fā)布項(xiàng)目的話,則必須要遵循GPL的許可證。這樣做的結(jié)果就是只有那些從事Java語言本身的開發(fā)人員需要公布他們的源代碼,而不是那些使用Java語言進(jìn)行項(xiàng)目開發(fā)的人員。
相關(guān)文章:
1. 關(guān)于Mysql-connector-java驅(qū)動版本問題總結(jié)2. Java Spring WEB應(yīng)用實(shí)例化如何實(shí)現(xiàn)3. FireStorm/DAO 3.0 發(fā)布-Java源碼生成工具4. 如何在django中運(yùn)行scrapy框架5. IBM發(fā)布AUS: 消除你Java程序中脆弱的API6. 詳解JavaScript作用域、作用域鏈和閉包的用法7. java實(shí)現(xiàn)2048小游戲(含注釋)8. Java程序員應(yīng)該知道的10個(gè)調(diào)試技巧9. 怎樣編寫可維護(hù)的面向?qū)ο?JavaScript 代碼10. JavaScrip簡單數(shù)據(jù)類型隱式轉(zhuǎn)換的實(shí)現(xiàn)
