大家好,欢迎来到第23期《混沌周刊》。《混沌周刊》是一个试图从开发者角度为你带来这个世界上发生着什么,发生过什么,以及未来可能会发生什么的栏目,每周更新。您可以通过首页的RSS、Twitter、Telegram频道和电子邮件等方式订阅。如果您觉得本周刊对自己有所帮助,请不吝推荐给其他人,多谢。
在往期的更新里,我们谈过多次开源世界的贡献者,对自己被「白嫖」表示强烈不满的经历。就在不长的时间内,又发生了一起开源项目作者表达抗议的事件:Faker.js的作者因为个人生活变故,财务状况受到严重影响,他对大公司免费使用他的代码而没有任何(金钱或者代码上)反馈的行为非常不满,删除了整个仓库并恶意修改NPM包的版本信息。目前他的GitHub账号已被停用。
一部分人说,是因为他当年自己选择用MIT而不是GPL这样带有「强制自由」特性的许可证。该说法也有些道理,很多人开源自己的项目时并没有想过不同License间有什么差别,可能仅仅是看着其他人使用某个License,就拿一个一样的过来。甚至连Vue团队也发生过不尊重MIT协议的情况。
但这忽略了两个问题。其一,GPL虽然要求发布的衍生作品依然要遵循GPL协议开源,但并不会保证作者能够得到什么经济上的补偿(当然也没有禁止,这是很多人误解的地方,你是可以拿GPL软件卖钱的,但必须附带源码并且不能阻止用户二次分发);其二,开源环境早已不同往日,除了大公司对GPL噤若寒蝉,我参与过的一些MIT许可证项目也对「用到GPL代码」这件事非常敏感,所以如果当时以GPL许可证开源,恐怕这个项目不会有如此的流行程度。
DHH1此前有篇很长的博文讲述为什么他喜欢MIT协议,以及开源为什么不是为了营利,而更像是种热情的表达。好比你不太会写一篇博客然后让每个读者都付费才能阅读,如果是这样那可能更应该去开课或者写本书。站在DHH本人的立场这当然不是问题,他年轻时就开始创业,财务自由,对项目也有绝对的影响力,所以不屑「斤斤计较」的GPL许可证。
然GPL的起草者Stallman也是智者,多年前就颇有远见地预言软件的不自由终将会危害人类社会的自由(然后GPL第三版的发表日期极为巧合地和第一代iPhone的发售日相同),PC时代的大家还不那么理解这一点,今天终于明白了——一个具备完整录音、拍摄、定位能力,时刻保持网络连接,还不能随意拆卸电池的设备,终日与你同行,你还完全不知道里面的代码运行着什么。
所以GPL是有意义的。打击罪犯的暴力是必要的暴力,不应阻止它存在,否则我们会被邪恶吞噬。如果你认为GPL太过激进,可以选择较宽松的LGPL许可证;如果你认为LGPL限制还是过多,还可以选择折中一些的MPL许可证。
回到主题。这一次次事件警示大家,参与开源项目时,应当有一些必要的假设:
- 如果你是开发者,不要指望项目能给你带来直接收益;许可证是惟一有效力的东西,要引起重视,谨慎思考;开源那些用户是开发者的产品(比如库、框架、命令行工具)更有价值;开源面向普通终端用户的软件,可能是吃力不讨好的事。
- 如果你是用户,不要指望开发者对你有什么道义上的责任,也不要指望他们能积极地帮你修复bug;你下载了代码并运行,后果自负;有问题,惟一能损害的就是作者的名声;然而在资本主义的世界,谈道德还是太奢侈了点。
DHH多次讲自己成长经历时,都会感慨自己虽然家庭不算富裕,但还好出生在丹麦这样一个有完善福利制度,不需要背负贷款上大学的国家,否则他也没有机会接受高等教育,没有今天的成就。现代的社会福利,并非是某些人理解的单纯的资源浪费,更像是种风险投资:如果100个接受福利的人中有十个成为技术工作者,有一个人有值得一提的成就,那社会得到的收益也许就是正面的。
一些程序员抱怨,开源运动是行业内中年危机的元凶。我不想给予这种朴素的观点太多评论。想象一下完全没有开源软件的世界吧:不同的公司之间竖立着坚固的技术壁垒,被裁员的开发者甚至不知道可以去哪;每个人都要支付一定的软件/培训费用才能学会某项技术,偏远地区的学生永远难以拥有学习开发技能的权利……或者说,在这些人想象中那个做程序员的门槛远高于现在的世界里,为什么他们就能假定被挡在门外的不是自己?你也许会辩称我前面假想的例子不是现实,封闭技术也有免费计划,但别忘了,前提是有大量开源技术作为竞争者。实际上,由于软件在互联网的复制成本为零,开源软件这样的开发形式一定会出现,并且是IT行业作为先进生产力的一个标志。
可能是最为知名的网站排名,亚马逊旗下的Alexa,今年要关闭了。
如果你没那么关心Java的发展,可以快速看看这篇文章,它概括了从Java 12到Java 17的重要特性,包括多行字符串和模式匹配。尽管常常为人所诟病,但Java的确是拥有诸多闪光点的语言——否则它也不会流行到现在。
你用过Slack吗?如果用过,想必你已经知道它的威力;如果没有,不妨一试。也许你会纳闷,一个没有人和自己聊天的聊天软件有什么意义?在这里的例子中,作者分享了他「在Slack和自己聊天」的工作流,如何整合若干自动化机器人来提高工作效率。Slack对免费用户有一些限制,比如最多集成10个服务及保留10000条历史消息。如果你的需求到了那一步而不想付费的话,也可以考虑用免费的Telegram机器人。
这篇博客引入了一个假设:所有的函数都带有颜色,要么蓝色,要么红色;红色函数只能被同样红色的函数所调用;调用红色和蓝色函数时有不同的语法……是否有些熟悉了?是的,实际上它在暗示(明示)当代语言中流行的async/await语法。然而作者认为这种强行分开两种函数的做法有问题,其本人更推崇Go或Java等语言处理并发的做法——轻量级线程。
本期的《混沌周刊》就到这里,下期再见。
1 Ruby on Rails的作者,Basecamp联合创始人。硅谷互联网圈相当有影响力的人物,《混沌周刊》创刊期便提到过此人。
发表回复