拥抱开源(第2版)

978-7-115-59697-0
作者: [美] 戈登•哈夫(Gordon Haff)
译者: X-lab 开放实验室
编辑: 秦健

图书目录:

详情

本书深入阐释了自由软件如何成为开源软件以及如何销售开源软件。本书从开源如何彻底改变软件的编写方式、合作方式、沟通方式、组织结构以及商业价值等多个方向展开论述。内容涉及开源所创造的机会和随之而来的挑战,公司如何创造商业模式来成功地销售“自由”软件,如何从创建社区到销售商业产品应用开源开发模式,审视与开源项目和产品管理及许可相关的重要问题,以及开源原则如何更广泛地适用于DevOps和其他组织实践。 本书不仅适合对开源软件感兴趣的人员、IT从业人员以及致力于开源健康发展的人员阅读参考,而且适合作为高等院校相关专业的开源教育通识读物。

图书摘要

版权信息

书名:拥抱开源(第2版)

ISBN:978-7-115-59697-0

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [美] 戈登•哈夫(Gordon Haff)

译    X-lab 开放实验室

审  校 开源社

责任编辑 秦 健

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e59697”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。


First published in English under the title

How Open Source Ate Software: Understand the Open Source Movement and So Much More (2nd Edition) by Gordon Haff

Copyright © Gordon Haff, 2021

This edition has been translated and published under licence from APress Media, LLC, part of Springer Nature.

Simplified Chinese-language edition copyright © 2022 by Posts & Telecom Press, Co. LTD.

All rights reserved.

本书中文简体字版由APress Media, LLC授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。

版权所有,侵权必究。


本书深入阐释了自由软件如何成为开源软件以及如何销售开源软件。本书从开源如何彻底改变软件的编写方式、合作方式、沟通方式、组织结构以及商业价值等多个方向展开论述。内容涉及开源所创造的机会和随之而来的挑战,公司如何创造商业模式来成功地销售“自由”软件,如何从创建社区到销售商业产品应用开源开发模式,审视与开源项目和产品管理及许可相关的重要问题,以及开源原则如何更广泛地适用于DevOps和其他组织实践。

本书不仅适合对开源软件感兴趣的人员、IT从业人员以及致力于开源健康发展的人员阅读参考,而且适合作为高等院校相关专业的开源教育通识读物。


开源是大势所趋,把开源教育融入日常教学活动是我们进行人才培养的一个重要出发点。营造“开源文化”,培养“开源能力”,弘扬“开源精神”,形成“开源竞争力”是我们的根本任务。热烈祝贺本书的正式出版!

——周傲英,华东师范大学副校长

这是一本很全面的开源科普读物,内容覆盖了开源的几乎所有维度。有历史和法律,有开源特有的开发模式和商业模式,还有机遇和挑战。这本书作为案头检索资料正好。值得一提的是,书名直译是“开源如何吃掉软件:理解开源运动及更多”,X-lab开放实验室的译文简洁  明快。

——周明辉,北京大学计算机学院教授

随着信息技术的发展,互联网把分布在世界各地的人们连接在一起,而开源让全世界的开发者以公开透明的方式协作打造适合自己的需求的软件。本书从多个维度介绍了开源的起源、开源的发展史、与开源相关的法律问题、开源的开发模式、开源与商业之间的关系以及开源面临的机遇与挑战。对于想了解开源的读者,无论是通读本书,还是就单一的问题阅读特定的章节以寻找答案,都会有很大的收获和启发。

——姜宁,Apache软件基金会董事,华为开源管理中心开源专家

开源已成为软件行业不可阻挡的发展趋势。本书为我们开启了追溯开源、认识开源、实践开源的全景视角。作为开源领域的专业机构,开源社的专业审校为我们带来了一本专业的开源参考书。

——武延军,中国科学院软件研究所总工程师

开源这两个字包含了很多信息和要素,若要全面拥抱开源,我们首先应了解开源的规则和机制以及能够带来的价值和面临的问题。本书从开放源代码开发到开源社区构建与治理,再到开源商业模式和实践,给出了专业、详尽的阐述以及典型开源公司的经验分享。这是一本开源从业者了解和拥抱开源的专业好书,值得一读。

——杨丽蕴,中国电子技术标准化研究院研究室主任

目前国内开源氛围如火如荼,恰恰需要从开源文化、开发习惯、公司开源、开源合规等多个角度来阐述开源的科普读物。这本书介绍的很多故事我都特别地感同身受。希望这本书能够给国内的开源带来启示!

——耿航,NextArch基金会TOC,
木兰开源社区运营负责人,腾讯开源专家

以史为鉴,可以知兴替。如果我们想要拥抱开源,自然也需要了解开源的发展历史。正如本书的英文副书名所言:理解开源运动及更多!通过回顾这段不算太久远的历史,我们还可以了解到为何法律对于开源非常重要,开源开发模式对于整个软件行业产生了何种颠覆性的影响,以及依然在飞速发展的开源现在又面临了哪些困难……无论你只是希望了解一些开源轶事,还是想要深入思考开源,本书都值得一读。

——庄表伟,开源社理事,华为开源管理中心开源专家

种一棵树最好的时间是十年前,第二好的时间是现在。了解开源才能更好地使用开源和贡献开源。从时间维度上,本书以一名亲历者的身份,为读者深度复现了从Red Hat公司售卖服务到如今云计算普及下,开源开发模式及开源软件商业化的迭代和变迁。从开源意义的维度上,本书很好地阐释了开源作为一种生产关系和开发方式是如何系统性地融入软件开发体系中并带来创新的。同时,从开源开发模式到售卖商业开源产品,作者对于开源商业实践的“红黑榜”也有独到的思考。就整体而言,这是一本有内容、有思考、有态度的开源通识读物。

——边思康,开源爱好者,CCF开源发展委员会委员,
蚂蚁集团开源专家

从2010年开始,特别是进入2019年之后,我国的开源发展和建设事业进入了快车道。不仅参与人数、企业数、代码贡献度、参与项目数、社区活跃度等指标达到前所未有的高度,而且涌现出许多本土的开源管理组织以及开源许可证。大家都在谈论开源,从事开源,拥抱开源,但什么是开源、开源是怎么来的、开源社区怎么运作、怎么商业化、有什么挑战等一系列问题,我们都在学习、摸索、领会和创新,X-lab开放实验室翻译的这本书,把Red Hat公司技术布道者Gordon Haff的开源理论和经验介绍到国内,可以帮助更多开源软件从业者和爱好者学习参考。这本书值得一读。

——王庆,Intel云基础设施软件研发总监,
开放基础设施基金会个人独立董事


缘起

我们最早接触的是How Open Source Ate Software: Understand the Open Source Movement and So Much More这本书的第1版,当时系统论述开源世界的书籍还相当稀少,而且基本都是英文材料。直到2021年,突然发现这本书的作者非常勤奋地更新了第2版,我们立即产生了兴趣,加之开源已经在国内持续升温,与我们合作的人民邮电出版社也非常感兴趣,马上联系和确定了图书版权,于是我们开始了翻译之旅。

背景和理念

在我们组织翻译的同时,2022年年初,X-lab开放实验室联合开源社发起了ONES Group工作组,继续实践“开源治理、国际接轨、社区发展”的宗旨。随着全球数字化的不断深入,开源也开始走向大众化。提高全球对开源的认识、促进各方(包括企业、政府、高校等)对开源的结构化和专业化管理、帮助公司和公共机构发现与理解开源、帮助所有人在整个开源生态中受益等,是我们通过开源连接到一起的初心:Openness(开放)、Networking(连接)、Equality(对等)、Sharing(分享)。希望通过这本书,国内的学生、开源参与者以及其他行业的人员能够提高对开源的认识,帮助所有人在整个开源生态中受益。这本书也同样反映了上述理念。

内容概览

作者Gordon Haff是“工科+商科”出身,拥有多年行业内的工作经验,曾担任产品经理、IT行业分析师、技术布道师等角色,在Red Hat公司工作了十多年。他拥有丰富的从业经历,而这本书更是集专业知识和行业实践于一体的经验结晶。全书从开源的各个方面进行了系统阐述,包括开源发展的历史、开源软件的开发模式、开源的协作方式、开源的沟通方式、开源的组织方式以及开源的商业模式与价值等。除此之外,第2版还特别囊括了法律相关的内容。无论是技术人员还是参与开源的各个方面的人员,通过本书都可以很好地了解开源背后的法律逻辑——当今开源的合规性越来越重要了。因此,这是一本关于开源的通识读物,非常适合对开源软件感兴趣的各类人员或致力于开源生态健康发展的人阅读。

开源教育

今天,开源作为上至国家下至企业及个人的战略方向、组织的重要创新手段、个体的有效职业发展路线,已经渗透到社会的方方面面,这也使得针对不同层面的开源教育成为一个迫切的需求。目前,国内的开源教育主要面临三个方面的挑战。

第一,培养模式。开源人才培养是一种综合性培养模式,并不是单靠传统的教材、课程就可以实现的,而是要结合开源社区的具体实践,尤其是代码的贡献、动手实践的课程非常重要。另外,开源教育涉及的范围广泛,如今的软件工程也正在向开源的软件设计、开发演变。

第二,师资。教育最重要的就是师资资源,老师首先要懂得如何参与开源项目、如何运营开源社区,这样才能更好地为学生服务。目前这一块的资源比较稀缺,一方面是有开源经验的老师比较少,另一方面是开源本身也需要教育模式方面的创新。

第三,生源。我们需要告诉学生学习开源的目的、价值,并引起学生的兴趣。新的技术从市场传递到校园,再到落地成为一门课程,这个过程会有滞后,另外形成一门系统性课程也需要时间周期。

我们认为开源不应只是专业教育的事情,尤其是只作为计算机、信息类学科的从属内容,这是因为开源背后还有开源协作、开源精神等很多工程与思想方面的内容。我们希望未来的开源教育可以发展成为全民教育,每一个数字时代的公民都应具备开源方面的知识和能力。开源协同方式这项数字化协作技能和每个人息息相关。不管你是否从事开发相关的工作,未来都需要用到这些技能。例如我们现在做的一些内容翻译工作就可以基于开源的数字化协作来完成。开源教育包含了许多内容(如下图所示):教人“用”开源,用“开源”教人。这些内容对每个数字时代的公民来说都是非常重要的。而本书的出版无疑是朝着这个方向迈进了坚实的一步。

开源教育涉及的内容

翻译经历

本书由来自华东师范大学数据科学与工程学院的张琰彬老师牵头翻译,参与主要翻译工作的还有陈可璇、李锦路、伍泰炜、宁志成、吴松林、沈小奇、张欣然、张硕闻。在初稿完成后,我们自觉专业程度与水平还不够,于是联系到开源社一众拥有不同企业背景的开源专业人士帮我们进行审校工作。开源社是X-lab开放实验室的长期战略合作伙伴。参与整个审校工作的专业人士包括庄表伟、耿航、孙振华、王永雷、姜宁、李思颖、边思康、赵生宇。

翻译团队于2021年开始分工的时候组织了多次研讨会,统一了整体翻译风格与相关术语。进入专家校审阶段后,基于时间和地理位置分布的原因,我们采取了全线上异步协作的模式,将开源协同的那套工作方式应用到本书的翻译过程中,这一操作颇为成功,开源共创的文化与精神再次得到体现。在经历一次次修改和调整后,我们终于将这本科普式的开源书籍付梓,如释重负,需要感谢的人太多,这里无法一一道出。

谨以此书献给我们热爱的开源事业!

X-lab开放实验室

2022年7月


非常高兴看到《拥抱开源(第2版)》中文版的正式出版,可以说它是开源教育领域的一场及时雨,相信一定会为开源在国内的普及带来重要的推动作用。这本书系统地梳理了开源领域的相关知识,属于典型的开源知识科普读物,而我和团队正是做开源领域研究的,借此机会也谈谈我们对开源领域知识的一点理解。

计算机科学领域有一个非常有意思的交叉学科,叫生物信息学(bioinformatics),我们学院曾有老师研究这个方向,当年火过一阵子,现在出现了一个类似的热门领域——类脑计算(brain-inspired computing),由新一波的人工智能热所带动。

我在读书的时候也了解了一下生物信息学,知道它就是利用计算机和数据科学的方法研究各种各样的生物学数据,包括对数据的搜索(收集和筛选)、处理(编辑、整理、管理和显示)及利用等。目前主要的研究方向有序列比对、序列组装、基因识别、基因重组、蛋白质结构预测、基因表达、蛋白质反应的预测,以及创建进化模型等。

由于这个领域能够发表影响因子非常高的论文(例如IF能够到5分以上的Bioinformatics),因此在唯影响因子论英雄的年代,确实吸引了一大批研究学者趋之若鹜。然而,进入这个领域的计算机科学研究人员会面临一个非常大的挑战,甚至已经成为整个领域的天花板,那就是生物学的领域知识。各种生物学中诸如序列、基因、基因组、转录组、蛋白质组、细胞表型等概念及其背后的机理,让无数计算机人望而却步,只能退而求其次,工作内容最多只能充当生物科学家的工具,而真正在NatureScience上收获顶级成果的还是那些生物学家们。

开源软件开发、开源社区治理、商业开源等这些开源的领域知识和上面的情况非常类似,只不过,困难与挑战要大得多。

第一,目前并不存在一个类似“生物学”这样的“开源学”知识体系,而只能通过借鉴其他学科的知识进行拼接与搭建。我们实验室所利用到的几块碎片包括软件工程学、管理学以及经济学和法律学等学科的部分知识。从开源社区研究的角度看,我们主要研究广义上的开发者在数字空间中大规模协作过程背后的规律,进而为社区治理与运营提供指导。而从企业开源治理的场景出发,我们更加关注的是法律端的安全合规以及与企业治理相关的管控手段。当然还有商业开源(开源投资)、政府开源、高校开源等越来越多的场景。而不管是哪个场景,都会带来第二个巨大的挑战:开源的实践性。

第二,开源的领域知识具有非常强的实践性,很多问题只有亲自参与过,才能体会开放式协作这样的美妙过程,而像开源基金会治理、企业开源运营等这样高端的实际场景,更是可遇不可求的,属于企业高层甚至政府治理层面的事物。开源背后的支撑技术发展异常迅速:Git是2005年发布的(工具),GitHub是2008年正式上线的(平台),而GitHub Action则是到2018年才开始提供服务的(流水线)。但技术栈的飞速更迭,使得软件协同生产的模式变化巨大。一方面,高校开始越来越不擅长这类实践性极强的教学活动;另一方面,市场对这类人才的需求持续旺盛,特别是集专业技术、沟通管理、领域知识于一身的开源人才,需要学校、企业、开源社区来联合培养,才能达到一定的效果。

第三,开源的领域知识还具有对学习者来说不太友好的特点——不少内容属于所谓的“暗默知识”(tacit knowledge),即源自个人的亲身体验,是与个人信念、视角及价值观等精神层面密切相关的,是一种“行动中的知识”(knowledge in action)。大到“社区健康度分析”“项目影响力的排名”,小到一个“开源仓库的标签分类”、一个“开发者的角色认定”等问题,或多或少都是需要体验与行动才能理解的。这也是目前很多开源概念的界定很难达成共识的重要原因。

第四,开源领域数据的结构复杂性(代码数据、时序数据、关联数据、NLP数据等)与语义丰富性(代码语义、社交语义、协作语义、技术语义等)。正是由于上述几点的客观存在,目前即便拥有了海量的全域开源数据,也不太容易像生物信息学那样,解答共识性的领域问题、数据问题和数学问题。同时,由于这个领域非常年轻,还处于开疆拓土的阶段,因此很多基础性工作都比较缺失。这也是我们发起诸如“开源测量学”“开源纲目”等理论课题的原因。而像OpenDigger和OpenPerf(均为我们实验室在GitHub上的开源项目)则完全是从数据基础设施的角度来推进,属于首创类型的项目,推进过程虽然艰难但充满巨大的吸引力。

生物数据的分析可以应用到很多重要的场景,例如生物制药、健康医疗等。开源领域数据也一样,能够用到包括企业开源治理、开源社区运营、开源商业投资、无边界组织经营等不同的场景,关乎数字经济时代的发展脉搏。而从我们实验室“开源点亮未来”的价值取向出发,开源将会对数字经济时代的生产模式、生产关系、组织结构、资产形态、激励与分配制度、数字资产供应链、数字产品商业模式等关键概念产生冲击与改变,部分甚至是革命性的。

数据科学与开源领域知识是一个非常完美的组合。不像生物信息学,大部分的计算机人对它并没有直接的兴趣,而开源技术、开源模式则代表了开发者的未来。这也是OpenResearch这个开源项目提倡的:用开源的方法研究开源的现象。虽然它才刚建立几个月,但体现了我们对开源研究这件事情的理解。接下来分别从三个方面再详细聊聊。

第一,从开源领域知识的研究与创新来看,数据科学与数据分析是一个极佳的研究方法。全球数字化的高速发展,让开源技术站在舞台的中央,近期各种安全事件层出不穷,又让全球软件供应链问题浮出水面。开放源代码本身的价值毋庸置疑,类似World of Code(WoC)这样的“大代码”工程项目也是非常基础性的。但从我们的角度看,上面的开发者行为数据更加重要,所谓community over code(社区大于代码),开发者是开源生态的核心。随着以GitHub为代表的Git开发模式的标准化,社交功能给开发者带来的不仅是门槛的降低,更重要的是把围绕一个开源项目的所有关键环节都逐渐打包在一起。GitHub成为一条数字产品创作与生成的流水线,而这条流水线上的所有过程数据都因开源的属性而变得透明,进而可分析、可理解、可利用,成为备受数据科学家青睐的一个领域场景。而像GitHub这样全球化的开源生态网络,其中的各类数据问题也是非常丰富的,毫不亚于类似生物信息学中的基因序列、蛋白质网络等结构。例如,由Git协作数据构建的网络,可以看作是一个典型的社会技术系统(socio-technical system),其中开发者、代码、仓库、commit、制品、组织、issue、PR、社区、供应链、生态圈等形成了一个极其复杂且不断时序变化的复杂信息网络(complex information network)。

第二,从数据科学的角度看,开源场景也是个极好的业务实践领域。之前和几位朋友做了一个“后互联网时代的乱弹”的播客节目,最近一期聊的就是数据科学的话题。几位嘉宾老师给了很多好建议,其中SAP的例子给人留下了深刻印象。SAP是一家以企业ERP起家的跨国公司,其产品的核心竞争力并不是软件本身,而是这家公司通过大量的企业服务积累下来的过程性数据与专家经验知识。他们可以深入到每一个细分的行业,告诉客户运营过程中的各类指标,处于这个行业中的哪个位置,进而指导管理者进行决策与行动。然而,现实世界中的商业数据,普通人是无法拿到的。而数据科学又是一个非常需要和领域进行结合的方向,将业务问题进行分析与拆解,进而转换成数学问题,再利用相关数据进行求解,是培养好的数据人才的不二路线。而开源则提供了一个极佳的场景,开放式协作的透明性为理解开源软件协作与开发、开源社区治理与运营以及开源生态构建与演化等业务场景提供了极为丰富的过程数据。这些源于真实场景的大规模数据成为各类数据人才养成计划梦寐以求的素材。

第三,用开源的模式做开源的研究,能够取得一手的体验和暗默知识。如前所说,不少开源领域知识需要在行动与实践中习得,或者说需要成为个人或组织的一种能力、习惯甚至文化,对置身开源事业的开发者来说,这些尤其重要。那我们是否可以把日常的一些工作和开源模式进行结合呢?答案是肯定的。不仅因为开放式协作模式已经不再局限于代码这样的底层基础设施,而且上层各式各样的数字内容产出也都可以借鉴这种开放模式。协作是人类文明不断发展的动力,大规模、全球化的数字协作更是人类社会经济发展的推动引擎,那么我们完全可以从身边的点滴入手,用开源的方式做开源的研究。例如,以论文阅读与分享为例,OpenReading就是OpenResearch项目下的一个论文分析与阅读模式项目。该项目基于GitHub上的Discussion、Issue、PR、Wiki、Action等功能及其这些内容实体之间的转化,希望迭代出一个开放、高效、能够不断沉淀的开放分享模式。目前该项目在我们实验室得到良好运转与迭代。

如果用计算和数据的方法来探索开源这个新的领域,应如何获取相关的领域知识呢?毫无疑问,我们实验室是走在前面的,优势是在开源活动实践、开源数据工程、开源基础理论等方面的积累。我们发起了ONES Group计划,以构建企业OSPO(阿里巴巴、腾讯等)和全球开源治理项目(CHAOSS、TODO、CII等)的桥梁,我们本身还是国内“开源治理系列标准”的牵头制定者、多个开源项目的实践者(OpenDigger、Hypercrx等)、开源课程“开源软件开发与社区治理”的迭代者以及开源知识的搬运者与生产者(书籍翻译、论文发表、大会演讲、技术报告等)。

从开源教育的视角看,参照ACM和IEEE-CS在CC2020中的模式,开源人才培养的一个重要目标就是培养开源胜任力(open source competence),从基于知识的学习转向基于胜任力的学习。胜任力要求用知识和技能来展示人类行为。一般而言,人们可以将胜任力视为个人在工作、角色、职能、任务或职责中发挥作用所必需具备的素质。

因此,开源胜任力的定义可以将开源场景或任务中所表示的三个维度联系起来。

开源胜任力 = 开源业务场景中的开源知识 + 开源技能 + 开源品行

开源知识是指对开源的核心概念和内容的认识和理解,属于知道是什么(know-what)的维度。

开源技能是指通过有意识的练习和与他人互动而逐渐形成的在开源活动中的能力和策略,包括更高层次的认知活动,属于知道怎么做(know-how)的维度。

开源品行则包括开源活动中的社交技能、行为和态度,这些特征表征了执行开源任务的意愿,以及知道何时以及如何进行这些任务的敏感性,属于知道为什么(know-why)的维度。

即使开源知识与开源技能能够通过理论课与实践课进行教授,开源品行则一定需要在开源项目与开源社区的长期实践中进行养成。制定开源胜任力框架也将是开源教育工作者的一项重要工作,我们会持续更新最新进展。

以上这些内容均可以在我们的GitHub页面上找到(可以在GitHub上搜索“X-lab2017”)。我们希望更多的专业人士能够投身开源领域知识的研究与开源教育中,祝愿我们的开源事业发展得越来越好!

王 伟

华东师范大学教授

2022年7月


2011年硅谷投资人马克·安德森撰写的一篇文章的一句话——软件吞噬世界(Software is eating the world)被世人所知晓。10多年过去了,一语成谶,这句话已经成为当下的共识。然而,软件本身的生产关系却发生了变化。随着数字时代的到来,世界发展的速度、软件的迭代和维护乃至创新都迎来了前所未有的挑战。面对如此的境地,工程师哭喊着学不动了,无异于自取其辱!其中一条不错的出路就是拥抱开源!让自己处于开放、动态和多样性中,保持竞争力,保持生产和创新。这就是Gordon借着这句口号式的话来阐释开源的来由。

未来学家中敢于大胆预言未来的可能是大家都非常熟悉的Wired杂志前主编凯文·凯利,其《失控》一书令人拍案叫绝。开源世界还有一位特别重要的人物,那就是Tim O’Reilly,其于2019年出版的书籍WTF同样精彩。当然他对开源的推进功莫大焉。

如果说以上两位堪称大师的话,那么Gordon的这部著作是对他们的致敬。这本书没有像他们那样预言未来,并以宏大的人类和社会视角进行论证,而是将目光聚焦到开源上,以立体的论证和视角来阐述这个主题。这本书的内容同样精彩纷呈,尽管读者群体可能少了很多。

开源为何能够流行起来?仅仅因为其发达的分发方式吗?恐怕还是要从大规模协作的工程上去寻找答案。“软件工程的基本目的是减少成本,用自动化任务替换容易出错的人工任务,综合利用标准化模式和认证的可重用部件,可以使自动化任务成为可能。”Capers Jones在新出版的《软件工程通史:1920—2019》中如此说道。

核心的问题是透明、开放、协作、沟通,在工程中还有什么比这些更为重要的文化呢?无论何种定量、流程、质量,都需要围绕这些开展,流水线也罢、精益也好,哪怕是敏捷,甚至是DevOps无一不是围绕着这些来做文章的。因为软件终究是人思考的产物,人脑进行大量活动的痕迹。Gordon从此处入手,给了我们一个坚实的拥抱开源的理由。

另外,本书引用了大量的论文和书籍,内容涉及计算机科学、开源共同体、管理学、经济学、心理学等诸多领域的知识。可以毫不夸张地说,想理解作者的全部意思,不得不将它们一一读完,这将是另一个庞大的工程。

欢迎来到一个全新的世界——开源世界,让我们从拥抱开源开始。

适 兕

2022年8月

@「开源之道」


“信息想要自由。用户受到限制。我有权利使用我所信赖的代码。”这是看待自由和开源软件的一种方式。

这些是非常重要的。软件自由至上。但是,这强调了开源在很大程度上是一项个人运动,只要它仍然局限于此,就可能永远不会产生真正广泛的影响。

但开源也有与软件的开发和使用方式相关的实际应用。这是个人和组织合作创新方式演变的一部分。这就是为什么开源以及更广泛的开源是一个值得认真关注的话题。

我们今天所知道的开源软件出现的时间和地点,是一个曾经把共享放在优先地位,却逐步让位于更加专有和封闭的计算机产业的时代。开源软件帮助改变了这一状况,而且在这一过程中,它阐明了创建软件更好的过程,而不仅仅是因为与软件自由相关的抽象因素。

在这个从传统产业结构过渡到将软件嵌入越来越多结构的世界中,开源成为不可或缺的一部分。

本书第2版为读者提供了理解形成开源的历史力量的背景,包括过去和现在开源运行所涉及的法律框架。虽然类似于开源软件这样定义模糊的事物可能不可避免,但它采取的形式和解决的问题都是由具体的事件和市场动态发展而来的。这些事件中的许多都已成为过去式,市场格局看起来已大不相同。开源软件会在这样一个变化的世界里开始凋零吗?或者反过来说,相关的经验是否可以用于处理远超出计算机源代码范畴的、更广泛的合作和文化问题?

在提出诸如此类问题的过程中,笔者通过实践者和研究者的视角和语言,从社区、开发和商业的角度解释开源是如何运作的,深入研究社区项目和商业产品之间的区别,同时分享关于项目治理和社区健康的思考。笔者专注的这些研究为理解为什么开发者和其他人要为开源做出贡献以及如何最好地鼓励和培养贡献者提供参考。我们可以看到,开源软件的一个重大变化是从主要关注个人用户自由转变为关注更广泛的视角。什么是开发软件的最佳方式?用户如何才能更好地进行软件创新并在特定的业务需求背景下灵活使用软件?用户如何利用开源和受开源启发的流程来适应一个节奏更快、更加数字化的世界?

本书探讨了开源所面临的挑战,因为导致开源的一些条件已经不再适用。建立在开源软件上的商业模式从来都不容易,但今天的市场格局,包括(尤其是)最主要的公有云供应商,为货币化和可持续性制造了新的障碍。笔者介绍了大多数情况下并不常做的方式,比如一些绕过这些障碍的途径,包括一些试图解决商业模式挑战的新的许可方法。

