2010年2月27日星期六

阮一峰的网络日志

阮一峰的网络日志


为什么GPL是更好的开源许可证?

Posted: 26 Feb 2010 05:38 PM PST

1.

让我从一件新闻讲起。

2009年,计算机业界发生了一件大事:甲骨文公司以74亿美元收购SUN公司。

消息宣布后,有一个人坚决反对这笔交易。他叫Michael Widenius,是数据库软件MySQL的主要创始人。

他为什么要反对呢?因为MySQL现在归SUN公司所有,一旦收购成功,就将属于甲骨文公司所有。但是,后者的主要产品是Oracle数据库,与MySQL是竞争关系。所以,甲骨文公司不可能扶持MySQL的后继开发,甚至有可能杀死MySQL。

Michael Widenius不能接受这个事实,他发起万人签名,提交请愿书,要求欧盟委员会否决这项交易。具体情况可以参见HelpMysql.org

2.

去年12月28日,他写了一篇很长的文章"Help keep the internet free",解释为什么反对这项交易。他是这样写的:

"If Oracle were allowed to acquire MySQL, we would be looking at less competition among databases, which will mean higher license and support prices."

"如果甲骨文得到了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说得很清楚:

"After all, there are plenty of other C libraries; using the GPL for ours would have driven proprietary software developers to use another—no problem for them, only for us."

"毕竟,市场上的C库有的是。GPL许可证将迫使私有软件去使用他人的库,这不会给他们带来困扰,只会给我们带来困扰。"

所以,策略是这样的:整体软件,或者没有替代品的代码库,一定要使用GPL许可证;有替代品的代码库,可以使用限制较少的开源许可证,但是在取到足够市场份额之后,也应该转为GPL许可证。这就是为什么javascript的代码库,大多数都是类似BSD的许可证,而不是GPL许可证的原因,因为可替代自己的竞争者实在太多了。

总之,如果你想把自己的软件开源,只要不属于上面这种例外情况,GPL就是更好的选择。

(完)

2010年2月22日星期一

阮一峰的网络日志

阮一峰的网络日志


“熔模铸造”图解

Posted: 21 Feb 2010 11:14 AM PST

国摄影师Alex Hofford访问了一家宁波的乡镇企业。

在那里,他拍摄了"熔模铸造"(investment casting)的全过程,非常有趣。

从古代青铜器算起,这种铸造工艺已经有几千年的历史了,并且直到今天还在广泛使用。看完下面的这组图片,你就会明白它到底是怎么做的。

此外,你还会从中看到,现实中的中国制造业是什么样子的,以及其中反映出来的一些社会问题。我强烈推荐这组作品。

它属于Alex Hofford的"中国工厂"系列照片之一。这个系列还包括游戏机工厂遥控器工厂塑料工厂手机充电器工厂笔记本电源工厂变压器工厂五金工厂

下面的图片比较多,如果无法显示,多刷新几次即可。

================================

1. 工人在搅拌蜡原料。

2. 融化的蜡注入金属模具。

3. 等到初步凝固后,就可以从模具中取出蜡模型。

4. 蜡模型放入冷水中,进一步冷却固化。

5. 成型的蜡模型移入储藏室。它们是金属零件的原型,那些零件可以用于制造汽车、火车、飞机、机械设备、电站设备等。

6. 蜡模型都放在一个个竹筐里。

7. 下一步是将同样的模型都合并在一起,形成一个模型树。通过加热,把它们黏合。

8. 排列好的模型树,将被送入下一道工序。

9. 这一步是形成陶模(ceramic mold)。简单说,就是反复执行三个步骤:涂料、撒砂和硬化。首先,模型树被浸入硅酸乙酯或者硅酸钠的复合溶液。溶液的气味很像氨水,但是现场没有一个工人戴着呼吸系统保护装置。

10. 完成涂料的模型树,再被手工洒上二氧化硅晶体或者锆石晶体。这个步骤会反复进行多次,然后模型树会被悬挂,等待风干硬化。

11. 工人是新疆来的临时工。

12. 涂料和撒砂需要一直做,直到陶模的厚度达到一厘米左右。

13. 粉尘太大,我的眼睛流泪了。

14. 完成之后,陶模就被放在一边,由夜班工人处理。

15. 夜班的任务是熔铸。之所以要在夜里进行,是因为宁波市规定,晚上11点以后电费半价。

16. 铸造车间的熔炉使用煤炭作为燃料。陶模被推进去,里面的蜡芯开始融化,二氧化硅晶体互相结合,形成了一个坚硬抗热的空心陶瓷部件。这一步叫做烧芯。

