章文嵩:开源漫谈

章文嵩:开源漫谈
2023年09月12日 10:54 刘韧

摘要:本文主要谈自己对开源的一些认知,从开源发展的历程来看,开源概念和开源生态都是不断演化出来的。开源软件是互联网产业发展的基石,开源生态推动云计算的发展,开源与商业化结合形成持续发展的飞轮。也从个人经历的例子讲开源全球协作和企业做开源的价值。企业受益于开源也回馈开源。开源正以“开放、共享、协同、生态+商业模式”的新型生产方式,孕育更多技术创新,成为推动全球科技发展的核心引擎。

开源发展的简史

开源是指开发者通过公开源代码,使得任何人都可以查看、使用、修改和分发软件的一种方式。这个概念是随着时间发展的,从早期的软件自发共享,面临的软件知识产权诉讼,到发展各种开源许可证清晰概念,再到现在开源和商业化紧密结合,形成开源协同创新生态等。

在二十世纪五六十年代,计算机硬件和软件形态都与今天有着很大的不同。计算机硬件是大型、体积庞大的机器,使用真空管和继电器等电子元件进行计算。这些计算机的速度非常慢,通常需要花费几个小时才能完成一项简单的计算任务。在软件方面,很多计算机程序是由低级机器语言编写的,也开始出现一些高级编程语言、操作系统,那时候软件基本上随着计算机硬件赠送,人们没有软件版权的概念。

七十年代初,一个标志性事情发生了,AT&T贝尔实验室的一些计算机科学家(其中包括Dennis Ritchie、Ken Thompson等)开发了一个新的操作系统,称为Unix。他们在1971年开始分享Unix系统的代码,首先是分享到美国的大学中,以便学生和研究人员能够使用、学习和修改系统。这些分享的Unix版本被称为“Research Unix”。在接下来的几年中,Research Unix逐渐成为了计算机科学教育和研究中的重要工具。更多的大学和研究机构开始使用Research Unix,其中许多机构都对其进行了改进和扩展,使得其功能更加强大、灵活和适应不同的需求。1977年加州大学伯克利分校的计算机科学系以共享源码方式(shared source)发布了第一个版本的BSD (Berkeley Software Distribution),旨在扩展和改进Unix系统的功能。它是BSD Unix操作系统的雏形,为今天的许多操作系统的发展奠定了基础。

1976年盖茨给业余电脑俱乐部写了封有名的公开信,“请大多数业余爱好者注意了,你们的BASIC编译软件是偷来的。这不公平。你们这样做会让人们不再编写好软件。没人能够承受得起无偿的专业工作。如果有谁愿意付钱的话,请来信,我会很感激的。” 这封信在业余电脑爱好者中激起了很大反响。基本上开启了软件版权的时代,当时的美国版权局认为软件可以像书籍一样受版权法保护,1978年1月1日起正式生效,美国版权法明确规定软件具有版权。

许多计算机科学家和技术专家不断扩展和改进Unix系统,Unix社区也逐渐形成。AT&T看到Unix的价值,1982年AT&T开始声明Unix的产权,AT&T开始向商业客户授权使用Unix,并收取成本高昂的许可费。这意味着Unix的商业化使用必须获得AT&T的许可,否则将面临知识产权诉讼和经济惩罚。当时AT&T和美国司法部达成了一项反垄断和共管协议。作为这个协议的一部分,AT&T同意将Unix的版权和知识产权分离并许可给第三方。这导致了AT&T Unix和BSD Unix之间的知识产权争议。