本书第2版增加了较多新内容,这也许反映了开源软件和开源理念的快速发展。虽然存在一定的指导偏差,但是本书重新审视了作为商业许可工具的许可证。另外,我们也看到了一种新的认识:商标可能是支持基于开源开发的商业模式的法律工具箱的一部分。笔者还深入研究了开放治理和社区管理的做法,这些做法在过去几年中已经开始变得更系统化。最近,项目和产品之间的对比也变得格外重要,特别是考虑到DevSecOps的兴起、日益恶劣的威胁环境,以及与机器学习和可信执行环境相关的基于开源的新安全工具。

除此之外,软件更像是一锅大杂烩。例如,在开放教育等领域中,在线教育并没有取得很大的进展,在很大程度上没有达到其最初的宣传效果。(对流行病的远程学习只是说明了远程教学的挑战。)同时,在开放硬件领域,RISC-V作为一个真正开放的、严格的硬件架构,正在显示出相当大的潜力。

但是在软件之外,开源方法正在更广泛地扎根于数据、硬件、教育和组织中。并非所有的事情都是透明开放的,而且事实上也并不可能。商业模式依赖于独特的能力和知识。然而,开源软件反映了在商业及其他领域中变得越来越重要、越来越普遍的趋势和实践。通过理解开源是如何产生以及如何工作的,我们将更容易地理解如何在现实世界中通过与他人合作来创新。

您还可以扫码右侧二维码, 关注【异步社区】微信公众号,回复“e59697”直接获取,同时可以获得异步社区15天VIP会员卡,近千本电子书免费畅读。


首先要感谢Red Hat公司对本书写作的支持。Red Hat公司为本书中讨论的许多开源项目做出贡献。多年来,“Red Hat人”为本书探讨的许多想法和概念做出贡献并帮助和发展了这些想法和概念。同时他们构建了开源锚定有效商业模式的商业实践。过去的和现在的一些同事也提供了具体的反馈意见并贡献了内容,他们分别是William Henry、David Neary、Joe Brockmeier、Ross Turk、Robyn Bergeron、Deb Bryant、Thomas Cameron、Diane Mueller、Yan Fisher、Ben Fischer和Gina Likins等。还要特别感谢Red Hat公司法律团队的Richard Fontana,他对第3章内容给予了详细的审查和反馈。

Linux基金会执行官、活动和公共关系团队通过公共资源、采访以及相关活动所促成的许多富有成效的讨论为本书做出了贡献。

还要感谢APress的编辑Nancy Chen、Louise Corrigan和James Markham为将这份手稿印成出版物所做的努力,同时感谢APress总经理Welmoed Spahr同意承担这个项目。

最后,在此向所有采访对象、研究人员、编辑和其他作者表示感谢,没有他们,本书将不可能出版。


Gordon Haff

商业开源软件的领先供应商Red Hat公司的技术布道者,负责新兴技术产品战略;撰写有关技术、趋势及其业务影响的文章;经常向客户或在行业活动中发表演讲。他研究的主题包括边缘计算、区块链、人工智能、云原生平台和新一代应用程序架构等。

他为多家媒体撰稿,包括The Enterprisers Project、opensource.com、Connections和TechTarget。曾出版图书From Pots and Vats to Programs and Apps。他的Innovate @Open播客包括对开源创新主题的行业专家的采访。

在加入Red Hat公司之前,作为一名IT行业分析师,Gordon撰写了数百篇研究笔记,经常在《纽约时报》等媒体针对广泛的IT主题发表文章,并为客户提供产品和营销策略方面的建议。在职业生涯的早期,他在Data General任职期间作为一名产品经理将各种计算机系统(从小型的计算机到大型UNIX服务器)推向市场。

他住在马萨诸塞州波士顿西部的苹果园乡村。他是一名徒步爱好者、滑雪爱好者、海上皮划艇运动爱好者和摄影师。他拥有麻省理工学院和达特茅斯学院的学士学位以及康奈尔大学约翰逊学院的工商管理硕士学位。


事物的起源往往是混乱的。有关开放源代码起源的故事也不例外。

开源软件的故事像是一个复杂而曲折的迷宫,是UNIX操作系统历史的一部分,而UNIX操作系统本身就是错综复杂的。在本章中,我们将看看开放源代码微不足道的起源。

在计算机发展的早期,人们共享可读的源代码是一种普遍存在的行为。很多计算机开发过程都发生在大学和企业的研究部门,如AT&T的贝尔实验室。这些机构有着悠久的开放与协作传统,因此,即使代码没有正式进入公共领域,但是也得到广泛分享。

计算机公司将软件与自己的系统一起交付,通常还包括源代码。用户经常要自己修改软件,以便它能支持新的硬件或者增加新的功能。当时许多供应商的态度是,软件是使用硬件时所必需的,但独立销售是万万不行的。

事实上,在早期,计算机系统的用户往往需要编写他们自己的软件。IBM 704计算机(如图1-1所示)的第一个操作系统,即GM-NAA I/O输入/输出系统,是由通用汽车研究所的Robert L. Patrick和北美航空的Owen Mock在1956年编写的。(操作系统是支持计算机基本功能的软件,例如调度任务、执行应用程序以及控制包括存储设备在内的一些外围设备。)

图1-1 1957年IBM 704计算机在NASA Langley

直到20世纪70年代末,澳大利亚新南威尔士大学的John Lions对UNIX操作系统的第六版源代码进行注释时,共享代码的文化在某些圈子里仍然很浓厚。“Lions注释”的复印本在大学计算机科学系和其他地方广为流传。虽然UNIX操作系统的代码所有者AT&T在技术上不允许这种随意的、非正式的共享,但这是当时的常态。

对软件进行修改使其在新的或不同的硬件上运行的想法在UNIX操作系统上得到发展。1973—1974年,人们用C语言重写了UNIX操作系统(V4版本)。C语言是Dennis Ritchie在贝尔实验室新开发的一种编程语言。按照当时的标准,使用一种高级编程语言重写UNIX操作系统虽然不是完全创新,但却是一种不寻常的、新的甚至有争议的做法。

按照当时的情况,更典型的做法是使用特定机器架构的汇编语言。虽然编写好的代码很有挑战性,也很耗时,但是,由于汇编程序代码和特定架构的机器代码指令(可以直接在硬件上执行)之间密切相关,因此汇编程序是非常高效的。而在当时计算机性能有限的条件下,效率是非常重要的。

然而,由于用C语言重写,UNIX操作系统可以相对容易地被修改并安装到其他机器上。也就是说,它是“可移植的”,这确实不同寻常。当时的常态是为每个新的硬件平台编写一个新的操作系统和一套支持系统以及应用软件。

当然,为了进行这些修改,你需要源代码。

AT&T愿意提供这项服务有几个原因。其中一个特别重要的原因是,在1975年第六版发布后,AT&T开始向大学和商业公司以及美国政府授权使用UNIX操作系统。但这些许可证不包括任何支持或错误修复,这样做的目的就是“追求软件商业化”。而AT&T认为根据协议条款,它无权这样做,因为它是作为一个受管制的电话服务垄断机构来运作的。共享软件源代码允许持有者自行修复和将UNIX操作系统“移植”到不兼容的新系统中。(我们将在第3章中再次讨论版权和许可证的 话题。)

然而,20世纪80年代初期,整个行业对共享软件源代码的宽松态度开始走到尽头。

1982年,AT&T与美国联邦贸易委员会签署了同意法令,规定分拆贝尔地区运营公司(如图1-2所示)。该法令允许AT&T将软件作为一项业务进行发展。在其他方面,该法令允许AT&T进入计算机行业。不久之后,AT&T开始开发UNIX操作系统的商业版本。

图1-2 AT&T与美国联邦贸易委员会于1982年签署的一项同意法令

由于AT&T UNIX操作系统的许可证持有者们开发并发布了各种专有的UNIX版本,这些版本都或多或少地与对方不兼容,这就导致了接下来数十年的“UNIX混战”。这是一段极其复杂的历史。除了注意到它创造的垂直筒仓与UNIX操作系统所取代的小型机和大型机没有什么不同以外,它也与开源的发展没有什么关系。

在同一时期,AT&T以其新的UNIX操作系统实验室子公司的名义与加州大学伯克利分校就其UNIX操作系统的衍生产品(又称“分叉”)——伯克利软件发行版(Berkeley Software Distribution,BSD)发生了法律纠纷。准确地说,这其实是与加州大学伯克利分校的计算机系统研究小组(Computer Systems Research Group,CSRG)的争论。

加州大学伯克利分校计算机系统研究小组曾是AT&T的教育许可机构之一。随着时间的推移,该研究小组修改并增加了授权版本的UNIX操作系统的功能,并在1978年开始将这些附加功能以BSD发布。之后,BSD增加了许多重要的功能,包括彻底重新架构和重写许多关键子系统,同时增加了许多全新的组件。由于其宽泛的变化和改进,BSD版本的UNIX操作系统逐渐被视为一种全新的,甚至更好的UNIX操作系统。许多AT&T的授权者最终将大量BSD版本的代码纳入他们自己的UNIX版本中。(由于不同公司对AT&T风格和伯克利风格的青睐度不同,这进一步加剧了UNIX战争。)

加州大学伯克利分校继续开发BSD版本的代码,并逐步取代大多数仍在AT&T许可下的标准UNIX工具。这最终促成了1991年6月Net/2的发布。Net/2是一个几乎完整的操作系统,表面上可以自由再分发。这反过来又导致AT&T起诉加州大学伯克利分校侵犯版权。

