背景
最近有幸参与了王克伟的开源项目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). <br>The freedom to study how the program works, and change it to make it do what you wish (freedom 1). <br>Access to the source code is a precondition for this. <br>The freedom to redistribute copies so you can help your neighbor (freedom 2). <br>The freedom to distribute copies of your modified versions to others (freedom 3). <br>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. <br><br>不论目的为何,有使用该软件的自由(自由之零)。 <br>有研究该软件如何运作的自由,并且得以改写该软件来符合使用者自身的需求(自由之一)。取得该软件之源码为达成此目的之前提。 <br>有重新散布该软件的自由,所以每个人都可以藉由散布自由软件来敦亲睦邻(自由之二)。 <br>有改善再利用该软件的自由,并且可以发表改写版供公众使用,如此一来,整个社群都可以受惠。<br>如前项,取得该软件之源码为达成此目的之前提(自由之三)。
复制代码
同时,开源可以做商业项目,再次引用上述文章。- Free software does not mean noncommercial. A free program must be available for commercial use, <br>commercial development, and commercial distribution. Commercial development of free software is no longer unusual; <br>such free commercial software is very important. You may have paid money to get copies of free software, <br>or you may have obtained copies at no charge. But regardless of how you got your copies, <br>you always have the freedom to copy and change the software, even to sell copies.<br><br>自由软件因此并不是「非商业软件」。自由软件必须适用於商业用途。自由软件的商业开发模式已很常见;这样的自由商业软件相当重要。<br>使用者可以付费取得 GNU 的软件,或者,使用者也可以免费取得这些软件,<br>但是,不管使用者是如何取得这些软件的,她/他们必须永远有权利复制或是改写这些软件,甚至 贩售 这些软件。
复制代码
开源不等于免费,请下面的定义。- When talking about free software, it is best to avoid using terms like give away or for free, <br>because those terms imply that the issue is about price, not freedom. <br>Some common terms such as piracy embody opinions we hope you won't endorse. <br>See Confusing Words and Phrases that are Worth Avoiding for a discussion of these terms. <br>We also have a list of proper translations of free software into various languages.<br><br>当谈到自由软件时,最好避免使用「给」或是「免费」这类的措辞,因为这些措辞会给人给人「free」是指「价格上的免费」的误导,<br>而忽略了使用软件自由的真义。有些词语像 「盗版」就有类似的涵义,我们希望自由软件的使用者不会想被这样指称。<br>有关讨论这些措辞的用法,详见 「容易混淆的词语,请尽量避免」 一文,我们也有 「自由软件一词的翻译」 的多种语言版本。
复制代码 开源的代码随便用?
如果仅仅是使用开源软件,不使用里面的源代码,或者更改该开源软件,一般来说可以免费使用,例如使用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 <br>release modified versions, or your freedom to make and use modified versions privately. Rules that if you make your version <br>available in this way, you must make it available in that way also can be acceptable too, on the same condition.<br> (Note that such a rule still leaves you the choice of whether to publish your version at all.) Rules that require release of <br>source code to the users for versions that you put into public use are also acceptable. It is also acceptable for the license to <br>require that you identify your modifications as yours, or that, if you have distributed a modified version and a previous developer <br>asks for a copy of it, you must send one.<br>
复制代码 重点看最后一句,如果你发布了你的修改版本,之前的开发者需要你拿一份更新的源码,你必须给他/她。
修改后是否需要提交到社区,其实和具体的license有关,不同的license有不同的规定。一些常用Open Source的license请参考下面链接 http://www.gnu.org/licenses/license-list.html
常见的开源license介绍
下面介绍几个我们常常碰到的license,我不是学法律的,我没有仔细研究各个license的法律含义,下面的描述只是我个人对这些license的理解,一切最终以该license的法律文件为准。
GNU General Public License (GPL)
GPL是很多开源软件使用的license,包括大名鼎鼎的Linux。GPL一个特征是开发者做任何的更改都需要回馈社区,所以商业开发不能基于GPL的基础上进行修改,除非你把你的软件也作为GPL来发布。GPL分三个版本,分别为GPL,GPLv2和GPLv3。GPLv3的制定一定程度是为了限制微软。Richard Stallman在 Why Upgrade to GPLv3 写到其中一个好处就是限制微软。- Another threat that GPLv3 resists is that of patent deals like the Novell-Microsoft pact. <br>Microsoft wants to use its thousands of patents to make users pay Microsoft for the privilege of running GNU/Linux, <br>and made this pact to try to achieve that. The deal offers rather limited protection from Microsoft patents to <br>Novell's customers.<br><br>Microsoft made a few mistakes in the Novell-Microsoft deal, and GPLv3 is designed to turn them against Microsoft, <br>extending that limited patent protection to the whole community. In order to take advantage of this protection, <br>programs need to use GPLv3.<br><br>Microsoft's lawyers are not stupid, and next time they may manage to avoid those mistakes. <br>GPLv3 therefore says they don't get a “next time”. Releasing a program under GPL version 3 protects <br>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)
由于GPL不能用于商业开发,但是商业软件公司想在Linux上做产品,例如Oracle需要做Linux版本,那怎么办,Oracle肯定不愿意公开自己的关系数据库管理系统的核心代码。一个折中方案LGPL就此产生。一些系统库,如CRuntime库可以可以使用LGPL授权,商业软件可以调用这些系统库,只要商业软件不更改这些系统库的源代码,商业软件可以不公开自身的源代码。最新的QT使用了LGPL和商业两个license。如果使用QT的LGPL版本,只要不更改QT,可以免费使用QT做开发。LGPL一定程度的带动使用者的热情,如果做库开发,使用LGPL好处挺大,一方面方便推广,另一方面当使用者修改了库也会回馈社区。
BSD license
BSD license分为 FreeBSD license,Modified BSD license 和 Original 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比较有研究,欢迎交流。这篇写到这里,下一篇写 如何参与开源,参与开源需要什么,得到什么。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |