开源社区与AI生态
我们从程序库的介绍可以看出,几乎任何早期的机器学习的编程者都会自己编写一些常用的函数和运算,建一个自己用的或自己的公司内部用的程序库。发源于大学的这些程序库,例如发源于加州伯克利大学(UC Berkeley)的Caffe,通常从一开始就是“开源”的,也就是这些程序库里面的源代码都是公开的。近年来谷歌、Facebook、微软、亚马逊等公司也将自己的程序库开源。为什么它们会如此“大公无私”?当然这些公司内部推动开源的技术人员中不无理想主义者,希望通过开源来推动机器学习的快速发展。但公司作为一个营利主体,开源的主要商业动机是吸引更多的软件编程人员使用自己的编程框架,滋养一个围绕着自己的编程框架的生态系统。那么“开源”这个游戏是怎么玩的呢?程序源代码开放后随便什么人都可以改,如何控制质量?下面我们就介绍一下“软件开源”这个游戏的历史和规则。
软件开源在美国有悠久的历史,最成功的开源项目就是互联网的开发。从1962年兰德公司提出互联网的概念,到1968年头三个网络节点(斯坦福大学、斯坦福研究所、加利福尼亚州洛杉矶大学)的连接,再到网络协议TCP/IP的开发和成熟,其间没有任何政府部门出面组织,也不受任何一家公司控制,完全靠社区志愿者。美国这个国家就是从社区到小镇,到州,再到联邦这样自下而上建立起来的。当1620年从英国驶往新大陆的“五月花”号轮船被季风从原来的英王特许地纽约吹到北边的荒无人烟的今天叫作波士顿的地方时,船上的102名男性清教徒在一起订下了“五月花号圣约”。这份圣约就是美国第一个社区的“乡民公约”。之后美国的各个移民社区都是这种自治管理模式,没有官,也没有“上级”,所有的社区都由社区居民自己定规则,自己管理。“政府”就是自己订的乡民公约。所以在美国独立战争后许多人认为根本没有必要成立一个联邦政府。这种强大的自治传统是开源软件的文化基础。所以像互联网这样无中心,没“领导”的“怪物”只能在美国成长起来,在世界任何其他地方都不太可能。这和技术无关,而和文化、历史有关。互联网的技术很简单,只要有一台显示终端、电话线和提供信息的计算机就可以搞互联网了。其实世界上联网最早的国家不是美国,而是法国。法国1968年就开发出了“Minitel”(法国自行建立的国家网络,建成早于互联网),由法国邮电部开发、控制。1982年就在全国铺开,给每个居民家里面安装一个统一的终端,通过电话线连接到邮电部的数据库里,可以查天气、订票等。法国这样的欧洲大陆国家有悠久的皇权传统,从一开始就和美国的思路完全相反,一切由邮电部控制。在互联网的冲击下,法国Minitel和其他国家政府控制管理的互联网门户一样早就荡然无存。回过头看,孰优孰劣一目了然。
软件开源也是一个社区,这个社区也有乡民公约,这个公约的主要内容就是鼓励每个人分享对开源软件的改进。经过多年的演进,目前开源社区的公约大多使用“Apache2.0协议”。这个协议的主要规则如下:任何人都可以使用Apache 2.0协议许可下的软件,并且可以用于商业;任何人都可以任意修改原有的软件,并将修改后的软件申请商标和专利,但修改的软件必须注明使用了Apache 2.0的许可,必须明确标示修改的部分。
开源社区允许在开源软件的基础上开发自己的商用软件,而大多数商用软件是不愿意公开的。那么开源社区如何解决“搭便车”的问题呢?
这个问题就像问为什么总有人愿意出头为社群出力,为什么人会有利他的动机。答案在于种群的竞争和演化。设想远古两个邻近的部落,第一个部落里面的所有人都很自私,另一个部落里面有些人愿意为大家冒风险和做事,第二个部落的合作能力和战斗力就会比第一个强,两个部落发生战争时第二个部落就会把第一个部落消灭了。那些“纯自私”的人的基因就无法遗传下来,而获胜存活下来的基因中就会有利他成分。就像我们在日常生活中看到的一样,一个社群中愿意牺牲自己的利益为大家服务的人虽然总是极少数但永远存在。开源社区其实是同一个道理,在里面免费干活不断改进软件的人也是少数,所以许多开源社区都是一路艰难。但是对于那些逐渐成为重要基础设施的开源软件,例如互联网协议、操作系统Linux等,就会有更多的人来关心和付出。例如许多商业公司使用了这些开源软件,一旦公司做大,这些公司就非常关心这些开源软件的改进、更新和安全。这些公司就会出钱出力。还有一些用户也会捐献,许多常年依赖维基百科学习和检索的读者,因为希望这个工具越来越有用,就会定期捐款支持。笔者已经不能想象离开维基百科这样的工具该怎么工作和生活。但以上这些因素仍然没能彻底解决开源社区“搭便车”的问题。这和我们在一个社群社区的情况完全相同,总有人会“搭便车”。区块链技术的出现也许能彻底解决这个问题,这又是一个很长的话题。笔者也许会在下一本关于区块链对社会的冲击的书中详述。
所以有了开源的编程框架以后,大量的AI应用开发公司就可以使用现成的程序库而不必从头开始。这就大大降低了AI应用的技术门槛。一个不懂机器学习的有经验的软件工程师,可以用一个月时间在网上学一门机器学习的基础课程,再花一周时间就可以掌握像谷歌的TensorFlow这样的编程框架。所以今天融资的新创技术型公司都可以说自己是“AI公司”。如果这些公司的技术都使用开源编程框架,它们的技术差别就很小。因此这些公司比拼的是对某个行业的理解和在该行业的营销能力,以及对该行业数据的占先和占有程度。有AI技术实力的公司通常不完全依赖开源的编程框架,而是自己开发很多自己专用的底层程序库,甚至有自己的编程框架。






本书评论