UNIX操作系统曾是许多源代码共享的中心,但是它的商业化导致了一个更加分裂和封闭的UNIX环境。

但分享精神也受到更广泛的侵蚀。

20世纪80年代,PC领域越来越多地被IBM PC及其克隆产品所支配。而这些计算机上运行的是Microsoft公司的操作系统。在很大程度上没有什么开源的显著特征。在某种程度上,这可能反映了一个事实:PC相对标准化的系统架构使得源代码的可移植性优势变得不再重要。

此外,人们购买PC的费用中并不包括开发软件所需的大多数工具,而购买这些工具的费用可能会很快增加。Microsoft公司的DOS操作系统包含了BASIC编程语言解释器,但即使以当时要求不高的标准来看,这款工具也是过时的,无法用于正式场合。当Borland公司更现代的Turbo Pascal在1984年首次亮相时,价格仅为50美元,鉴于典型的编程语言包要数百美元,因此这是一次彻底的创新。编程库和其他资源——包括大部分书本、杂志和其他离线的信息——增加了费用。相对随意的业余爱好者并不适合对一款软件进行改动。

当然,人们在IBM PC上编程。随着时间推移,一个非常健康的自由软件和共享软件开发社区应运而生。

笔者就是其中之一。

共享软件——至少在当时这个词被普遍使用——是一种先试后买的软件。当时,零售的盒装软件可以卖到数百美元,但无法保证它一定能在你的计算机上正常工作,如果不能正常使用,那就要祝你能够顺利退货了。

笔者编写的软件是一款小型DOS文件管理器——一个35KB的汇编程序,名为Directory Freedom。它是笔者和另一个开发人员共同开发的。当时我们参考了《计算机杂志》(PC Magazine)上的汇编代码列表。这个程序虽然没赚到太多钱,但还是有一定的用户基础,至今笔者仍然时不时会收到关于它的电子邮件。笔者还将自己编写的各种实用程序上传到本地的电子公告板系统(BBS)。

但是,发布源代码从来都不是一件特别重要的事情。

类似的商业化动态也在其他地方上演。麻省理工学院人工智能实验室,这个在Steven Levy所著的《黑客》(Hackers)一书中被誉为“纯粹的黑客天堂,科技广场的修道院,人们在那里以黑客为生,以黑客为命”的地方正在发生变化。在这里,Lisp正在被商业化。

Lisp编程语言是人工智能研究的主要工作,但它需要很高的算力,在当时的普通计算机上不能很好地运行。因此,在将近10年的时间里,人工智能实验室的成员一直在试图优化系统以运行Lisp。直到1979年,这项工作已经取得了进展,商业化看起来是一个合理的选择。

最终,两家公司——Symbolics和Lisp Machines Inc.成立了。但这是一个混乱且激烈的过程,导致开放合作的减少和实验室成员的大量流失。

Richard Stallman是人工智能实验室的一员,他并没有去前景更好的Lisp Machines Inc.,但他还是因为实验室社区的分裂而受到很大的影响。Stallman之前编写过被广泛使用的Emacs编辑程序。正如Glyn Moody在《反叛的代码》(Rebel Code)(Perseus Publishing,2001)中写道:“Stallman为Emacs立下一条‘非正式’的规定,即任何人对Emacs做出任何改进都必须把它们发回给他。”

他在Symbolics与Lisp Machines Inc.两家公司的竞争中感受到专有代码的影响。他认为缺乏共享阻碍了软件社区的形成。这也促使他决定开发一个自由且可移植的操作系统。关于Stallman作为自由软件倡导者,还有一个广为流传的故事。因为拒绝访问实验室新安装的激光打印机(Xerox 9700)的软件源代码,Stallman不能像以前一样通过修改实验室激光打印机的源代码给打印机发送指令。

1983年,Richard Stallman在互联网(当时仍称为ARPANET)的Usenet新闻组上宣布:“从这个感恩节开始,我将编写一个完全与UNIX操作系统兼容的软件系统,称为GNU(Gnu’s Not UNIX)并将它免费送给所有能使用它的人。”如图1-3所示。

图1-3 Stallman的自由软件基金会(Free Software Foundation,FSF)
和GNU项目通常被认为是自由和开源软件运动的开端
﹝来源:自由艺术许可证下的Victor Siame(vcopovi@wanadoo.fr)﹞

作为辩解,他接着写道:

我认可的黄金法则要求,如果我喜欢一个程序,就必须把它分享给其他喜欢它的人。出于良知,我不能签署一份保密协议或软件许可协议。为了能在不违反自己原则的情况下继续使用计算机,我决定组装一个包含足够多的自由软件的系统,这样就可以在没有任何非自由软件的情况下继续干下去。

它将基于UNIX操作系统的模式,也就是说,它将由模块化的组件组成,例如实用程序和C语言编译器,这些都是构建一个工作系统所必需的。该项目于1984年开始,时至今日,因为GNU Hurd操作系统的内核一直没有完成,所以事实上还没有“GNU操作系统”。没有内核,它们就没有办法与硬件通信,也就没有办法运行实用程序、应用程序或其他软件。

然而,Stallman确实完成了他的操作系统的许多其他组件。关键在于,这些组件包括从源代码构建一个正常运行的操作系统以及从命令行执行基本的系统任务所需的部分。因为UNIX操作系统的一个特点是设计模块化,所以,修改和改编UNIX操作系统的部分内容而不是一次性全盘替换整个系统是完全可行的(这一事实对后来Linux操作系统的发展至关重要)。

然而,从开源起源的角度来看,同样重要的还有1985年的GNU宣言(GNU Manifesto)、1986年的自由软件定义和1989年的GNU通用公共许可协议(General Public License,GPL),这些规范正式确立了防止“限制自由软件之自由”的原则。

GPL要求,如果以二进制(即机器可读的形式,无论是原始形式还是修改后的形式)发布GPL授权下的程序,那么必须提供可读的源代码。通过这种方式,用户可以在原始程序和其他人改进的基础上进行开发。但是,如果用户自己进行更改并发布它们,那么还必须保证这些更改可供其他人使用。这就是所谓的“copyleft”或出于彼此义务的互惠许可。

20世纪80年代末,自由和开源软件仍处于起步阶段。(事实上,“开放源代码”这个词甚至还没有被创造出来。)那时Linux操作系统还没有诞生。BSD版本的UNIX操作系统很快就卷入一场与AT&T的官司中。互联网还没有完全商业化。但是,特别是在事后看来,我们可以开始辨别出今后将变得重要起来的模式:协作、回馈以及帮助人们了解规则并适当合作的框架。

但是,真正让Linux操作系统和开源崭露头角的是20世纪90年代的互联网繁荣。尽管这一阶段的开源最终只是一个更重要的故事的第一幕。在这样的背景下,开源即将崛起,而计算机硬件和软件的格局也将发生根本的变化。

将时钟拨回到1991年。一个名叫Linus Torvalds的芬兰大学生在Usenet新闻组上发布消息说,作为一种爱好,他开始在UNIX模式下开发一个自由操作系统。Stallman最初的GNU项目的许多部分已经完成。在阳光明媚的加利福尼亚州,加州大学伯克利分校已经推出了第一个可自由分发的UNIX版本。

自由软件显然已经到来,只是它还没有成为计算机领域中非常重要的一部分。

当时,计算机市场格局非常分散。UNIX市场卷入了一场自相残杀的专有系统战争中。许多其他类型的私有计算机公司依然存在——只是它们已经过了鼎盛时期。

这当中比较知名的是马萨诸塞州的“128号公路”小型计算机公司。之所以这样命名,是因为这些公司都位于这条公路上或附近。这条公路环绕着美国东北部海岸的波士顿和剑桥等邻近城市。然而,也有许多供应商为商业和科学计算构建和销售操作系统。大多数人使用自己的硬件设计,从芯片到磁盘驱动器、磁带驱动器、终端等。如果用户买了一台Data General计算机,他也许会从同一家公司或少数山寨的计算机附加设备供应商那里购买内存、卷轴磁带机、磁盘驱动器,甚至机柜。

这些公司的软件基本上也是一次性的。一家典型的公司通常会编写自己的操作系统(或几个不同的操作系统),此外还有数据库、编程语言、实用程序和办公应用程序。笔者在Data General工作时,该公司有大约5种不同的非UNIX小型机操作系统和几个不同版本的UNIX操作系统。

这些公司中许多人都在考虑向他们自己的UNIX版本全面转变。但这主要是针对另一种定制的硬件和UNIX操作系统的变体。

那时,大多数计算机系统仍然庞大且昂贵。“Big Iron”是常用的俚语。许多分析师的报告中都充斥着对它们复杂多样的架构的分析和比较。

即使是“小型企业”或“部门”服务器(通常被称为不需要“玻璃房”数据中心等特殊条件的系统),也可能会花费数万美元。

然而,越来越多的PC开始被固定在桌子下面,用于处理不太繁重的工作。Novell公司的软件NetWare是此类系统的常见选项之一,专门处理打印或存储文件等常见任务。UNIX操作系统也有面向大众市场的版本。最常见的是一家名为Santa Cruz Operation的公司。该公司通过从Microsoft公司购买AT&T许可的Xenix变体而进入UNIX业务。许多年后,一家名为SCO或SCO集团的公司提起了一系列与Linux操作系统相关的多年诉讼,IBM和其他公司也卷入其中。