这种许可制度导致了Unix的商业化市场上的垄断,随着商业计算机和封闭软件的发展,过去开放分享的环境逐渐消失。1983年Richard Stallman发起的推广“自由”软件运动,创建了GNU项目,GNU是GNU is Not Unix的缩写,旨在创建一个完全自由的操作系统。GNU项目吸引了众多的贡献者,从Emacs文本编辑器开始,发展产生了许多开源软件的核心组件,如GNU Bash shell、GNU C编译器、GDB调试器等。在1984到1988年,GNU项目并没有正式许可证来覆盖它的所有软件。导致Stallman创建GPL (GNU General Public License)的原因是他跟James Gosling(UniPress创始人和后来的Java之父)的一段经历,Stallman在1975年创建第一个版本的Emacs,Gosling在1982年写了运行在Unix之上的基于C语音Emacs(称之为Gosling Emacs),Gosling开始时允许自由分发Gosling Emacs的源代码,Stallman在1985年初GNU Emacs 15.34版本用了Gosling Emacs的源代码。Gosling把Gosling Emacs的所有权卖给了UniPress公司,Gosling Emacs变成了UniPress Emacs。UniPress威胁Stallman停止分发Gosling Emacs的源代码,Stallman不得不遵循。他后来在Emacs 16.56版本用自己的代码替代了Gosling的代码。为了防止将自由软件未来以这种方式变为私有化,1988年Stallman发明了GPL,GPL许可证要求基于GPL软件的用户必须有权获得、使用、修改和分发源代码。(参见https://www.free-soft.org/gpl_history/)

1991年,Linux内核诞生,这是一个由Linus Torvalds开发的操作系统内核,它是类Unix操作系统的核心组件,Torvalds在1992年用GPL许可证发布Linux内核的源代,这让Linux内核得到更多开发者和GNU项目的支持,不断通过开源协作改进Linux,这使得它成为一个广泛采用的自由软件项目,Linux也取代了GNU最早规划发展的GNU Hurd内核项目。

1992年AT&T旗下Unix System Laboratories(USL)指控加州大学伯克利分校(BSD)侵犯了AT&T的Unix版权,因为BSD在其Unix内核上添加了一些扩展。USL试图阻止BSD发布其操作系统,这对于当时的互联网发展和自由软件运动都是一个重要的事件,因为BSD Unix是当时互联网上广泛使用的操作系统之一。在USL和BSD双方的法律对峙期间,BSD开发者重新审视了其许可证,并创建了BSD许可证的3个版本,它们都明确了BSD代码可以自由使用和再分发,但在不同的条件下有所不同。最终,双方在1994年达成了和解,允许BSD发布其操作系统,但是在USL标注的代码上必须包含AT&T的版权通知。这个和解促进了Unix和现代操作系统的发展(参见Unix发展时间图),也为自由软件运动铺平了道路。

源自:https://en.wikipedia.org/wiki/History_of_Unix

自由软件的思想逐渐流行,人们开始将自由软件视为一种更好的方式,可以更快地推动技术创新,同时降低企业的开发成本。但是,自由软件的商业化面临了一些挑战,因为GPL许可证要求使用GPL组件的商业软件必须让用户有权得到、修改和分发源代码。直到上世纪九十年代末,开源软件运动开始发展壮大,发展出更为宽松的开源许可证如Apache许可证、MIT许可证等,商用软件只需要声明使用了那些开源软件,而本身不需要开源,这促进了更多的商业软件来使用开源软件,也开启了开源和商业化的结合。

在21世纪初,一些商业公司开始参与到开源开发中来。虽然这些公司仍然会在商业产品中使用他们的开源代码,但是他们也会开源他们自己的项目,以获取更多的反馈和协作,从而提高开发速度和产品质量。

在开源发展的过程中,出现了许多开源协会和组织。这些组织旨在推广开源文化和开源软件,如自由软件基金会(FSF)、Apache基金会、开源软件协会(OSA)和开源软件研究所(OSRI)等。这些组织提供开源软件的许可证模板,并提供与开源相关的法律支持和行业标准。

自由软件和开源软件运动尽管在一些概念上存在分歧,但它们共同推动了开源文化的发展。开源软件的商业化也逐渐成为一种主流趋势,现在我们可以看到,许多大型IT公司都在使用开源软件,并将其用于其商业产品中。开源软件对于现代技术的发展和商业创新方面的影响是不可忽视的。

目前,开源已经成为一个庞大而复杂的生态系统。人们可以在GitHub等开源代码库中找到数以百万计的开源项目。这些项目覆盖了从操作系统到数据库,从机器学习到人工智能的各种领域。开源软件的开发也已经超越了单个开发者或小型团队的范围,很多公司和组织都参与到开源开发中来。

开源软件是互联网产业发展的基石

九十年代初开源软件已经有一定规模,为互联网产业起飞提供了很好的软件基础。Yahoo创建于1994年,它从第一天开始就大量使用了开源软件,如FreeBSD操作系统和Apache Web服务器,后来大量使用的PHP和MySQL。几乎所有的互联网公司都在大量使用开源软件构建服务,而不是使用商用软件来提供服务,背后的原因大概如下:

  • 开源软件大幅降低了软件的使用成本,互联网公司无需为开源软件的使用付费;

  • 开源软件具有开放性和自由性,开源软件的源代码是公开的,开发者可以利用已有的组件和代码,快速的进行二次开发,从而降低软件开发的时间和人力成本,提高软件的开发效率。这一点对互联网公司尤为重要,它们需要快速响应市场变化和用户需求,开源软件可以根据不同的业务场景进行自由的修改和拓展,满足个性化需求;

  • 开源软件具有可靠性和安全性,开源软件的源代码是公开的,任何人都可以参与审核和修改,从而确保软件的可靠性和安全性;

互联网公司大量使用开源软件,把一些改进回馈给开源社区,同时开源了很多软件,这些反过来促进开源软件生态的繁荣。

总之,开源软件是互联网产业的重要基石之一。开源软件的开放性和自由性、可靠性和安全性、以及降低软件开发成本和提高软件开发效率的特点,非常适合互联网产业的需求。互联网公司受益于开源,回馈开源,促进开源生态的繁荣。

开源生态推动云计算的发展

开源在云计算的发展中扮演着不可或缺的角色。

首先,开源软件为云计算服务提供了很好的构建模块,例如云厂商的主机大部分运行Linux操作系统,虚拟化最早用Xen开源组件,后来很多厂商使用KVM,Web服务器使用Apache httpd或Nginx,等等。

然后,开源已经成为云计算技术主流。在与云计算相关的容器、服务框架、消息队列、数据库、分布式存储、大数据、AI、自动化运维等方面,开源软件已经构建强大的生态,成为技术主流,并深刻影响着云计算的发展方向,云服务商在这些开源软件上构建PaaS服务,深受客户欢迎。例如,数据库PaaS服务绝大部分收入是来自开源的MySQL和PostgreSQL,而不是Oracle数据库服务;容器PaaS服务都是构建在Kubernetes之上;消息队列服务都是基于Kafka、RabbitMQ和RocketMQ。

最后,开源软件还提供了更加开放和灵活的商业模式。开源软件通常基于自由软件或开源许可证发布,可以自由使用、修改和发布。这促进了更多企业和开发者参与到开源社区中来,从而共同构建更加强大的云计算生态。同时,开源软件也支持各种商业支持和咨询服务,企业可以通过提供基于开源软件的服务来获得商业利润。形成良性增长的飞轮,推动云服务的发展。

综上所述,开源生态是云计算发展的重要推动力量,不断推动云计算的进步和发展。

开源与商业化结合

开源软件的商业化是一个重要的问题。虽然开源软件本身是免费的,但是许多公司也可以通过商业模式来获取收入。下面是几种常见的商业模式:

维护和支持服务:一些公司通过提供维护和支持服务来赚钱。这些服务可以包括技术支持、培训、咨询等。像开源软件最早商业化的公司Red Hat就按这种方式赚钱的,客户自动升级Red Hat Enterprise Linux系统需要按主机数付订阅费,对额外的技术咨询和支持也需要付费。

核心开源和付费附加功能:核心开源Open Core提供了免费的基本功能,可以解决一定场景的问题,但是也会提供付费的附加功能或管理服务,一般体现在PaaS和SaaS服务。这样形成一个完整的商业环路。像Kafka、hashicorp、Elastic和MongoDB等都是这样运作的。

捐赠:有些公司通过捐赠赚钱。当用户使用他们的软件时,可以自愿向这些公司捐赠一定数量的钱。像Linux Foundation靠会员赞助,支持Linux等开源项目的发展。

但开源为什么能让客户为之付费呢?开源肯定是为客户创造价值,一是开源软件本身就很有价值,开源协作快速迭代软件,构建开源生态,形成事实的标准;二是开源可以帮忙高效获客,开源就是很好的市场宣传,用户可以免费使用开源版本,用户需要增值服务时就转化为付费客户,更多用户知道这是广为流传的开源软件,自己搭建和维护成本太高,就直接购买开源软件的付费服务,这个过程就是通过开源帮助筛选目标客户,其效率远远高于线下的销售团队获客;三是开源可以帮助全球化的生活,开源传播没有国界,开源可以触及全球的用户。

总之,开源代码可以免费使用,但是开源项目的贡献者和商业公司也可以从不同的商业模式中获得收入。选择适当的商业模式可以帮助公司获得利润并为用户提供更好的产品和服务。

开源许可证的选择

在开源软件开发中,开源许可证是必不可少的。开源许可证规定了源代码的使用和分发方式,使得开源软件的使用者得以自由地使用软件的源代码、对软件进行修改和分发软件,前提是遵守开源许可证的规定。下面是几种常见的开源许可证的描述:

GPL(通用公共许可证):这是最严格的开源许可证之一。在使用 GPL 许可的代码或软件中,任何修改和衍生作品也必须使用 GPL 许可证进行分发。这保证了 GPL 项目的所有贡献者和使用者都必须遵守同样的条款,以保持软件的开源和自由。

BSD许可证:这是一种较为宽松的许可证,允许用户进行修改、再分发和商业使用,使用者可以不必公布源代码,保留自己的知识产权。BSD许可证只有三条限制条件:1. 在软件和文档中保留版权声明,2. 不得使用大学名称或原作者名称做宣传或市场推广,3. 在衍生产品中,必须声明使用了原始代码。

MIT许可证:是另一款非常宽松的许可证,它与BSD许可证非常相似,只要求在衍生软件中包含原始代码的版权声明,而且没有其他限制。因此,与BSD许可证类似,MIT许可证也允许用户进行修改、再分发和商业使用,并且使用者可以保留自己的知识产权。

Apache许可证:是一种适用于开源软件的许可证,它要求在使用、修改和再分发时必须包含原许可证、版权和纯文本的声明。Apache许可证允许商业使用、修改和分发,但要求在修改后的产品中提供 Apache 许可证。此外,Apache许可证还附带一个专利保护条款,要求代码贡献者放弃对开源用户使用专利的权利,保障用户不会因为使用 Apache 软件而受到专利侵权的指控,这使得 Apache 许可证被广泛应用于开发企业级应用程序。

BSD许可证、MIT许可证和Apache许可证都属于宽松型许可证,使用这些许可证开源软件的商业软件不需要开源。但是,我觉得GPL许可证是这个开源世界的基石,GPL许可证要求软件和其衍生作品也必须开源,开源是传递的,确保了开源软件的整体性。看Unix发展的时间图,BSD Unix因为许可证很宽松,商业软件使用后不需要开源,例如思科在BSD Unix上做路由器的操作系统IOS (Internetworking Operating System),做了很多网络的改进并不回馈给BSD Unix,苹果在BSD Unix上做出Mac OS和Mac OS X桌面操作系统,做了很多图形图像性能改进也不回馈,后来发展出移动端操作系统iOS也不开源,BSD Unix发展出来的分支很多,力量特别分散。而Linux选择GPL,对Linux的改进必须开源,确保Linux的统一发展没有任何分叉。经过30多年的发展,Linux成为最流行、装机量最多的操作系统,现在人很少使用BSD Unix,人们在用Mac OS X和iOS但见不到BSD Unix身影,而90年度和20世纪初BSD Unix的功能和性能远远好于Linux。可见,GPL许可证确保开源世界的持续性。

开源软件在选择许可证上需要根据具体的情况来决定。如果公司想保留从开源软件上获得商业价值的权利,我建议使用类似Apache许可证,自己可以在开源软件做任何商业化的应用,而不在意外面拿这个开源软件怎么用,就像Google在Android开源上选择用Apache许可证。如果不想保留商业化的权利只想为这个软件发展出来社区和生态,可以把软件的所有权捐赠给开源基金会,选择用GPL这样比较严格的许可证,因为这个开源软件的背后基金会是非盈利的,大家愿意为它做贡献,GPL这样的许可证确保开源项目的统一性。

开源全球协作

Linux操作系统是全球开源协作的典范,全球各国人对Linux操作系统的发展都有不少贡献,中国人对Linux贡献了很多,所以,Linux操作系统是全人类的财富,它不隶属哪个国家。

我借用美国Wired杂志2004年06期用LVS作为例子说明全球开源协作,见下图:

  1. 2000年2月佛罗里达的Fort Lauderdale:Simon Horman (Horms)建议修改LVS来支持fwmark设置虚拟服务;

  2. 2000年3月澳大利亚悉尼:Horman在访问家乡时,开始写他建议的代码;

  3. 2000年3月中国长沙:Horman把他的代码寄给LVS主开发者章文嵩,我注意到代码的低效部分会影响性能并调整代码;

  4. 2000年3月保加利亚的Varna:我把修改后的代码寄给Julian Anastasov,他帮我进一步看性能问题,把建议的改变发送给Horman;

  5. 2000年4月6日加州硅谷:Horman回到VA Linux Systems工作,根据Zhang/Anastasov的解决方案修改代码,发送完成后的代码给我;

  6. 2000年4月7日中国长沙:我再调整了一些代码,在LVS社区发布了基于Firewall Mark的虚拟服务;

  7. 2000年5月瑞士苏黎世:Roberto Nibali建议基于Firewall Mark的虚拟服务要处理持久链接,一台服务器可以提供在一个持久链接上提供所有的数据;

  8. 2000年7月俄亥俄哥伦布市:Ted Pavlic认识到fwmark可以被配置来解决Nibali的问题。工作组相应地修改了LVS代码;

  9. 2004年6月北卡州Durham市:fwmark成为LVS的一个关键部件,LVS的文档由在Durham市的Joseph Mack来维护;

我们看到关于一个功能的需求提出、代码实现、优化、使用支持和文档通过多位开发者完成的,他们分布在北美洲、大洋洲、亚洲、欧洲,这是全球开源协作很好的例子。里面还有一个小插曲,Horms提增加fwmark值来表示虚拟服务(过去都是protocol:ip:port三元组来表示的)的需求,我觉得可以做,心里没有觉得有多大用处,既然Horms提了,又可以做,就支持做这个功能,后来Real Networks的技术总监Jerry Glomph Black用fwmark功能搭建Real流媒体服务集群,通过内核防火墙把VIP的TCP端口组报文标记为1,VIP的UDP端口组报文也标记为1,通过fwmark值1来调度一组流媒体服务器,当一个视频流的请求TCP调度到一台流媒体服务器,后续所有各自同一IP地址的UDP报文都被调度到该流媒体服务器,参见http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.multi-port.html#streaming_media 。Jerry Glomph Black说这种灵活性是无与伦比的,他还说LVS在可靠性、成本、可管理性等所有维度超越所有商用负载均衡器。用户的用法真是超乎我的想象,我也学习到很多,尤其新需求无伤大雅时,先让它走起来,觉得无用可能是自己那个时刻认知不足,可以让子弹先飞一会儿,反对一定要有非常明确的理由。

总之,通过互联网,开源在全球范围内协作,不断地丰富开源软件,发现新需求和创造新功能。

企业做开源的价值

我借我亲身经历的阿里开源过程来说明企业做开源的价值。2009年淘宝到高校进行秋季校招,问同学们淘宝有多少技术人员,同学们普遍反馈淘宝就一个购物网站大概十几位技术人员吧,这深深刺痛了我们,要知道那时淘宝已经有一千多名技术人员,可见外部对淘宝有多不了解。

2010年3月我游说我的老板、淘宝CTO吴泳铭做开源,淘宝上的数据是最宝贵的,数据是日积月累的,谁都拿不走,淘宝的软件只要找到合适的人给一定的时间一定能做出来,淘宝上有丰富的数据,商家和消费者有信用记录,另一个“淘宝网”上面数据空空如也,试问用户会在哪个平台上做交易?肯定选择有数据的淘宝。淘宝做开源可以展示我们的技术实力与挑战和开放性,让外部更了解我们,可以吸引更多人才,迎接未来的技术挑战。吴泳铭对开源很了解,也很支持开源,欣然同意开源。

我马上跟我的团队说先把淘宝memory cache及key/value store软件TAIR(Taobao pAIR)开源了,同学们说给我们三个月时间我们好好把代码理理再开源,我说TAIR在我们生产系统中运行得很稳定可靠,我们最近也很少对代码作更新,他们说我让他们把每个源文件如实地写上作者大名,肯定他们对代码的贡献,他们要花点时间把代码理得干净一点,这样代码的可读性好。可见,技术人员是非常在乎他们的声誉的。2010年6月淘宝将TAIR开源,这是阿里对外开源的第一款软件,接着开源了基于对象的分布式存储系统TFS(Taobo File System)。开源活动很快得到淘宝其他技术部门的响应,然后阿里所有的技术部门加入到开源活动,大约两年内阿里开源了上百款自主研发的软件,同时我们对Linux内核、MySQL和OpenJDK等上流开源社区提供patch反馈,成为Linux基金会、Apache基金会的黄金会员。在一代代阿里开源人的努力下,现在阿里的开源做得更好了,在Github上开源了384款软件,获得超过110万的Github star,RocketMQ和Dubbo捐赠给Apache基金会,成为Apache RocketMQ和Apache Dubbo开源项目。

我想阿里是在开源中受益的,2010年和以后阿里吸引了很多人才的加入,尤其早期吸引人才加入是由于阿里的开源、开放性和技术挑战,这些人才加入为阿里的后来系统改进打下坚实的基础,如2011年全线去IOE,搭建应对双十一的系统等。阿里也从人们心目中没有技术的公司转变为技术很强的公司,人才聚集也为后来阿里云计算的快速发展奠定基础。综合来说,企业做开源有以下几个方面的价值:

提升品牌价值和声誉。开源软件是基于合作和共享的原则开发的,可以帮助企业展示其社会责任感和技术实力,以及文化开放,提升品牌形象和声誉;

帮助招募和保留优秀的人才。开源软件社区吸引了许多有才华的开发人员,加入开源项目可以让企业与这些人才建立联系,吸引并留住优秀人才;

加强技术创新和开发。开源软件给企业提供了大量的开源组件和工具,可以加速企业的技术创新和软件开发的进程,提高工作效率;

减少成本和风险。企业可以利用开源软件来降低自己的软件开发成本,同时减少依赖单一供应商带来的商业风险;

小结

从开源发展历史来看,开源概念从早期比较模糊,碰到问题解决问题,逐步清晰起来,所以开源生态是逐步演化出来的,而不是一开始设计出来的。开源软件为互联网产业发展提供了坚实的基础,同时互联网公司拥抱开源回馈开源,让开源生态更加繁荣。互联网使用的便利性促进了开源的全球协作。开源软件不光是云计算平台的底座,同时开源以其多样性应对各种需求,创造了很多技术出来,有些形成开源社区,成为事实的标准,也成为新的云服务,这些推动云计算的发展。开源和商业化结合有多种形态,开源可以说是最好的软件行销方式之一,商业公司在开源软件的基础上提供服务赚钱,它所支持的开源软件可持续发展,形成一个持续发展的飞轮。越来越多的企业参与到开源活动中,拥抱开源,受益于开源。

开源不仅仅是一种技术,更是一种文化、一种价值观,开源的精神和理念不仅为企业研发带来了巨大的便利和优势,而且也成为了互联网产业和数字经济发展的基石。作为数字时代的新趋势,开源正以“开放、共享、协同、生态+商业模式”的新型生产方式,孕育更多技术创新,成为推动全球科技发展的核心引擎。开源生态也会随着时代发展不断演化前进,为全球的数字化经济做出更大的贡献。

作者简介

章文嵩博士,CCF会士,开源项目LVS(Linux Virtual Server)创始人。现在主要做云原生创业孵化与投资,也是CCF常务理事和CCF开源发展委员会副主任。曾任高瓴运营合伙人、滴滴出行高级副总裁、阿里副总裁和阿里云CTO、TelTel联合创始人、国防科技大学计算机学院副教授。他在设计和架构大规模系统、云计算、大数据、软件研发管理上有着丰富的经验。1998年5月创立LVS开源项目,LVS代码从2003年开始一直在官方内核中,在全世界得到广泛应用。过去二十多年,积极推动国内开源的发展。获“CCF杰出工程师奖”,“开源杰出贡献奖”,“中国开源领袖人物”等奖项。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部