開源(Open Source)那些事兒 (一)

作者: Jake Lin  來源: 博客園  發布時間: 2010-02-02 10:49  閱讀: 1888 次  推薦: 0   原文鏈接   [收藏]  

背景

最近有幸參與了王克偉的開源項目iToday,詳情可以參考 我在Windows嵌入式系統上的一個絢麗用戶界面開源項目(iToday)。克偉的號召力超人,Q群一下子就爆滿200人。如果擴容了,大家有興趣還可以加QQ群 61284128。我最近一段時間都一直做一些開源項目,談一下我對開源的一些想法。

簡介

本文講述我對開源的一些想法,包括接觸開源的過程,如何使用開源項目,常用的開源license,如何參與開源項目的想法和實踐。

第一次與開源的親密接觸

大概10年多前,國內有幾家公司做Linux的發行版,包括紅旗,藍點,沖浪等等,一時間興起了Linux熱潮,加上一個叫做方東興的人寫了好多 起來挑戰微軟和Linux的書,好像找到振興中國軟件之路。我也不免俗跟風加入了這一風潮中,開始接觸Linux。開始玩Linux算是我和開源的第一次親密接觸。開源給我的初步印象是技術狂人的杰作,免費,但沒有商業軟件好用。想到Linux就想到Linus Torvalds,在我看來Linus就是世界頂尖編程高手,三兩下就做了一個操作系統出來,這個系統甚至可以和Windows一較高下。其二是免費,當時我想的免費就是可以使用很低廉的價錢甚至不需要付費就能得到,當時我使用56k的modem,從網上下載Linux是不可能的,所以我需要購買紅旗和藍點等Linux的發行版,但是這些發行版和Windows比便宜很多很多,基本就是光盤的價格,使用開源Linux,終于擺脫了盜版問題。但是免費是需要付出代價的,初步感覺Linux沒有Windows好用,這里其實指UI,不管GNOME還是KDE都遠遠沒有當時的Windows 98好用,由于當時不懂Shell,想法保留在開源盡管免費都是不好用的層面上。

其實當時很多觀念都是錯誤的,Linux不是一個技術牛人就能做出來的,而是需要一隊人參與,而且不斷的推廣才有今天的Linux,這個下面講到,如果做開源。而且開源不一定就是免費,免費只是某些開源license的形式。開源不一定比商業軟件難用,軟件的易用性和軟件的license沒有直接關系。

如何使用開源

開源就是免費?

有了第一次接觸,慢慢我也開始使用一些開源產品做項目,主要使用Linux,PHP,MySQL等開源產品,開始的時候也沒有注意太多,反正開源就是“免費”嘛,我不知道到現在還有多少人堅信“開源就是免費”這一觀點,但是根據GNU的 The Free Software Definition (Free軟件定義),這個Free是指自由(liberty),而不是價格上的免費(no charge)。這些自由包含下面幾大方面:

The freedom to run the program, for any purpose (freedom 0).
The freedom to study how the program works, and change it to make it do what you wish (freedom 1).
Access to the source code is a precondition for this.
The freedom to redistribute copies so you can help your neighbor (freedom 2).
The freedom to distribute copies of your modified versions to others (freedom 3).
By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.

不論目的為何,有使用該軟件的自由(自由之零)。
有研究該軟件如何運作的自由,并且得以改寫該軟件來符合使用者自身的需求(自由之一)。取得該軟件之源碼為達成此目的之前提。
有重新散布該軟件的自由,所以每個人都可以藉由散布自由軟件來敦親睦鄰(自由之二)。
有改善再利用該軟件的自由,并且可以發表改寫版供公眾使用,如此一來,整個社群都可以受惠。
如前項,取得該軟件之源碼為達成此目的之前提(自由之三)。

同時,開源可以做商業項目,再次引用上述文章。

Free software does not mean noncommercial. A free program must be available for commercial use,
commercial development, and commercial distribution. Commercial development of free software is no longer unusual;
such free commercial software is very important. You may have paid money to get copies of free software,
or you may have obtained copies at no charge. But regardless of how you got your copies,
you always have the freedom to copy and change the software, even to sell copies.

自由軟件因此并不是「非商業軟件」。自由軟件必須適用於商業用途。自由軟件的商業開發模式已很常見;這樣的自由商業軟件相當重要。
使用者可以付費取得 GNU 的軟件,或者,使用者也可以免費取得這些軟件,
但是,不管使用者是如何取得這些軟件的,她/他們必須永遠有權利復制或是改寫這些軟件,甚至 販售 這些軟件。

開源不等于免費,請看下面的定義。

When talking about free software, it is best to avoid using terms like give away or for free,
because those terms imply that the issue is about price, not freedom.
Some common terms such as piracy embody opinions we hope you won't endorse.
See Confusing Words and Phrases that are Worth Avoiding for a discussion of these terms.
We also have a list of proper translations of free software into various languages.


當談到自由軟件時,最好避免使用「給」或是「免費」這類的措辭,因為這些措辭會給人給人「free」是指「價格上的免費」的誤導,
而忽略了使用軟件自由的真義。有些詞語像 「盜版」就有類似的涵義,我們希望自由軟件的使用者不會想被這樣指稱。
有關討論這些措辭的用法,詳見 「容易混淆的詞語,請盡量避免」 一文,我們也有 「自由軟件一詞的翻譯」 的多種語言版本。

開源的代碼隨便用?

如果僅僅是使用開源軟件,不使用里面的源代碼,或者更改該開源軟件,一般來說可以免費使用,例如使用FireFox。但是免費使用不是開源的專利,很多商業軟件也可以免費使用,例如SQL Server Express, Visual Studio Express等等都可以免費使用。

