2010年3月20日星期六

JSMin 的道德大战

本人是JSMin的用户,无非用它来压缩 JavaScript 代码的规模,从而减少数据传输量、提高浏览器解释代码的性能,却从未认真阅读过其版权声明,实在汗颜。
有趣之处在于,Web 开发领域使用JSMin富有争议,引起开发者、互联网公司和开放源代码传教士之间的精彩道德大战。让我先从其版权声明讲起。

JSMin的版权声明从约束力最小的MIT许可证修改而来,而MIT许可证的声明长达162字,但是大意只有两个:
  1. 不管你如何发布软件,你要在所有的拷贝中加入本声明
  2. 被发布的软件仅包括软件本身,不承担任何附加担保、义务和责任
除了抽象的普遍性和无责,相当于什么也没说。好比一个开发者决定开放自己编写的软件代码而又不知道选择什么许可证时,用MIT许可证再合适不过了。采用MIT许可证的软件如著名的prototype.js

后来 JSMin 的作者 Crokford 发布它时,在MIT许可证上加了9个字,后来正是这富有争议的9个字,给了我们精彩的故事:
“The Software shall be used for Good, not Evil.”

因为它以MIT许可证作为基础,所以以后在JSMin基础上开发的软件都把这段文字包括在自己的许可证里。于是用到JSMin的很多代码包括etherpad, jsmin-php 都做了如此“不做恶”的声明。在 etherpad 被谷歌收购之后,它的开放源代码版本不得不去掉使用JSMin的部分,因为这9个字意味着该软件可能不免费,与googlecode的使用协议有冲突。于是如果你想要把代码通过 googlecode.com 发布,那么你就不能使用和JSMin相关的代码。想起来哪家公司说过“Don't be evil”吗?

不光是 JSMin, 使用JSLint也没戏了。接下来是应用它们的各式互联网应用程序,你将不能用这些道德代码去开发——因为你无法担保基于Web的功能不被其他人用来做坏事,如果你想担保,那么至少要加入这段修改过的MIT许可证——实际上如我一般在商业公司里工作的程序员都做不到。

有人想要把这段文字从许可证里去掉。但是修改许可证可不是小事,而且去掉这些文字的行为违反了MIT许可证的第一条。所以很多JSMin的用户都不同意这种做法(除了JSMin.js的作者,他用JSMin处理了自己编写的jsmin.js代码,于是这段声明就没有了),于是他们不得不把软件从googlecode.com的代码仓库里面迁出来。


看完这篇博文里Crokford调侃某大公司律师的文字之后,我发现得和JSMin说再见了。