从更广泛意义上来说,整个计算机系统领域正在发生翻天覆地的变化。正如半导体制造商Intel公司首席执行官Andy Grove在《只有偏执狂才能生存》(Only the Paranoid Survive)(Penguin Random House,1999)一书中所述,20世纪90年代,计算机行业发生了根本性的变革。

正如我们所看到的,历史上的计算机行业是以垂直栈组织的。这些垂直栈越来越多地旋转成一个更水平的结构(如图1-4所示)。UNIX战争时代见证了从紧密集成的专有服务器栈到单一供应商的转变。但互联网的兴起和许多与之相关的市场力量才真正扭转垂直栈的局面。

图1-4 垂直栈的转变

这不是一个纯粹的转变。过去仍然有(现在也有)专有处理器、服务器和操作系统。

但市场越来越多地转向一种模式,即系统供应商从Intel公司购买计算机的中央处理器,通过其他供应商购买各种基本标准化的芯片和组件,从其他公司购买操作系统和其他软件。然后,他们通过直销、邮购和零售的方式销售这些“行业标准”服务器。

在此期间,AMD公司也在Intel公司的授权下生产兼容的x86架构处理器,但是随着时间的推移两家公司陷入了各种合同纠纷。AMD公司后来取得了一些成功,但在很大程度上仍处于Intel公司的阴影之下。

PC模式正在接管服务器空间。

Grove将其描述为PC的10倍力量。旧模式的紧密整合可能会有所欠缺,但是,通过一定程度的自己动手,你就可以只花费几千美元让所有东西一起工作,并获得越来越多与工程工作站相媲美的功能。要知道,在过去,你可能需要花数万美元向某家专有的UNIX操作系统供应商购买这些功能。

随着x86架构日益占据主导地位,现在只需要确定哪个操作系统主导这个水平栈。另一个问题是,谁将更广泛地主导这个水平栈平台的重要方面,如应用程序、数据库以及刚刚开始变得重要的领域,如Web服务器。但是,这些都不是紧迫的问题。

答案并不明显。Microsoft公司著名的DOS操作系统和Windows操作系统的最初版本都是为单用户PC设计的。它们不能像UNIX操作系统那样支持多用户,所以并不适合商业用户。商业用户需要能够轻松地共享数据和资源的操作系统。Novell NetWare是一款多用户的替代品,它在文件和打印机共享方面做得非常好,但它不是一个通用的操作系统。(Novell公司进行各种尝试来扩充NetWare的功能,但是大多以失败告终。)另外,虽然小型系统也有UNIX选项,但是它们并不是真正的大众市场,也受到前面描述的UNIX操作系统分裂的影响。

Microsoft公司决定在其台式机统治地位的基础上以相似的方式统治服务器。

Microsoft公司对下一代操作系统的首次尝试以失败告终。IBM公司和Microsoft公司在1985年8月签署了“联合开发协议”,并基于以开发出OS/2操作系统。然而,1990年Windows 3.0操作系统在台式机上获得成功后,两家公司越来越无法消除它们在技术和文化上的差异。例如,IBM公司主要专注于销售运行在自己系统上的OS/2操作系统(从其将备受瞩目的PC系列命名为PS/2便可见一斑),而Microsoft公司则希望OS/2操作系统能够在众多供应商提供的各种硬件上运行。

因此,Microsoft公司开始同步开发一个重新架构的Windows版本。Bill Gates在1988年聘用了Dave Cutler。Cutler领导的团队为DEC公司的VAX计算机生产线创建了VMS操作系统。G. Pascal Zachary的著作《观止:微软创建NT和未来的夺命狂奔》(Showstopper! The Breakneck Race to Create Windows NT and the Next Generation at Microsoft)(Free Press,1994)详细记载了Cutler推动开发这一新操作系统的努力。作者在书中把他描述为一位才华横溢,有时甚至咄咄逼人的首席架构师。

Cutler对OS/2操作系统的评价很低。有人说他对UNIX操作系统的评价也很低。在《观止:微软创建NT和未来的夺命狂奔》一书中,一位团队成员曾提到:

他认为UNIX是由一群博士组成的委员会设计的垃圾操作系统。整个设计毫无灵魂,因此,他一直想设计出超越UNIX的操作系统。而这也是他第一次有机会这样做。

Cutler负责设计一种新的操作系统,1993年发布时将其命名为Windows NT操作系统。

IBM公司继续自己开发OS/2操作系统,但它未能吸引到应用程序开发人员,所以最终被终止。Microsoft公司的成功是以牺牲IBM公司为代价取得的。这是一个早期的例子,说明了开发人员的重要性以及开发人员思维共享越来越重要。Bill Gates和Microsoft公司早就意识到这一趋势并发挥了相当大的优势。它后来成为开源社区成功的一个关键因素。

运行在Intel公司的中央处理器上的Windows NT操作系统是一款突破性的产品。事实上,Microsoft公司和Intel公司变得如此成功且占据主导地位,以至于人们越来越多地使用“Wintel”一词指代整个行业中占主导地位的系统类型。到20世纪90年代中期,UNIX和NetWare等其他操作系统都在走下坡路。

Windows NT操作系统主要基于小型服务器从UNIX操作系统手中夺取份额,但许多人认为自己看到了Wintel无处不在的未来。除了Sun公司的首席执行官Scott McNealy以外,UNIX系统供应商都开始押宝Windows NT操作系统。

具有讽刺意味的是,如果没有Windows NT操作系统,UNIX操作系统可能会征服一切。对此,Jeff Atwood写道:

这个世界已经完全演变成UNIX和Windows NT阵营。如果没有Windows NT操作系统,无论UNIX操作系统是好是坏,我们现在可能都在运行它。这确实发生在苹果公司身上,甚至该公司的下一代Copland OS都没有起步。而现在他们正在使用基于UNIX的OS X操作系统。

UNIX可能仍然是拥有许多处理器的大型系统的首选操作系统;Windows NT操作系统最初是针对较小的系统进行优化的。但显而易见,Cutler设计的Windows NT操作系统完全能够扩展并且作为UNIX操作系统的替代品。一旦达到这个目的,它很难不围绕着工业标准,就像Intel公司的x86架构的处理器那样。因为大批量销售的产品单位成本更低,所以Windows NT操作系统更容易在新的栈及其各个水平栈上下建立起合作关系和各种集成。

但是,这并不是“游戏结束”的时候。有些事情正在发生。互联网正在起飞,Linux操作系统的第一个版本已经发布。

至1990年,互联网已经以某种形式存在了几十年。它起源于美国国防部高级研究计划局在20世纪60年代委托的工作,目的是建立与计算机网络的容错通信。然而,除了少数连接到早期网络的机构研究人员以外,其他人可能都没有听说过它。20世纪90年代,基于各种原因,互联网从默默无闻中脱颖而出,其中最重要的原因是英国科学家Tim Berners-Lee在欧洲核子研究中心工作时发明了万维网——对今天的许多人来说,万维网就是互联网的同义词——这个欧洲研究组织运营着世界上最大的粒子物理实验室。

20世纪90年代后期的互联网建设让很多人受益,包括高端昂贵的硬件和软件的供应商。Sun公司、网络解决方案供应商Cisco公司、存储磁盘阵列供应商EMC公司和数据库巨头Oracle公司,这四家公司被称为“互联网四骑士”。似乎每一家风投支持的初创公司都需要给这四家公司开一张大额支票。

然而,许多互联网基础设施(比如Web服务器)以及高性能的科学计算集群都运行在大量小型系统上。UNIX供应商,尤其是Sun公司,很乐意为这些目的出售自己的小盒子,但这些小盒子的价格通常比“工业标准”硬件和软件的正常价格高得多。

使用更多、更小的服务器是行业重心从“纵向扩展”向“横向扩展”进行广泛转移的一部分。20世纪80年代,首次出现并流行的客户机/服务器和网络/分布式计算风格的成熟推动了分布式计算。这似乎是Microsoft公司的强项。

然而,Windows NT操作系统对这些应用来说也并不理想。在小型企业和大型企业的复制站点等市场上,它正在迅速地从UNIX操作系统手中夺取份额,以至于像Santa Cruz这种向市场销售的供应商都面临着巨大的损失。鉴于定制和技术的原因,网络基础设施和科学计算的角色在历史上大多偏向于UNIX操作系统。例如,UNIX模块化混合匹配的性质使得它长期以来一直受到工匠和DIY爱好者的欢迎。因此,过渡到Windows NT操作系统既不自然也不容易。

BSD UNIX操作系统是一个明显的替代方案。它确实取得了一些进展,但非常有限,其中的原因很复杂,也不完全清晰。加州大学伯克利分校与AT&T的法律纠纷造成的持续影响挥之不去。BSD许可证并不像GPL一样,要求必须发布修改后的源代码。而且由于BSD采用集中式的开发方式,其社区也不太欢迎外界的贡献者。笔者将稍后讨论其中的一些内容。无论如何,BSD UNIX操作系统最终并没有对软件领域产生重大影响。

随着时间的推移,Linux操作系统与其他开源软件(如GNU、Apache Web服务器和许多其他类型的软件)相结合,填补了这一空白。

我们回想一下芬兰大学生Linus Torvalds。他受MINIX的启发开始编写操作系统内核。MINIX最初是由Andrew Tanenbaum出于教育目的而创建的UNIX版本。

内核是计算机操作系统的核心。事实上,一些纯粹主义者认为,内核才是操作系统,其他都是更广泛的操作环境的一部分。在任何情况下,它都是计算机启动时最先加载的程序之一。内核将应用软件与计算机的硬件连接起来,并且将管理系统硬件的业务从“用户空间”中抽象出来,而试图使用计算机做一些事情的人关心的就是这些。

Linux是类UNIX(有时是*NIX)操作系统家族的一员。UNIX和类UNIX操作系统之间的区别是复杂的、不清晰的,坦率地说,也并不有趣。最初,“UNIX”一词指的是AT&T开发的特定产品。后来它扩展为以AT&T为授权方的产品。现在,Open Group拥有UNIX的商标,但是这个术语已经成为一个通用术语,在那些无争议的真正的UNIX操作系统和那些由于商标或技术特性而被更好地描述为类UNIX操作系统之间没有任何有意义的区别。

1991年,Torvalds在互联网早期流行的分布式讨论板comp.os.minix Usenet新闻组上向全世界宣布了他当时的业余项目。很快他发布了0.01版的Linux内核。

到了第二年,Torvalds在GPL下重新授权了Linux内核。其他人创建了第一批Linux发行版,以简化安装并开始将使用操作系统所需的许多组件打包到一起。到1993年,超过100名开发人员开发Linux内核,除此之外,他们还将它调整到GNU环境。1994年Linux 1.0版面市,增加了一个图形用户界面到XFree86项目,Red Hat和SUSE也推出了商业化的Linux发行版。

就像20世纪70年代中期的UNIX操作系统和80年代中期的Solaris操作系统一样,Linux操作系统最初在大学和计算研究机构中流行,随后开始应用于许多网络基础设施,例如文件和打印共享、Web和文件服务以及类似的任务。

用户可以免费下载,也可以用便宜的价格购买存储了它的磁盘。在这种情况下,我们需要明确“便宜”的含义。从20世纪90年代初到90年代中期,仍然是Egghead Software(一家美国计算机软件零售商)等软件零售店和《计算机购物者》(Computer Shopper)等大型出版物的时代。《计算机购物者》是一本大画幅杂志,其内容充斥着计算机设备和软件的广告,巅峰时期超过800页。消费者习惯于购买盒装软件,包括前面提到的Windows NT操作系统,这些软件的价格动辄数百美元。对一家习惯于从Oracle等公司购买商业应用程序的公司来说,这似乎是一笔很划算的交易,但大学生和年轻的专业人士并不这么认为。笔者的一位前同事回忆说,他从一家折扣零售商那里花6美元就能买到一张Red Hat Linux操作系统的光盘,这让他非常震惊,因为价格非常便宜。

Linux操作系统也与UNIX程序和功能兼容,有许多软件开发工具可供使用(同样是免费的或便宜的)。它拥有大型集群或某台服务器运行所需的所有应用程序。Linux操作系统的低成本也意味着它经常被引入公司内部,甚至不需要IT管理人员知道,更不用说批准了。

20世纪90年代末,Linux操作系统和开源还没有形成今天这样的主导力和影响力。但是Linux操作系统在x86架构服务器上的市场份额已经超过了UNIX操作系统。它运行着世界500强公司中的超级计算机,是许多基础设施产品的基础,如同在网络繁荣时期销售的“服务器设备”。

甚至到2000年,Linux操作系统已经吸引了来自世界各地的成千上万名开发者。开源开发模式正在发挥作用。

在这一点上,值得稍作停顿。回顾2000年,我们提出一个相当简单的问题:“我们所看到的景象是命中注定的,还是2000年计算机行业一连串不可能事件的结果?”毕竟,正如我们所看到的,整个行业都准备将操作系统市场(以及计算机软件市场的很大一部分)让给Microsoft公司。当然,几乎每个人都是正确的。Linus Torvalds和Linux操作系统的横空出世是一个将计算机行业推向完全不同的发展方向的随机的、不可能的事件吗?

答案的一部分取决于你是否认同英雄史观。这一理论主要归功于苏格兰哲学家和散文家Thomas Carlyle,他在1840年发表了一系列关于英雄主义的演讲,后来出版了《论英雄、英雄崇拜和历史中的英雄》(On Heroes,Hero-Worship,and The Heroic in History)。Carlyle曾说过:“世界的历史不过是伟人的传记。”这反映了他的信念,即英雄通过自己的个人特质和神圣的灵感来塑造历史。

但这也取决于我们如何看待互联网时代巅峰时期的计算机行业。一种观点可能会把焦点集中在强势的Microsoft公司身上,Microsoft公司在这个时期横扫一切。但另一种观点可能正确地指出,互联网正在颠覆一切。Microsoft公司对源自UNIX操作系统和网络的技术反应迟缓,而这些技术很大程度上脱离了Microsoft公司赖以崛起的PC世界。

至于所有这些行业的共同智慧呢?长期担任Sun公司工程师和Oxide Computer联合创始人的Bryan Cantrill对行业智慧并不感冒。他认为:

……这个行业错了。这个行业之前已经错了很多次,所以这不应该是惊天动地的大事或新鲜事。但是那些接受Windows操作系统的公司有非常严重的深层结构问题。这是一种屈服的行为。而且,这根本不是前瞻性思维。我认为它们一直都是这样的。从DEC公司、HP公司到IBM公司,可能最可悲的是SGI公司,因为SGI公司绝对应该是一个独立的思考者,但行业认为它需要放弃它的未来以给Windows操作系统让路。

他接着补充:

我认为,即使它不是Linux操作系统,也会是BSD UNIX操作系统的变体之一,而它实际上就是x86架构上的UNIX操作系统。这是互联网的崛起,也是SMP(对称多处理)在较小程度上的崛起,然后是商业微处理器作为性能最高的微处理器的崛起。Linux操作系统在这些经济大趋势下抢占了先机,但并没有真正促成这些趋势。

开源软件诞生于20世纪,但在21世纪,它的巨大影响已经成为一种现象。

在某种程度上,这是因为计算方式的改变有利于开源软件的发展,例如Linux操作系统。毫无疑问,开源也起到某种反馈回路的作用,使这些趋势得以放大。

正如我们所看到的,许多早期的开源项目都与网络化的、横向扩展的计算密切相关。最初,这似乎与许多企业IT部门处理基础设施和应用程序的方式不一致,后者倾向于纵向扩展和单体架构。需要更多的能力吗?那么请升级服务器,请支付更高的费用,谢谢。

然而,到21世纪初,许多组织正在改变它们对企业IT的看法。正如当时笔者的分析师同事Jonathan Eunice在2001年的一份研究报告中所写的:

……我们必须明白,构成今天企业计算的要素实际上正在快速发展。它每天都在向网络计算领域迈进并进一步演变。企业IT越来越多地通过标准化的基础设施来实施并通过Internet协议网络连接进行交付。IT部门越来越多地以这种方式组织任务和数据中心,服务提供商也是如此。

在“Big Iron”UNIX供应商的世界中,为了最大化单台服务器的性能和可靠性,它们在垂直可伸缩性、故障转移集群、资源管理和其他特性方面投入了大量工作。随着时间的推移,Linux(和Windows)操作系统在与这些需求相关的特性上投入了大量精力。但是,世界越来越不重视这些需求,而是将注意力转移到更为分布式、以网络为中心的工作负载上,这些工作负载更接近最初对开源的需求。事实上,一种观点认为,21世纪初由IBM等公司资助的一些Linux操作系统开发工作过度专注于使Linux操作系统成为更好的、纵向扩展的UNIX操作系统。

在新世纪中,一种新的商业模式也加速了对开源软件的需求。可以毫不夸张地说,如果没有开源软件,这种商业模式是不可能实现的。仅亚马逊网络服务(Amazon Web Services,AWS)这一家云服务供应商可能就拥有数百万台服务器。在这种规模下,Amazon公司也许可以授权一个操作系统或其他软件的源代码,然后根据它们的需要进行调整。然而,像Google公司、Facebook公司和几乎所有的互联网公司一样,它们主要运行的是开源软件。

在某种程度上,这只是成本问题。特别是对于那些提供服务的公司,它们只能通过广告或其他方式间接盈利(如Google公司免费的Gmail),如果它们需要按照传统的方式为软件付费,那么经济上是否可行不得而知。

这并不是说这些公司使用的所有东西都是免费的。通常情况下,对技术成熟的组织来说,与一些供应商建立商业关系是有意义的。许多大型企业都需要专业的财务、其他类型的软件和软件服务,这些公司同样需要。把所有事情都放在公司内部处理是没有意义的。

尽管如此,从某种意义上说,这些公司几乎是一种新类别的系统供应商,它们生产和构建大量的软件(甚至优化的硬件)以供内部使用。

不过,每家公司都需要决定内部的研发重点是什么。这是Nick Carr 2003年在《哈佛商业评论》(Harvard Business Review)上发表的一篇题为《IT无关紧要》(IT Doesn’t Matter)的文章的中心论点。软件几乎渗透到企业的每个方面,这使得Carr的一些论点显得越来越夸张。(当时许多人也这样认为。)由于软件在许多层面发挥着竞争优势,公司越来越少地把它当作一种可以轻易外包的纯商品。然而,更广泛一点来说,他认为企业应该专注于那些能够真正实现差异化和获取价值的领域。