可是使用開源的代碼呢?開始我也以為天下代碼一大抄,誰拿到代碼就是誰的。是這樣嗎?開源授予了使用者自由的權利,同時使用者承擔了對社區的義務,權利和義務并存。最常見的是當使用者修改了源碼是否需要回饋給社區的問題,在Free Software Definition (Free軟件定義)中有這樣的描述。

However, rules about how to package a modified version are acceptable, if they don't substantively limit your freedom to
release modified versions, or your freedom to make and use modified versions privately. Rules that if you make your version
available in this way, you must make it available in that way also can be acceptable too, on the same condition.
(Note that such a rule still leaves you the choice of whether to publish your version at all.) Rules that require release of
source code to the users for versions that you put into public use are also acceptable. It is also acceptable for the license to
require that you identify your modifications as yours, or that, if you have distributed a modified version and a previous developer
asks for a copy of it, you must send one.

重點看最后一句,如果你發布了你的修改版本,之前的開發者需要你拿一份更新的源碼,你必須給他/她。

修改后是否需要提交到社區,其實和具體的license有關,不同的license有不同的規定。一些常用Open Source的license請參考下面鏈接 http://www.gnu.org/licenses/license-list.html

常見的開源license介紹

下面介紹幾個我們常常碰到的license,我不是學法律的,我沒有仔細研究各個license的法律含義,下面的描述只是我個人對這些license的理解,一切最終以該license的法律文件為準。

GNU General Public License (GPL)

[Large GPLv3 logo]

GPL是很多開源軟件使用的license,包括大名鼎鼎的Linux。GPL一個特征是開發者做任何的更改都需要回饋社區,所以商業開發不能基于GPL的基礎上進行修改,除非你把你的軟件也作為GPL來發布。GPL分三個版本,分別為GPL,GPLv2GPLv3。GPLv3的制定一定程度是為了限制微軟。Richard Stallman在 Why Upgrade to GPLv3 寫到其中一個好處就是限制微軟。

Another threat that GPLv3 resists is that of patent deals like the Novell-Microsoft pact.
Microsoft wants to use its thousands of patents to make users pay Microsoft for the privilege of running GNU/Linux,
and made this pact to try to achieve that. The deal offers rather limited protection from Microsoft patents to
Novell's customers.

Microsoft made a few mistakes in the Novell-Microsoft deal, and GPLv3 is designed to turn them against Microsoft,
extending that limited patent protection to the whole community. In order to take advantage of this protection,
programs need to use GPLv3.

Microsoft's lawyers are not stupid, and next time they may manage to avoid those mistakes.
GPLv3 therefore says they don'
t get a “next time”. Releasing a program under GPL version 3 protects
it from Microsoft's future attempts to make redistributors collect Microsoft royalties from the program's users.

 

由于GPLv2和GPLv3不兼容,連Linux的老大Linus也不喜歡GPLv3,一直使用GPLv2作為Linux內核的license。

GNU Lesser General Public License (LGPL)

[Large LGPLv3 logo]

由于GPL不能用于商業開發,但是商業軟件公司想在Linux上做產品,例如Oracle需要做Linux版本,那怎么辦,Oracle肯定不愿意公開自己的關系數據庫管理系統的核心代碼。一個折中方案LGPL就此產生。一些系統庫,如CRuntime庫可以可以使用LGPL授權,商業軟件可以調用這些系統庫,只要商業軟件不更改這些系統庫的源代碼,商業軟件可以不公開自身的源代碼。最新的QT使用了LGPL和商業兩個license。如果使用QT的LGPL版本,只要不更改QT,可以免費使用QT做開發。LGPL一定程度的帶動使用者的熱情,如果做庫開發,使用LGPL好處挺大,一方面方便推廣,另一方面當使用者修改了庫也會回饋社區。

BSD license

BSD license分為 FreeBSD licenseModified BSD licenseOriginal BSD license, 修改版本去掉了廣告相關的描述。BSD license是自由度很高的license,使用者可以修改原先的軟件而不貢獻給社區,甚至可以把開源代碼變成商業產品來銷售,拿到BSD的代碼基本可以放心使用。

Microsoft Public License (Ms-PL)

包含了Microsoft Public License (Ms-PL)Microsoft Reciprocal License (Ms-RL),是微軟的Open Source license,在Codeplex很多代碼都使用了Microsoft Public License (Ms-PL)。微軟自己發布的代碼也有不少是基于Ms-PL的。使用Ms-PL,當修改代碼沒有要求要回饋社區,但是需要在代碼包含Ms-PL的信息。

有時候在社區中會聽到一些這樣的聲音,做開源就不要使用微軟的技術了;Windows Embedded CE沒有Linux好,因為不開源等等。感覺要把微軟魔鬼化,可能在10年前微軟是反對開源的,可知道Bill是賣軟件起家的,軟件免費了,他的收入哪里來。可是有沒有想過Bill對慈善事業的貢獻不比Linus少。開源不開源不是道德問題,商業軟件和開源軟件可以和平共存。而且微軟近幾年積極投入開源,包括創建CodePlex為開源項目提供免費host服務。在嵌入式領域,Windows Embedded CE的內核也是開放源代碼的(叫做Shared Source不是Open Source),所以不能說由于Linux開源,而Windows CE不開源就比Windows CE優秀。關于Windows Embeede CE的源代碼,可以參考 Windows Embedded CE Shared Source.

開源的license還有很多很多,我就介紹這幾個,我自己也不是很懂這些法律的事情,但是每次我打算使用一個開源軟件,使用這些代碼,我都會認真的看看這些license,看看我能不能用。如果哪位對開源比較了解,對license比較有研究,歡迎交流。這篇寫到這里,下一篇寫 如何參與開源,參與開源需要什么,得到什么。

0
0
 
標簽:開源
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()