17. 工人用推车,将烧制好的陶模取出熔炉。他既没有戴手套,也没有戴护目镜。

18. 烧得通红的陶模,被直接放置在砂石上。

19. 工人用铁杆,将陶模排成一串。他们穿的完全是普通鞋子,没有穿那种厚重的安全靴。每当铁杆碰到陶模,就会有余火飞溅起来。

20. 工人用铁耙子,将砂石围在陶模四周,只露出口上的部分。陶模被牢固地固定了。

21. 同时,其他工人点燃了电熔炉。虽然,将这道工序留到夜晚进行,是为了省电费,但是另一个好处是,拍摄出来的照片很壮观。

22. 废钢加入电熔炉融化。

23. 融化后的钢水被倒入一个可以移动的坩埚。两个工人用长杆子架住坩埚。

24. 这一步非常危险,火花四溅。但是工人们没有戴手套,也没有戴护目镜。

25. 钢水被倒出坩埚,倒入一个个陶模之中。

26. 钢水发着白光,温度达到千度以上。

27. 工人全神贯注,非常小心,防止钢水从陶模上溢出来,或者倒错了地方。

28. 如果钢水倒得不好,没有正好填满陶模,或者在倒的过程中形成气泡,整个零件就成了次品和废品。工厂的利润和成本就要受到影响。

29. 现场的烟雾和气味非常强烈,但是没有人戴呼吸保护装置。

30. 经理告诉我,厂方以前给工人发过护目镜、手套、靴子、面具等劳防设备,但是工人不愿意使用。

31. 赤手空拳地在熔炉旁倒钢水,无疑让现场弥漫着一股英雄好汉气概。

32. 经理说,厂方曾经规定,不使用劳防用品,每次罚款5元。

33. 但是不久以后,因为罚款会减少工人的收入,所以工人纷纷跳槽,到其他没有劳防用品也不罚款的厂里干活。所以,厂方最后只能放弃罚款制度。

34. 这就是奇怪的地方。不仅厂方不重视生产安全,就连工人也不重视对自己的保护。在西方国家,工人的自我保护意识已经强化到有点过分的程度,而在中国,这种意识则是根本不存在。提高生产安全的唯一方法,只能是通过更严厉的法律,以更强有力的力度,迫使厂方去实施。对工厂随时进行抽查,就是一个好方法。但是,执法部门缺乏人手,以及政府中的腐败,都会阻碍这项工作。

35. 中国是一个大国,保护工人和保护环境,都遇到了相似的问题。那就是法律制定出来了,却得不到实施。要想解决这个问题,真是谈何容易。

36. 等到冷却后,浇铸好的陶模就被巨大的火钳移走了。

37. 它们被放在推车上。

38. 这一次,工人戴着手套。

39. 陶模和里面的零件,被拉到楼外。

40. 它们被倒在地上冷却,等着日班工人移去陶瓷外壳。

41. 第二天早上,工厂烟囱冒出了煤烟。具有讽刺意味的是,我是在联合国哥本哈根气候会议闭幕的当天,拍摄这张照片的。

42. 燃煤的锅炉整个白天都要烧着,这是为了保证"烧芯"步骤的进行。温室气体就是这样被排放的。

43. 工人用喷灯除去零件上面蜡模的残片,这一步必须重复执行。

44. 这是一项非常艰苦的工作。

45. 工作条件很恶劣。

46. 虽然看上去,现场一片混乱,但是这项工作本身完全是有条不紊地在进行。

47. 其他工人从零件上去除二氧化硅的残渣。有时会用到榔头。

48. 这个工人的手套上都是洞。工作条件无疑是很差的。

49. 钢铁零件会进一步用机器清洁表面,把浇铸过程的痕迹完全去掉。

50. 工人用强力机器对产品做进一步光滑处理。这个工作场景简直就像中世纪的手工作坊。

51. 午饭时间到了。

52. 饭菜中没有肉食,只是米饭和蔬菜。

53. 午饭后,工人将零件放入喷砂机,做最后的抛光。

54. 拍摄这张照片的时候,喷砂机正好开着,许多小块的碎石从里面高速弹出,像连珠炮一样打在我身上。奇怪的是,这个工人戴着面具,保护的是呼吸系统,他却没有戴护目镜。

55. 喷砂完成后,零件成品就从机器里落在手推车上。

56. 它们会被用于重型工业的机械上。

57. 用"熔模铸造法"制造钢铁零件的整个过程,到此就全部完成了。

(完)