在開始以前 拋出一個問題開源軟件和商業軟件有衝突嗎?linux
一張圖介紹如何選擇最流行的六種開源許可證程序員
這是烏克蘭程序員Paul Bagwell,畫的一張分析圖,介紹最流行的六種開源許可證----GPL、BSD、MIT、Mozilla、Apache和LGPL。安全
開源在今天的軟件業已經很廣泛,但開源是否意味着使用者能夠對開源後的代碼隨心所欲呢?答案是否認的。開源運動一樣有本身的遊戲規則和道德準則。不遵行這些規則不但損害開源運動的健康發展,也會對違規者形成名譽和市場上的損失,更可能陷入法律糾紛和賠償。併發
現今存在的開源協議不少,而通過Open Source Initiative組織經過批准的開源協議目前有58種。咱們在常見的開源協議如BSD, GPL, LGPL,MIT等都是OSI批准的協議。若是要開源本身的代碼,最好也是選擇這些被批准的開源協議。測試
這裏咱們來看四種最經常使用的開源協議及它們的適用範圍,供那些準備開源或者使用開源產品的開發人員/廠家參考。spa
BSD開源協議是一個給於使用者很大自由的協議。基本上使用者能夠」隨心所欲」,能夠自由的使用,修改源代碼,也能夠將修改後的代碼做爲開源或者專有軟件再發布。.net
但「隨心所欲」的前提當你發佈使用了BSD協議的代碼,或則以BSD協議代碼爲基礎作二次開發本身的產品時,須要知足三個條件:設計
1. 若是再發布的產品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協議。htm
2. 若是再發布的只是二進制類庫/軟件,則須要在類庫/軟件的文檔和版權聲明中包含原來代碼中的BSD協議。blog
3. 不能夠用開源代碼的做者/機構名字和原來產品的名字作市場推廣。
BSD代碼鼓勵代碼共享,但須要尊重代碼做者的著做權。BSD因爲容許使用者修改和從新發布代碼,也容許使用或在BSD代碼上開發商業軟件發佈和銷售,所以是對商業集成很友好的協議。而不少的公司企業在選用開源產品的時候都首選BSD協議,由於能夠徹底控制這些第三方的代碼,在必要的時候能夠修改或者二次開發。
Apache Licence是著名的非盈利開源組織Apache採用的協議。該協議和BSD相似,一樣鼓勵代碼共享和尊重原做者的著做權,一樣容許代碼修改,再發布(做爲開源或商業軟件)。須要知足的條件也和BSD相似:
1. 須要給代碼的用戶一份Apache Licence
2. 若是你修改了代碼,須要再被修改的文件中說明。
3. 在延伸的代碼中(修改和有源代碼衍生的代碼中)須要帶有原來代碼中的協議,商標,專利聲明和其餘原來做者規定須要包含的說明。
4. 若是再發布的產品中包含一個Notice文件,則在Notice文件中須要帶有Apache Licence。你能夠在Notice中增長本身的許可,但不能夠表現爲對Apache Licence構成更改。
Apache Licence也是對商業應用友好的許可。使用者也能夠在須要的時候修改代碼來知足須要並做爲開源或商業產品發佈/銷售。
咱們很熟悉的Linux就是採用了GPL。GPL協議和BSD, Apache Licence等鼓勵代碼重用的許可很不同。GPL的出發點是代碼的開源/無償使用和引用/修改/衍生代碼的開源/無償使用,但不容許修改後和衍生的代碼作爲閉源的商業軟件發佈和銷售。這也就是爲何咱們能用免費的各類linux,包括商業公司的linux和linux上各類各樣的由我的,組織,以及商業軟件公司開發的免費軟件了。
GPL協議的主要內容是隻要在一個軟件中使用(「使用」指類庫引用,修改後的代碼或者衍生代碼)GPL協議的產品,則該軟件產品必須也採用GPL 協議,既必須也是開源和免費。這就是所謂的」傳染性」。GPL協議的產品做爲一個單獨的產品使用沒有任何問題,還能夠享受免費的優點。
因爲GPL嚴格要求使用了GPL類庫的軟件產品必須使用GPL協議,對於使用GPL協議的開源代碼,商業軟件或者對代碼有保密要求的部門就不適合集成/採用做爲類庫和二次開發的基礎。
其它細節如再發布的時候須要伴隨GPL協議等和BSD/Apache等相似。
LGPL是GPL的一個爲主要爲類庫使用設計的開源協議。和GPL要求任何使用/修改/衍生之GPL類庫的的軟件必須採用GPL協議不一樣。 LGPL容許商業軟件經過類庫引用(link)方式使用LGPL類庫而不須要開源商業軟件的代碼。這使得采用LGPL協議的開源代碼能夠被商業軟件做爲類庫引用併發布和銷售。
可是若是修改LGPL協議的代碼或者衍生,則全部修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須採用LGPL協議。所以LGPL協議的開源代碼很適合做爲第三方類庫被商業軟件引用,但不適合但願以LGPL協議代碼爲基礎,經過修改和衍生的方式作二次開發的商業軟件採用。
GPL/LGPL都保障原做者的知識產權,避免有人利用開源代碼複製並開發相似的產品。
P.S. 隨手寫寫,是由於跟客戶交談的時候發現不少人其實對開源有徹底錯誤的理解,特別是開源協議。不少人認爲只要是開源,就意味着隨便用,隨便改均可以。
dlee補充:
這些知識 Linux Fans 大多比較清楚,由於常用開源軟件,天天下載源代碼,編譯、測試、安裝是常事。這些問題在各個 Linux 論壇上也早已是老生常談,可是有些 Java Fans 以及大多數 M$ 平臺的開發人員幾乎一無所知。我在這裏通常不會談跟 Java 關係不大的內容。既然 Charlesxp 想談談,我也補充一下。
首先,軟件有兩種分類方法:
商業軟件 vs. 免費軟件
商業軟件:軟件是要賣錢的。
免費軟件:軟件不賣錢,出於興趣開發,能夠隨便使用。
開源軟件 vs. 私有軟件
開源軟件:軟件的源代碼是公開的,能夠在遵照某種 license 的條件下加以修改。
私有軟件:軟件的源代碼不公開,用戶僅僅只能獲得軟件的二進制版本。
從上面的兩種區別咱們能夠看出,開源軟件和商業軟件不是對等或對立的關係,開源軟件一樣也能夠賣錢。可是給了你源代碼,你若是沒有必定的功力也未必能看懂。並且用戶經常不具有相應的能力(沒有從事過軟件開發),僅僅想要使用軟件的功能。既然這樣,開源對於這類用戶還有何意義呢?開源能夠保護這類用戶免於陷入廠商設置的鎖定陷阱。由於提供了所有源代碼,只要用戶能找到有能力維護這些代碼的人或公司,他就能夠持續發展這些代碼的功能。這我的或公司不必定是最初賣軟件給他的那一家。用戶不會在大部分功能用的好好的,某個關鍵功能沒法使用的時候,買家告訴他,你但願得到的這個功能在咱們的下一版本中有,可是你必須支付咱們 10w$ 升級費咱們才能夠提供。這個就叫作廠商鎖定。若是軟件不是開源的,用戶沒有辦法作出選擇,上了賊船後想下來可就難了。因此開源的商業軟件對於保護用戶本身的利益是很是重要的。用戶能夠得到真正的安全,並且更體現了軟件的本質就是一種高級的服務。
那麼有人會擔憂,這樣作究竟能不能賺到錢?你能不能賺到錢要看市場和需求有多大。只盯着廠商鎖定一種方式來賺錢實際上是一種短視的行爲。如今國內大部分軟件開發商都不重視維護和服務,僅僅靠賣軟件自己的 copy 和 license 來賺錢,用戶感受不到本身是上帝,怨聲載道。其實用戶所須要的仍是長期的維護和服務。因此這樣的軟件若是真能把服務作好,用戶是會很是歡迎的。既然通過分析預計會有很大的需求,從長期看,我相信確定是能夠賺到錢的。
還有一類軟件:共享軟件。這類軟件不是開源的,可是有免費的版本可使用。若是你用的很爽,良心發現了,能夠把錢匯給做者。若是但願做者提供服務,也能夠找他談。國內頗有名的 FoxMail 就是這類軟件。可是對於用戶最有價值的一類軟件,其實仍是開源的商業軟件。
開源軟件賣的是長期的服務,不是軟件自己的 copy。不是全部的軟件都有可能賣服務,也不是全部的用戶都須要服務(這個問題咱們之後能夠討論)。可是一個大型企業或者重要的政府機關,假設使用了 JBoss+MySQL 這種組合,長期的服務是很是必要的(至少出了事情能夠找到一個替罪羊)。你問這個問題就說明你沒有多少企業應用的經驗,不知道 IBM 這些公司的商業模式就是創建在 IT 服務的基礎之上的。開源軟件提供了一個新的組合,對於更好地作好這種服務很是有幫助。實際上,IBM 的解決方案中就包括了大量開源的成果。HP 作的方案也有采用 JBoss 的,爲了獲得長期的服務,HP 和 JBoss 專門簽定了長期合做的協議。
中國國內因爲市場容量的限制,以及用戶缺少信息化的經驗,對於軟件長期服務的重要性認識不足,所以老是隻看到軟件自己的售價,給了一些夫妻店競相壓價鑽空子的機會。可是必須認可,這並非一種良性競爭的狀態。最終仍是要走到切實爲用戶作好服務的道路上來的。服務是值錢的,不是免費的。你去路邊的理髮館隨便理個髮,5 塊錢,出來之後仍然蓬頭垢面。你去高級髮廊作頭,500 塊,可是你獲得了按摩等各類服務(不要聯想引伸),身心獲得了放鬆,出來之後神采飛揚。你只盯着路邊的理髮館,可是仍然有別人願意去高級的髮廊。
固然,真正要作好服務,對於技術等各方面的能力要求是很是高的。這種要求不是隨便哪一個夫妻店就可以達到的。
robbin補充:
Richard Stallman是GNU創始人和GPL的創造者,Stallman開發的比較著名的GPL軟件包括GNU GCC和GNU Emacs。其中Emacs在Stallman獨立開發的早期也是賣錢的。Stallman定的Emacs售價爲每份150美圓。
所以請記住: 開源軟件不等於免費軟件。