开源软件使构建和购买之间的决策权衡变得更容易,因为这不再是一个选择。从历史上看,软件往往是一个要么接受要么放弃的命题。如果你是一个非常重要的客户,而软件不像你希望的那样工作,你可以向供应商提出个性请求,它们可能会在一两个版本中做出回应。通常你可以选择从供应商处购买定制产品。即使这样,你仍然会在改变产品的过程中遇到很多麻烦。

有了开源,公司不需要从头开始构建整个系统,可以选择在某处使用开放源代码而不做任何更改——这可能需要供应商的全力支持,或者根据自己的特殊需求对源代码进行调整和扩充。

实际上,这些关于经济的争论回避了开源快速发展这个最重要的原因,特别是在一家公司的背景下。这些原因包括超越了将开源仅仅视为代码的狭隘视角。它要求把开源看作一种非常好的开发模式,同时也是个人和公司进行合作的一种新型方式。

这就是21世纪开源的真实故事。随着时代变迁,它早已不是比专有软件更便宜的问题了。噢,开源软件通常是这样的。而且在某些方面,这是典型的颠覆性创新,即它并不完全是关于价格的,但通常在一定程度上涉及价格(如图1-5所示)。

图1-5 颠覆性创新模式
(来源:Clayton M. Christensen、Michael Raynor
和Rory McDonald,hbr网站版权所有)

“颠覆性创新”是哈佛商学院教授Clayton Christensen提出的一个术语,用来描述“一种产品或服务最初在市场底层的简单应用中扎根,然后不断向上发展,最终取代现有竞争对手的过程”。

在本书中,我们已经介绍了一个例子——PC和服务器颠覆了传统的UNIX操作系统供应商,而UNIX操作系统供应商又颠覆了早期的专有系统,例如小型机。

Christensen还写道:“颠覆性创新让处于市场底层的全新消费者群体能够获得产品或服务,而在过去,只有拥有资金或技能的消费者才能获得这种产品或服务。”相对于UNIX操作系统,Linux操作系统符合这个定义(Windows操作系统也是如此)。事实上,随着时间的推移,大量现有的UNIX操作系统业务已经转向Linux操作系统。这让那些想要少花钱的大型用户和技术复杂的用户受益。

但它也为那些可能负担不起专有UNIX操作系统的新用户和企业提供了机会。可以说,Linux操作系统也将成为Windows操作系统的颠覆者,因为它在很大程度上将Windows操作系统挡在网络基础设施和科学计算市场之外。而在没有Linux操作系统或另一种免费UNIX操作系统替代品的情况下,Windows操作系统最终可能会默认占领这些市场。

我们可以将类似的论点应用到许多其他类别的开源软件——数据库、应用服务器和其他企业的中间件、编程工具、虚拟化等。这些开源软件早期的主要优点是用户可以从网上下载并免费试用。但是,实际上,它们在其他方面并不比专有的替代软件更好。

然而,在过去10年左右的时间里,情况开始发生变化。早期的云计算项目针对的是那些想要自己动手搭建云计算平台的人。这可能是第一个大的转折点,而大数据是另一个转折点。今天,云计算是云原生、容器、人工智能以及许多与它们相关的项目。共同之处在于,开源允许多个来源的创新以强大的方式重新组合与混合。这创造了一种情况,即大量有趣的创新最先出现在开源领域。

在某种程度上,这可能是因为独立的开源社区可以以强大的方式进行集成和组合。

云原生应用程序开发和基础设施空间可能是技术领域中互补和竞争项目结合的显著例子。起初,云原生主要涉及容器本身。在操作系统中,容器是一种隔离应用程序和应用程序组件的高效、轻量级的方法。但是Kubernetes、Prometheus和其他数百个项目对它进行扩展,这些项目涵盖容器编排、监控、日志、跟踪、测试和构建、服务发现,以及你能想象到的任何可能对大规模开发、安全、部署和管理分布式应用程序有用的东西。我们还看到云原生和其他领域的持续交集。例如,软件定义的存储和软件定义的网络功能都以不同的方式被容  器化。

人工智能和机器学习是另一个重要的领域,其中许多工具和构建模块由开源主导。这包括像Python这样的编程语言,像Kafka这样的事件系统,像Jupyter notebooks这样的协作和共享工具,以及像Ceph这样的分布式存储。你还可以看到这个空间和云原生之间的交集,因为像Open Data Hub这样的项目使用容器平台来简化复杂的软件部署。

随着计算领域发展得更加分布式与灵活,开源也随之进行广泛 演变。

软件既塑造了计算环境,又反映了计算环境。历史上,大量的专有软件集中开发大型应用程序,而要使用这些应用程序则需要花费昂贵的许可费以及安装费用和定制费用。应用程序之间以及应用程序和数据之间的连接需要更昂贵、更复杂的软件,比如EDI(Electronic Data Interchange,电子数据交换)。这符合专有的商业模式。

复杂性实际上是一件好事(至少从供应商的角度来看)。它将客户与单一的供应商捆绑在一起产生咨询费,同时通过所有需要的选项创造大量的追加销售机会,使所有的东西都能一起运作。复杂性也意味着没有真正的方法来确定软件能否像广告宣传的那样工作。在实践中,笔者曾经见过不止一款高端计算机系统管理应用程序最终沦为架子上一个非常昂贵的文件夹,因为它从来没有真正完成应该完成的工作。

即使在Web出现之后,最初的尝试仍然反映了传统的做事方式,例如面向服务的架构(Service-Oriented Architecture,SOA),至少在最初的形式中是这样的。SOA背后的许多核心思想是现代架构模式(如微服务)的一部分,例如将功能分离成不同的单元,通过明确定义的共享格式传递数据来相互通信。然而,在最初实现时,SOA经常被重量级Web服务标准和协议所拖累。

相比之下,今天的分布式系统通常以轻量级协议(如REST)为特征;可以混合、匹配和改编开源软件组件;同时是一种倾向于编码参考实现而不是经过重量级标准设置过程的哲学。开源将UNIX风格的方法(如高度模块化设计)更广泛地引入到平台软件和应用程序中。

2003年,IBM公司播放了名为《神童》(Prodigy)的电视广告。它描绘了一个小男孩坐在那里汲取智慧之珠的能量。好莱坞导演Penny Marshall说:“一切都取决于时机,孩子!”哈佛大学教授Henry Louis Gates说:“共享数据是走向社区的第一步。”Muhammad Ali说:“说出你的想法。不要退缩。”在广告的结尾,有人问这个孩子是谁,“他的名字叫Linux。”

这则广告由奥美广告公司制作,画面引人注目,令人不忍切换频道。时任IBM公司全球广告主管的Lisa Baird表示,该广告的目标客户是“首席执行官、首席财务官和产品经理”。对这则广告的投资反映了在世纪之交具有前瞻性的个人和组织是如何看待开源的。

Irving Wladawsky-Berger很早就认识到Linux操作系统的潜力并在世纪之交的关键时刻为IBM公司运营Linux战略。他在2011年LinuxCon的一场主题演讲中发表了自己的观点。“我们并不认为Linux只是另一个操作系统,就像我们不将互联网视为另一个网络。”他接着说,“我们把它看作是未来创新的平台,就像我们看待互联网一样。”

许多人认为IBM公司对Linux操作系统的投资是大型企业将Linux操作系统视为安全选择的重要认可。AWS的Matt Asay告诉笔者:“开源领域发生的最重大的事情之一是IBM公司对Linux操作系统的10亿美元投资……几乎一夜之间,对话发生了变化。”科技记者Steven Vaughan-Nichols对此表示赞同,他说:“IBM公司的认可意味着一个操作系统获得了《财富》(Fortune)50强企业的官方认可,而在此之前,它仍然被视为只有真正的书呆子才会使用的东西。”

正如Wladawsky-Berger在2020年对笔者讲述的那样:

我还清楚地记得1999年12月,我给IBM公司负责人Sam Palmisano打了电话。我说:“Sam,工作组建议我们应该使用Linux操作系统。”Sam说:“好吧,Irving,我们会这么做的。”我对Sam说:“你想什么时候宣布?”Sam说:“现在怎么样?”我说:“Sam,现在是圣诞节,也许我们应该等到新年。”在2000年1月的第二个星期,我们发布了一个重要的公告,宣布IBM公司将在所有产品中支持Linux操作系统。

同样值得注意的是,像Red Hat公司、SUSE公司和其他一些小型公司开始建立业务,他们不仅使用,而且明确地以开源为基础。

2000年,许多人可能还不清楚Linux不仅仅是一个拥有特殊许可证的类UNIX操作系统,或者更广泛地说,开源是软件或业务的重要组成部分。然而到2020年,很明显,Linux操作系统和广泛的开源在推动软件创新方面发挥着重要作用。考虑到商业能力与软件密不可分的关系,这意味着开源的发展将推动商业能力向前发展。

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e59697”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。


相关图书

有限元基础与COMSOL案例分析
有限元基础与COMSOL案例分析
现代控制系统(第14版)
现代控制系统(第14版)
软件工程(第4版 英文版)
软件工程(第4版 英文版)
程序员的README
程序员的README
科学知识图谱:工具、方法与应用
科学知识图谱:工具、方法与应用
现代软件工程:如何高效构建软件
现代软件工程:如何高效构建软件

相关文章

相关课程