為什麼GPL是更好的開源許可證?

阮一峰發表於2010-02-27

讓我從一件新聞講起。

2009年,計算機業界發生了一件大事:甲骨文公司以74億美元收購SUN公司。

為什麼GPL是更好的開源許可證?

訊息宣佈後,有一個人堅決反對這筆交易。他叫Michael Widenius,是資料庫軟體MySQL的主要創始人。

為什麼GPL是更好的開源許可證?

他為什麼要反對呢?因為MySQL現在歸SUN公司所有,一旦收購成功,就將屬於甲骨文公司所有。但是,後者的主要產品是Oracle資料庫,與MySQL是競爭關係。所以,甲骨文公司不可能扶持MySQL的後繼開發,甚至有可能殺死MySQL。

Michael Widenius不能接受這個事實,他發起萬人簽名,提交請願書,要求歐盟委員會否決這項交易。具體情況可以參見HelpMysql.org

為什麼GPL是更好的開源許可證?

2.

去年12月28日,他寫了一篇很長的文章"Help keep the internet free",解釋為什麼反對這項交易。他是這樣寫的:

"如果甲骨文得到了MySQL,資料庫市場的競爭將會減少,最終導致更高的價格和收費。"

你覺得這句話對不對?

我覺得不對。我認為,甲骨文公司殺不死MySQL,資料庫市場的競爭不可能減少。這並非由於甲骨文公司不想這樣做,而是因為MySQL是無論如何都不可能被殺死的(假定始終存在市場需求的話)。

3.

為什麼MySQL是殺不死的?

答案非常簡單。因為它的許可證是GPL。

GPL明確規定,任何原始碼的衍生產品,如果對外發布,都必須保持同樣的許可證。這就是說,任何人只要釋出MySQL的修改版本,他就必須公開原始碼,並且同意他人可以自由地複製和分發。

現在讓我們假想一下:

第一種情況:甲骨文公司決定中止MySQL的開發,會怎麼樣?

一定會有其他人接手,繼續推出MySQL的後續版本,這是GPL許可證允許的,完全合法。雖然不能再叫MySQL這個名字,但是隻要程式碼完全相容,名字又有什麼關係呢。事實上,Michael Widenius自己的公司,現在的產品MariaDB就是基於MySQL的。

第二種情況:甲骨文公司決定,MySQL的後續版本不再開源,或者整體併入Oracle資料庫,會怎麼樣?

答案更簡單,不可能發生這種情況。因為根據GPL許可證,只要釋出基於原始碼的新產品,就一定必須開源。

4.

所以,我實際上覺得,Michael Widenius沒有竭力反對的必要。不管甲骨文幹什麼,MySQL都不可能滅絕。

相反的,真正感到倒黴的人,應該是甲骨文公司才對,因為它花錢買來自己無法控制的財產。任何的程式碼,只要置於GPL之下,就不再受作者或所有者控制了,想殺也殺不死了。

5.

如果一個程式設計師想將自己的程式碼開源,他有許多種選擇,大致可以分成三類:

  1. 選擇GPL許可證,要求衍生程式碼必須開源。

  2. 將程式碼放入"公共領域"(public domain),徹底放棄版權。

  3. 選擇更寬鬆的許可證,比如BSD和Apache許可證,不要求衍生程式碼開源。

許多人認為,選擇後兩種做法比選擇GPL更值得讚揚,因為更加大公無私。但是,這樣的看法是錯誤的,實際上GPL要好於後兩種選擇。

讓我們再來假想一下,如果MySQL的原始碼處於公共領域,或者BSD許可證之下,那會怎樣?

那樣的話,許多站長恐怕都會感到大難臨頭了。他們不得不做出選擇,將來到底是升級到第三方小公司推出的、質量沒有保證、支援力量薄弱、互相不相容的基於MySQL 5.x版本的各種衍生資料庫,還是升級到甲骨文公司推出的、與Oracle相容的、號稱具備各種新功能和最佳效能、並且廣告滿天飛的MySQL 6.0版本。

在BSD許可證或者公共領域程式碼的情況下,甲骨文公司可以從容地將MySQL 6.0變為閉源產品,推出你只有花錢才能買到的新特性和後繼版本,並且只要你複製給他人使用,就要起訴你。使用開源軟體的使用者,將因此變為依賴甲骨文公司的使用者。只有這種情況發生,才真正有必要,竭力反對甲骨文收購SUN公司。

當程式設計師放棄程式碼的版權,或者選擇BSD許可證,他可能認為自己做出了世界上最無私的行為。很大程度上,事實確實如此。但是,我們要知道,這個世界是一個商業利益佔主導的世界。一旦發生像甲骨文擁有MySQL這一類的事情,你的程式碼的價值將大大削弱,大公司先是免費利用它們,然後再設法推出取代它們的私有產品。你以為自己奉獻了愛心,但是實質上變成了為大公司無償打工。

從這個角度看,GPL是更好的開源許可證。它保證了自由始終是自由,既無法被剝奪,也不是一種圈套或陷阱。

6.

有的朋友讀到這裡,可能會提出疑問。如果GPL許可證真的這麼好,那麼為什麼GNU基金會還推出了LGPL許可證

所謂LGPL許可證,全稱是Lesser General Public License,直譯就是"限制更少的GPL許可證",1991年時與GPL(第二版)同時釋出。它近似於BSD許可證,允許將程式碼用於閉源產品。

這就產生了一個很有趣的問題。為什麼像Richard Stallman這種堅持自由絲毫不可侵犯的人,會同意將自己的程式碼用於閉源產品?

說起來,這其實是他的策略,主要與GNU C library有關。1991年的時候,市場上有很多C語言庫可以選擇。如果GNU的C庫是GPL許可證,那麼很多私有軟體不會選擇它,因為一旦選擇了它,就意味產品本身一定要開源。所以為了保證開源軟體得到使用和推廣,並且閉源軟體中有開源的成分,總比一點沒有好,所以才誕生了LGPL許可證。

Richard Stallman說得很清楚:

"畢竟,市場上的C庫有的是。GPL許可證將迫使私有軟體去使用他人的庫,這不會給他們帶來困擾,只會給我們帶來困擾。"

所以,策略是這樣的:整體軟體,或者沒有替代品的程式碼庫,一定要使用GPL許可證;有替代品的程式碼庫,可以使用限制較少的開源許可證,但是在取到足夠市場份額之後,也應該轉為GPL許可證。這就是為什麼javascript的程式碼庫,大多數都是類似BSD的許可證,而不是GPL許可證的原因,因為可替代自己的競爭者實在太多了。

總之,如果你想把自己的軟體開源,只要不屬於上面這種例外情況,GPL就是更好的選擇。

(完)

相關文章