聊聊开源

2016-03-12 朱赟 嘀嗒嘀嗒 嘀嗒嘀嗒

最近的几篇文章对开源这个问题有所提及,有朋友在后台留言表示对这个话题很感兴趣。所以今天咱们就来聊聊开源吧。


说到开源,不知道大家心里面会关联到一个怎样的定义呢?人们通常把能够自由地获取、修改和重新发布源代码的软件称为开源软件。对于没有商业目的的个人使用者来说,这样简单地理解开源软件也是可以的。


其实源代码开放的软件或者免费的软件并不一定是开源软件,开源软件有着严格统一的定义。开源软件促进会即OSI(Open Source Initiative)对开源软件的定义有十个详细的条款。在 OSI 标准下,又可以有不同的许可证,大家很熟悉的有 Apache、BSD、GNU、MIT 许可证等等。每个许可证对一些开源的具体细节的要求有所不同。而经常大家比较关心的问题,如:

  • 开源软件能不能用于商业目的?

  • 为什么有些开源软件却可以收费?(通常是为相关 service、support 或者硬件付费)

  • 开源软件与早期的 GNU通用公共许可证(General Public License,简称GPL)有什么不同?

  • 常常说的 copyleft 和 permissive 也就是开源在软件嵌套使用中的传染性到底是怎么回事?(比如你的软件用了开源软件后受到的限制等。)

  • 如果没有获得许可证,开放源代码的软件还能称为开源软件么?

对于这些问题,在许可证的条例中都会有很具体的规定。感兴趣的筒子,可以到 OSI 的官网上溜达溜达。


先说一个故事。


有一个做 wifi 无线路由器的厂商,最早期的时候做了一个很牛逼的无线路由系统,当时这个系统的软件处于很领先的水平,所以产品大卖,赚了很多钱。后来有人研究它的软件系统,通过一些 reverse engineering 反证推出这个软件中一定用了某一个开源软件 X,而该软件 X 恰好是在某一个比较严格的许可证之下,并且该许可证要求所有使用这个软件 X 的其它软件也必须开源。有人起诉后,经调查发现,该 wifi 软件确实使用了这样的一个开源软件,所以只好开源了自己的代码。从此各种效仿该 wifi 系统的产品在市场上风起云涌。商机一去不复返。


这是一个很久前听过的故事了,抱歉很多细节和名称我也确实已经不记得了。这里其实就是想通过这个故事说明,企业用户及需要参与开源项目的开发人员,必须对开源软件有更深刻的理解,需要认识到使用开源软件和参与开源软件开发时潜在的法律因素,这样才能尊重他人的权益并合法有效地保护自身的利益,促进事业的发展。


那么我们通常用到的开源软件都有哪些来源呢?


一是来自个人。很多对软件和计算机技术具有与生俱来的 “天然痴” 的天才们,因着自己的理想和兴趣,打造出有益于人类的软件或工具。造福技术界,一生只为寻找自由和欢笑。他们,是真正的程序员。


最牛的,也是大家熟知的,可能要数 Linux 的缔造者 Linus Torvalds 了。Linus 在缔造 Linux 后,转手又在2005年搞出了分布式版本控制系统 Git,目前几乎全世界的程序员都在用 Git 管理自己的代码。无论是 Linux 还是 Git,都是计算机和软件技术史上的里程碑。关于 Linus,该大神在 2001 年出过一本自传,叫做《Just for Fun》,是他和大卫·戴蒙合著的。然而这里我推荐一下池建强的一个博客系列:《Linus,一生只为寻找欢笑》,写得生动风趣有故事有情怀。想当初刚认识池哥不久的时候,忘了问了他一句什么了,他就在微信上 pia 的给我发了个此文的链接,看完后对他和 MacTalk 的景仰一下子涨了几分。


另一个大家应该认识下的,是我们中国自己的牛人,OpenResty 的创始人章亦春,最近写了另外一篇文章,这几天会发布。


开源的主要来源还是来自于公司。这其实也分成两种很不同的情况。


首先是类似于 Google 这样的大公司,Google 开源出来的软件和工具已经数不胜数了,随手举几个人尽皆知的:Android、浏览器 Chromium、Go 语言、Java 库 Guava 等等。再如 Facebook 开源的 React、React Native 等。还有 2015 年几个重大的开源事件:Apple 开源了 Swift,Microsoft 开源了  .NET 和 Visual Studio,Fujitsu 开源了它的云管理,Google 开源了 AI engine TensorFlow……


这些大公司对自己开源的项目是极其重视和负责的,有专门的程序员负责项目的维护、外来代码提交的审核、软件的更新等等等等。并且因为这些软件其实也是他们某个产品的核心部分,所以软件本身的更新和技术支持都能有很好的用户体验。


而另外一些相对较小的公司,如 Twitter、Airbnb、DropBox 等这样的湾区的新兴公司,也会有自己的开源项目。因着人力资源等等因素,可能对开源的更新、维护等并没有很完备。那么既然资源有限,为什么还要执着地将开源进行到底呢?不外乎有三个原因:


一是这些公司充斥着大量对技术真心爱好的技术宅,他们在工作之余,把维护开源当成了一项兴趣来做。开放源代码不仅仅只是软件源代码而已,它们也攸关自由、分享和社群精神;创作、美和黑客所谓的"有趣"。


二是很多这样的小公司,比如我们 Airbnb,其实使用着各种大量的开源工具。将一些沉淀下来的技术开源,也是一种对社区的回馈。


三是潜在的意识形态。硅谷是世界技术的领先和核心,硅谷精神,也是每个硅谷程序员追求的自由、开放、平等,是一个品牌,也是一个烙印。有些事并不问前程或利弊,就好像你吃饭前会洗手,大家觉得是理所当然了。尽自己最大可能的支持开源,已经不是一件需要理由的事业了。


最后说说为什么即使是 Google 这样的公司,有些软件或者项目也没有开源。


我的文章中多次提到的 Google 的存储神器 Spanner,以及 GFS, MapReduce, BigTable 等等,至今都没有开源,并且以后也会继续这样下去。为什么呢?这事其实很好理解,总结下,大致有三个原因:


第一,Google 的有些技术是极大地为其自己的需求和架构定制的。尤其是 Spanner,其实是一个软硬件合一的方案,而不仅仅是一个软件工具。这样的项目开源其实对整个社区的贡献不大,因为这样的方案对其它没有一样的硬件或者架构的公司来说是没有办法使用的。


第二,这样的软件中已经植入了太多 Google 独有的代码和业务逻辑。想要将这些业务代码清理干净,抽象出人人可用的软件,需要巨量的人力和长期的工作。并且维护两个软件的更新(Google specific VS generic)也是巨大的代价。因此很难实现。


第三,毕竟人家也是商业化了的公司,毕竟人家也有竞争对手……然后就没有然后了。


因此,AlphaGo 最终会不会开源我不知道。但是短期内我觉得这是不可能的。


所以早上看到朋友圈这样的分享,第一反应就是:这太特马有点扯淡了。



嘀嗒嘀嗒:讲述技术、白话硅谷。偶尔八八程序员身边的事儿。关注长按二维码: