开源项目成功之道

978-7-115-65575-2
作者: 约翰·梅尔蒂卡(John Mertic)
译者: 孙振华林旅强
编辑: 秦健
分类: 其他

图书目录:

详情

本书全面深入地探讨了开源项目的生态,不仅揭示了开源文化的精髓,还提供了实践指南,帮助读者在开源世界中找到自己的位置并发挥影响力。本书共分为三部分:首先,介绍了开源的基础知识、历史背景和选择开源的动机等;其次,深入探讨了如何运营开源项目,包括建设社群、处理冲突和应对增长等;最后,揭示了开源项目商业化的途径和策略,分析了不同的商业化模式,并指导读者为开源项目设定清晰的商业方向。 本书不仅适合对开源软件感兴趣的读者、IT从业人员以及致力于开源健康发展的人员阅读参考,还适合作为高等院校相关专业的开源教育读物。

图书摘要

版权信息

书名:开源项目成功之道

ISBN:978-7-115-65575-2

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

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

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

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

版  权

著    (美) 约翰·梅尔蒂卡(John Mertic)

译    孙振华 ,林旅强

责任编辑 秦 健

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

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

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

读者服务热线:(010)81055410

反盗版热线:(010)81055315

版权声明

Copyright © Packt Publishing 2024. First published in the English language under the title Open Source Projects - Beyond Code:A blueprint for scalable and sustainable open source projects.

All Rights Reserved.

本书简体中文版由英国Packt Publishing公司授权人民邮电出版社有限公司出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。

内容提要

本书全面深入地探讨了开源项目的生态,不仅揭示了开源文化的精髓,还提供了实践指南,帮助读者在开源世界中找到自己的位置并发挥影响力。本书共分为三部分:首先,介绍了开源的基础知识、历史背景和选择开源的动机等;其次,深入探讨了如何运营开源项目,包括建设社群、处理冲突和应对增长等;最后,揭示了开源项目商业化的途径和策略,分析了不同的商业化模式,并指导读者为开源项目设定清晰的商业方向。

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

特别感谢一直支持我的妻子Kristy,以及孩子们——Mallory、Carter、Yin Bai和Zarah,感谢你们一直以来的爱和鼓励,尤其是当我从事各种古怪的事情时,如写这本书的时候。

——John Mertic

推荐序

自由软件运动发端于个人计算机及软件产业起飞的20世纪80年代初期,而“开源”这一术语出现在个人计算机及软件产业如日中天、新兴互联网产业泡沫蓬勃兴起的20世纪90年代后期。我们注意到,在个人计算机时代,开源创新很“煎熬”,而在互联网时代,开源创新很“光鲜”!这是为什么?从表象上看,在个人计算机时代,开源创新没有取得商业成功,而在互联网时代,开源创新造就了互联网产业的蓬勃发展。从深层次看,开源创新在互联网时代成为主流,我认为至少是以下4个因素共同作用的结果。

第一,开源是应对不确定性时代挑战的重要创新模式。面对互联网产业的巨大不确定性,创新者通过开放源代码,以更低的成本吸引更多创新同路人和“新潮”消费者参与到新技术新产品的迭代和传播之中,以寻求将边缘低端产品迅速转变为主流高端产品。第二,开源是挑战行业垄断者的重要创新途径。20世纪90年代,微软是个人计算机时代的垄断者,并试图利用其在个人计算机上的垄断地位将其控制力延伸至新兴的互联网产业。然而,互联网时代的不确定性远非微软的闭源模式所能驾驭,以Google为代表的互联网挑战者坚持走开源发展路线,成功打破了微软的垄断企图,成为互联网时代的商业赢家。第三,开源是激发创新者及其社区创新活力的重要创新手段。通过开放源代码,开发者可以自由地参与开源项目,形成自组织的群体协作模式,正是这样一种开放协作机制,鼓励开源社区的广泛参与和贡献,最大化了创新的可能性。第四,开源是保障软件安全发展的“阳光”创新机制。广大开源社区参与者成为发现和解决软件问题的主要力量,任何软件问题在无数开发者的“众目睽睽”之下都“无处遁形”。

相较互联网时代的开源成功,面对扑面而来的智能化时代,开源创新逻辑依然有效吗?我认为,开源创新仍是智能化时代全球技术创新的重要引擎,其成功的关键要素没有改变。第一,人工智能时代,开源作为应对不确定性挑战的创新模式,其内在逻辑没有变。有一种说法,在ChatGPT之后,大模型作为人工智能的主流技术路线就确定了,也就是说,人工智能技术路线的不确定性消失,开源发展的生态土壤不复存在。事实上,人工智能的不确定性依然存在。首先,大模型如何盈利尚未达成共识,多元探索势不可挡;其次,大模型能否实现通用人工智能尚存争议。第二,人工智能时代,开源作为挑战行业垄断的创新途径,其内在逻辑没有变。进入21世纪以后,Google虽然被视为人工智能领域的先行者,但其开源意愿逐渐减弱。OpenAI以挑战人工智能垄断者的姿态出现,却在取得大语言模型领先地位后转向闭源。Meta为抗衡OpenAI,重新扛起开源大旗,吸引了大量规模追随者。人工智能时代的开源与闭源之争将长期存在。第三,人工智能时代,开源作为激发创新者活力之创新手段,其内在逻辑没有变。越来越多的人工智能研究者更加倾向于开放自己的研究成果,从而获得同行的关注和参与。第四,人工智能时代,开源作为保障安全发展的“阳光”机制,其内在逻辑没有变。相较之少数人声称让他们负责人工智能的安全,人们更倾向于开源安全的“阳光”机制,即通过大众参与保障人工智能的安全发展。

开源创新给中国带来了什么?中国应该在智能化时代的开源实践中扮演什么角色?中国作为全球开源创新的学习者和参与者,是开源的受益者也是开源的贡献者。过去30多年,中国开源实践已经经历“学习借鉴”和“参与融入”两个重要阶段,正迈向“蓄势引领”新周期。在全球开源生态网络中,虽然随着技术时代的变迁,开源生态网络中的“超级节点”也随之变化,但新的“超级节点”几乎都是由美国或美国的行为主体主导。智能化时代开源生态网络中新的“超级节点”会不会出现在中国?这是中国科技界和产业界十分关注的问题。我认为,在智能化时代,全球开源生态网络一定会出现新的“超级节点”,中国的科技发展和产业发展环境具有孕育智能化时代全球开源生态网络“超级节点”的土壤,中国已经出现根植于中国实践的、有潜力的开源“根社区”。但是中国还没有将“根社区”运营成有全球影响力的开源项目和社区的成功案例,中国还需要继续学习、持续探索。

这正是本书翻译出版的现实意义。本书的作者结合其自身开源实践,系统地介绍了开源项目及其社区生态的运营和商业化策略。这本书不仅揭示了开源文化的精髓,还提供了实践指南,帮助读者在开源世界中找到自己的位置并发挥影响力。书中的内容涵盖了开源的基础知识、历史背景、选择开源的动机,以及如何运营开源项目,包括建设社群、处理冲突和应对增长等关键主题。更难能可贵的是,作者还分享了开源项目商业化的途径和策略,为读者提供了清晰的商业方向指导。

历史经验可以给我们启发,但应对新的时代挑战需要新的探索。他人的成功可以给我们激励,但应对我们自己的问题需要新的突破。让我们一起期待开源项目更加繁荣的未来,期待中国开源力量在全球生态中找准定位,发挥影响力。

王怀民

中国科学院院士

中国计算机学会(CCF)会士

CCF开源发展委员会主任

中国软件行业协会理事长

贡献者

关于作者

John Mertic是Linux基金会的项目管理总监。他领导并帮助ASWF、ODPi、开放大型机项目和R联盟加速了开源创新和产业转型。John的开源职业生涯跨越20年,他既是SugarCRM和PHP等项目的贡献者,也是SugarCRM、OW2和OpenSocial的开源领导者。凭借广泛的开源背景,他每年都会在各种Linux基金会活动和其他行业展会上发表演讲。John还是一位作家,热衷于写作,他撰写了两本书——The Definitive Guide to SugarCRM:Better Business ApplicationsBuilding on SugarCRM,并在在线平台IBM DeveloperWorks和Apple Developer Connection上发表过文章。

我要感谢我充满爱心和耐心的妻子Kristy,以及孩子们——Mallory、Carter、Yin Bai和Zarah,感谢他们在我写这本书的漫长过程中一直给予我的支持、耐心和爱。也感谢我在过去20年中有幸参与的所有开源项目,因为如果没有它们,我就不会有这些经历。

关于审稿人

Guy Martin是英伟达公司的开源和标准总监,他与Omniverse团队合作,帮助他们利用和贡献重要的开放3D项目和标准,如通用场景描述(Universal Scene Description,USD)、材质定义语言(Material Definition Language,MDL)、PhysX(现实世界的3D物理引擎)等。他还担任英伟达公司其他部门开源和标准的内部顾问。

他为英伟达公司贡献了自己30年软件工程师和开源战略家的独特经验。此前,他曾担任国际公认的开源和标准联盟OASIS Open的执行董事,参与建立了从视觉效果到物联网等众多技术的开源和标准机构。

前  言

开源不仅是主要的软件开发方法论,还是助力快速创新、分散协作、生态系统建设和职业发展的卓越战略。如今,无论在哪里,都离不开与开源的互动。开源存在于你的手机、汽车和冰箱中,它使你最喜欢的节目或电影的制作和发行成为可能,它保证了航班的安全运行,并让那些生活条件不好的人也能快速融入数字世界,享受现代科技的便利。开源甚至在我写这本书的时候帮了很多忙(谢谢Neovim和Pandoc)。

随着开源的不断涌现,随之而来的是巨大的多样性。虽然这种多样性的一个重要方面是所使用的技术栈,但开源项目的运营方式也同样重要。知识产权战略、托管和治理模式、社群结构、商业参与和增长等方面都有非常丰富的内容。开源项目的技术栈像是一门科学,而项目运营则更像是一门艺术。没有两个项目是完全相同的,对一个项目有效的方法可能不适用于另一个项目。

这正是本书的重点:开源项目运营的艺术。第1章和第2章将介绍开源项目的基础知识,以及为什么要参与或创建开源项目、好的开源项目的特点等。之后我们将深入了解开源项目的多个方面,可以把第3章到第14章想象成一本烹饪书。与你所期望的烹饪书的一个很大的不同是,对于涵盖的所有主题,都没有一个关于“正确方式”的明确答案,但是你将通过许多成功项目(以及那些没有那么成功的项目)的例子进行学习。这些例子有望与你的开源项目产生共鸣,并为你提供更多的框架。毕竟,开源是一门艺术,而不是一门科学。

目标读者

本书适合任何对开源感兴趣的人阅读,特别是那些希望启动开源项目或目前正在管理开源项目,并希望了解如何更好地运营项目或扩展项目以实现增长和可持续发展的人。

本书内容

第 1 章深入探讨开源是什么以及开源的历史。在此基础上,我们将了解如何运用开源,并展示一些开源项目开源的动机。

第 2 章明确开源项目的核心特征。在本章中,我们将了解“开源代码”与“启动开源项目”之间的区别,并探索开源项目中的各种模式和反模式。

第 3 章探讨许可证、知识产权管理、贡献签署以及品牌和标志管理的各个方面,尽管我并非律师。

第 4 章将帮助你让你的公司为开源作出贡献或启动开源项目。本章介绍一家公司希望开源代码的原因、如何获得支持并建立开源代码的商业案例,以及让开源落地的过程并衡量其是否成功。

第 5 章解释开源项目如何构建治理模式。在本章中,我们将了解各种治理和托管模式、开源项目中的角色、记录项目的治理结构,以及如何让项目获得财务支持。

第 6 章为创建一个包容性社群提供指导和最佳实践。本章主题包括为新人设置项目、有效支持最终用户,以及在社群发展超出项目范围时如何吸引新成员加入。

第 7 章介绍将贡献者发展为维护者的重要性,然后介绍如何识别可能成为维护者的贡献者,以及了解他们何时准备好成为维护者。

第 8 章旨在探索人类的思维方式和动机,以更好地处理开源项目中的冲突。在本章中,我们还将了解包容性决策,以及如何纠正项目中的有害行为。

第 9 章主要介绍衡量增长,评估项目中低增长的领域,并找出补救方法的内容。在本章中,我们还将了解如何增强和扩展项目的领导力,以便更好地管理时间并集中精力,这样当项目越来越大的时候,可以避免倦怠。

第 10 章回顾开源项目在商业中的重要性和价值。在本章中,我们将了解开源项目的商业化模式,以及如何为商用设置你的项目。

第 11 章着眼于开源项目和人才之间的交集。在本章中,我们将了解如何通过开源实现个人职业成长,如何通过开源寻找人才,以及如何认可为开源作出贡献的员工。

第 12 章讨论为开源项目营销的重要性。在本章中,我们将了解开源项目的基本营销方式,然后学习一些市场营销的技巧以便让你的项目能够吸引更多人参与。

第 13 章介绍处理开源项目领导者的继任计划。在本章中,我们将学习如何制定继任计划,以及领导者如何从容地退居幕后,让下一代领导者继续推进项目。

第 14 章将帮助你识别一个开源项目何时接近落幕。在本章中,我们将了解如何结束一个开源项目,包括结束前要做的工作和结束后的注意事项。

如何充分利用本书

本书不是一本技术图书,而更像是开源项目运营艺术的指南。虽然没有明确的先决条件,但在阅读本书之前,你最好对开源有基本的了解。注意,你不需要有技术背景就能充分利用本书。

资源与支持

资源获取

本书提供如下资源:

本书思维导图;

异步社区7天VIP会员。

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误

作者、译者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入错误信息,单击“提交勘误”按钮即可(见下图)。本书的作者、译者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获赠异步社区的100 积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作译者与读者在线交流互动,以及传统出版与数字出版的融合发展。

异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域四十余年的发展与积淀。异步图书面向各行业的信息技术用户。

第一部分 准备开源

在第一部分中,我们将了解什么是开源,为什么选择开源,以及什么是好的开源项目。此外,我们还将介绍一些启动开源项目的重要部分,包括许可证和知识产权管理、向公司展示开源项目所带来的商业价值,以及开源项目的众多治理和托管模式。

本部分包含以下各章:

第1章,什么是开源,为什么要开源;

第2章,什么造就了好的开源项目;

第3章,开源许可证和知识产权管理;

第4章,向公司展示开源项目所带来的商业价值;

第5章,治理和托管模式。

第1章 什么是开源,为什么要开源

当我向不从事技术或非相关领域的人解释开源时,我经常发现自己处于这样的对话‍中。

他人:“开源是什么呢?”

我:“它是一种可以让多个人和组织公开协作构建软件的方式。”

他人:“所以,它是免费的?”

我:“是的,但涉及许可证,许可证规定了重用的条款。”

他人:“这东西有价值吗?如果有价值,难道不会有人卖掉它吗?”

我:“是的,它有价值,但它通常是人们构建产品的基础技术软件,或者是那种很多人强烈希望公开的软件。”

他人:“好的,那么人们开发这个软件会得到报酬吗?”

我:“通常是的,但有时人们只是因为想这样做,没有特别的原因。”

他人:“那么,为什么有人会这样做呢?”

我:“可能有很多原因。也许他们喜欢这项技术,也许他们希望与一群有趣的人一起工作,也许他们正在尝试进入软件开发领域。”

他人:“好的,听起来很有趣。”

这段对话可能与你和商业人士的对话一致;我曾经与朋友和家人也有过类似的对话,他们离开时对我的工作前景以及我如何养家糊口感到担‍心。

严肃地说,要想解释什么是开源,需要描述得更细致一些。它包括了部分许可证、开发方法论、文化和精神——并且随着时间的推移不断变化。尽管已经有数百万开源项目取得成功,但也有同样多(也可能更多)的开源项目没有成功,因此没有一种固定的正确方法——这就是本书的重点!

本章涵盖以下主‍题:

什么是开‍源;

开源简‍史;

运用开‍源;

开源项目及开源的原‍因。

我认为,要理解一个主题,就必须了解它的起源。在本章中,我们将学习什么是开源,它是如何产生的,以及如何开源,同时还会学习一些具体的开源项目来理解它们为什么要开源以及它们被用在什么地‍方。

1.1 什么是开源

维基百科对开源的定义如下:

开源是指源代码可以自由提供给他人进行修改和再分发。开源产品通常允许你使用源代码、设计文档或产品内容。开源模式是一种去中心化的软件开发模式,鼓励开放协‍作。

如果你在以下平台在线搜索开源的定义,你会发现许多不同的版本:

Red Hat;

IBM;

Opensource.com。

虽然定义的具体内容不同,但有一些主题是一致‍的。

第一个主题是自由提供源代码的概念,允许任何人查看、修改并与他人分享源代码。人们对开源的最初认知是它是可以免费获得的软件。然而,现在开源早已更进一步,它不仅免费提供软件(也称为免费软件),还允许用户查看源代码,根据自己的需求对其进行修改,并与他人分‍享。

有一个很好的方式可以描述这个区别,那就是想象你有一辆汽车,引擎盖是密封的。当然,你拥有这辆车并且可以驾驶它,但是如果车坏了怎么办?如果你想升级一个零件怎么办?如果某些零件过时了,需要改变以适应未来需求(例如使用的汽油从标准汽油改为E87汽油)怎么办?密封的引擎盖意味着只有制造商才能更换零部件,而能开启的引擎盖意味着可以由用户来更换。这就是区别所在,正如人们常说的那样,它不是指“免费啤酒”的那种免费,而是指拥有自由或开放的使用‍权。

第二个主题侧重于开放协作,这意味着任何人都可以参与代码的构建。但是在开源领域中并不是所有项目都能做到这一点,许多由单个组织赞助的项目可能对贡献者来说有一些挑战,甚至由单个维护者维护的项目也会遇到一些困难。我经常看到这样的情况,原因要么是维护者不堪重负,没有太多时间投入项目中,要么是项目更像一个概念验证,最终被维护者所抛弃,也可能有时维护者也并不真正想要任何帮助。在后面的章节中讨论治理和发展时,我会更深入地探讨这个问题。但是当我们在本章中讨论什么是开源时,开放协作往往是我们期望的一个关键原‍则。

最后,还有一个去中心化社群的主题。这意味着开源项目真的是全球性的。虽然维护者可能会启动一个项目来解决他们遇到的问题,并吸引一些具有类似目标的人,但许可证模式(任何人都可以自由查看、修改和分享代码)和分发模式(谢谢互联网!)都意味着世界上任何找到并使用此代码的人都是社群的一部分。乍一看,这可能会让人感到畏惧和害怕,但这是开源的最大优点,它是一条跨地区、文化、性别、背景、年龄和能力的连接纽带。再次强调,我们将在后面的章节中深入探讨一个话题,这也通常是项目的一个难点。我们现在可以很容易地将全球的人们联系起来,但这也意味着我们有责任去帮助和支持他‍们。

开放源码促进会一直维护着开源的定义,该定义被视为衡量一段代码或项目是否真正开源的标准定‍义。

从许可证的角度来看,这个定义真正关注开源的概念,对许多人来说,这是开源定义的起点和终点。许可证被认为是开源的基本条件(我们会在第3章专门讨论许可证和知识产权管理)。真正使开源具有变革性的是开放协作和去中心化社群,它能将各种各样的人聚集在一起,共同构建个体无法完成的优秀作品。换句话说,许可证的选择使得建立社群和协作成为可能,这反过来又能够使开源项目获得成‍功。

现在我们已经定义了开源并了解了它的关键部分,下面让我们回顾一下开源是如何走到今天的。在1.2节中,我们将回顾开源的历史,追溯开源的根‍源。

1.2 开源简史

开源作为一个术语可以追溯到1998年2月3日,但其精神和理念可以追溯到几十年前。下面让我们一起回顾一下开源的历‍史。

查看、修改和分享,以及开放协作的概念,可以追溯到互联网和计算机出现之前。这在黑客和创客文化中很常见,两者都根植于工匠精神。数百年来,新的技术和创新都是在彼此分享思想的过程中诞生的,在每个发展阶段中都能看到前人所打下的基础。唯一的挑战就是思想的传播能力,古登堡发明了印刷机,加速了知识的传播,进而开启了文艺复兴时‍代。

协作精神和商业化之间一直存在着一种天然的紧张关系。15世纪和16世纪建立专利制度的初衷是保护发明者,但在许多情况下,这一行为也造成了扼杀开放协作的垄断。一个典型的例子是在汽车领域,George B. Selden成功申请了两冲程发动机的专利。Henry Ford挑战了该专利并获胜,这推动了发动机的创新,并形成了一个协会,使竞争对手可以共享汽车发动机知识(该协会也达成了最早的专利协议之一,成员们同意自由分享专利许可),这使得20世纪初的汽车业繁荣发‍展。

1.2.1 将开源的根源追溯到大型机社群

在计算机领域,开源可以追溯到1955年加利福尼亚州洛杉矶市的一个房间里。国际商业机器公司(International Business Machines Corporation,IBM)发布了被认为是第一台大型计算机的产品——IBM701 电子数据处理机。该机器的早期用户聚集在一起,共同研究如何使用它,彼此分享信息、见解、代码和知识,这与如今开源社群所做的事情非常相似,只是不通过互联网分享,而是通过打孔卡片和磁带。因此,SHARE社群诞生了——以其座右铭SHARE命名,SHARE不是一个缩写,而是他们所做的事‍情。

这些用户的群体会议持续了多年,创建了一个名为SHARE操作系统的共享资源。这种共享文化已经超越了这些共享资源,人们需要一个地方来收集这些代码,不仅是为了共享,还需要一个中央存储库来跟踪它们。1975年,当时在康涅狄格银行信托公司工作的Arnold(Arnie) Casinghino开始收集这些代码,并将其录制到磁带上,分发给任何有需要的人。此外,如果有人想要将某些内容添加到磁带上,可以将其发送给Arnie,内容经过审查后会被添加进去。我们可以称之为开源项目的早期示例,其中包括维护者(Arnie)、开放协作和去中心化社群。有趣的是,这个项目至今仍在进行中;Arnie早已退休,但大型机社群的其他人已经接手维护这个磁带了。现在可以通过互联网下载磁带内容,你也可以邮寄几美元给维护者,之后他们会给你寄一盘磁‍带。

在20世纪50年代和60年代,随着计算机技术的兴起,以及在学术界的应用,开放协作和去中心化社群成为常态。与此同时,随着计算机变得更加复杂,为这些计算机开发软件的成本也在增加。正是在这个时候,我们看到了软件公司的诞生,它们与IBM等硬件制造商的意见产生了分歧,后者免费将软件与硬件捆绑在一起,因为它们认为这是销售硬件的必要条件。美国政府对此有不同的看法,于1969年对IBM提起了反垄断诉讼。尽管该案最终在1982年被撤回,但它促使IBM将软件从硬件中分离出来,这对软件公司来说是一个福音。该过程得到了美国新科技应用版权著作委员会的帮助,该委员会在1974年认定软件是受版权保护的,在后来的苹果诉富兰克林案中,则认为目标代码是受版权保护的,就像文学书籍一样。由此,自由、公共领域和可共享软件的想法似乎已经成为过‍去。

1.2.2 自由软件的出现

20世纪70年代末到80年代初,布告栏系统(Bulletin Board System,BBS)开始兴起。爱好者们当时能够在家中使用计算机并相互分享软件,就像20世纪50年代和60年代那样。这个时期有两个人非常重‍要。

其中一个人是Richard Stallman,他于1983年启动了GNU项目,旨在编写一个完整的、不受软件公司源代码许可限制的操作系统。最值得注意的是,项目包括以下内容:

GNU编译器套件(GNU Compiler Collection,GCC);

GNU调试器;

GNU Emacs。

该项目直到今天都非常受欢迎。这也开启了最早的开源许可证之一——GNU通用公共许可证,它非常符合Stallman创建软件共同体的理想。随着时间的推移,Stallman一直直言不讳,有时甚至在自由和开源软件领域引起争议,因为他倾向于更自由的软件方法(意味着许可证应确保代码和衍生作品仍然是自由软件),而不是更宽松的许可证方法。

另一个人是Linus Torvalds,他在1991年发布了一个名为Linux的UNIX克隆版本。Stallman的工作为如今的开源项目奠定了基础,而Linus的工作则将开源和自由软件带入了主流。Linux还为像Red Hat和SUSE这样的Linux发行版提供商,推出商业应用的IBM、Sun和Oracle,以及今天的云和基础架构供应商,如VMware、亚马逊、谷歌(Google)、微软等,带来了价值数十亿美元的收入流和经济发展。Linux的独特之处在于,除了商业应用和成功,业余爱好者和技术爱好者社群也同样强大;Debian Linux和Slackware是早期的发行版,但至今仍拥有庞大的用户‍群。

1.2.3 开源作为一个术语被创造出来

1997年,自由软件的主要影响者之一Eric Raymond写了一篇文章《大教堂和集市》(“The Cathedral and the Bazaar”),讲述了他作为早期自由软件项目维护者的经历以及他对Linux社群的观察。这是早期的关于业余爱好者和黑客文化及精神的文献之一,描述了当时两种自由软件的开发模式。其中一种模式被称为“大教堂”,软件在闭门开发后公开发布(如各种GNU项目)。另一种模式被称为“集市”,软件是在公众视野中通过互联网(当时仍然是一个新概念)公开开发的(如Linux社群的模式)。本书将深入探讨我从这篇文章中获得的见解和经‍验。

从历史的角度来看,开源被认为是促进网景通信公司在1998年1月发布Netsuite Communicator源代码并启动Mozilla项目的推动力。如今,公司发布其商业产品的开源版本是司空见惯的。然而,在那时,这一行为吸引了科技界的目光(这在第一次浏览器战争期间也发生过,因此还有其他吸引人的因素)。参与这些早期开发项目的人认识到他们有机会发起一个更大的运动,他们希望将开源的精神和做法在20世纪80年代的自由软件运动中推广开来,让更多人接受与使‍用。

1998年2月3日,Todd Anderson、Chris Peterson(来自前瞻协会)、John“maddog”Hall和Larry Augustin(均来自Linux International)、Sam Ockman(来自硅谷Linux用户组)和Eric Raymond参加了在帕洛阿尔托举行的一次会议。该会议致力于将自由软件运动与自由软件区别开来,并且更加包容商业软件供应商——自由软件运动的精神和许可被认为是不友好的,并且有些人对自由软件的商业用途怀有敌意。在头脑风暴和讨论过程中,Chris Peterson提出将这种区别于自由软件的新型软件称为开源的想法,并且参加会议的每个人都一致同意这个想法,至此开源正式诞生‍了。

1.2.4 为开源提供一个供应商中立的家园

1994年和1995年,当Linux开始在商业领域取得一些初步进展时,一些公司试图注册Linux这个术语的商标。Linus尽其所能与他们抗争,并最终获得了Linux的商标。随后,Linus与Linux International达成合作,使该组织成为持有Linux商标的机‍构。

这引发了一个重要的问题——开源项目如何得到最好的法律保护?我们将在第3章深入探讨这个话题,简单来说,就是让一些非营利实体(基金会)来帮助这些项目保管商标(在某些情况下,还包括版权持有者)。这些基金会的初衷是为商标、版权和其他关键法律资产提供信托管理,但随着时间的推移,它们逐渐发展为为这些项目提供专业服务,包括但不限于开发和协作基础设施、市场推广和外联支持、筹款和活动管‍理。

Apache软件基金会(Apache Software Foundation,ASF)是早期的开源基金会之一,它成立于1999年,是一个依据US 501(c)(3)标准成立的慈善组织。Apache软件基金会采用了接受企业和个人捐赠与赞助的资金模式,为项目提供法律支持,以及开发和沟通基础设施。ASF 的成功主要依靠志愿者的努力,并且引入了一项重大创新,即阿帕奇之道(Apache Way),它为托管项目制定了一个清晰的治理模式,该模式是根据20世纪90年代更具Bazaar风格的开源项目的经验而建立的。很快,许多其他重要的开源项目也开始成立基金会,包括GNOME、KDE、Eclipse,以及围绕新开源的Netscape Communicator源代码成立的Mozilla基金‍会。

在接下来的几年里,人们认识到这些基金会的许多功能是重叠的,通过建立联合基础设施可以提升效率和节约成本。这就是Linux基金会通过创建基础基金会模型进行创新的地方,该模式也催生了一些关键的基金会,如云原生计算基金会(Cloud Native Computing Foundation,CNCF)。除了CNCF,Linux基金会支持了一些较小的基金会(如Academy Software Foundation、Hyperledger、LF Energy、Open Mainframe Project等),为其提供顶尖的专业人员支持,以更高的效率支持不断增长的社群,同时减少了人员开销,这样可以将节省下来的资金投入社群本身。

了解了开源的历史后,下面让我们探讨一下开源的使用方‍式。

1.3 运用开源

开源有着漫长而曲折的历史,它的发展主要是由对技术充满热情的爱好者推动的,随着时间的推移,商业投资也逐渐融入开源,而这些开源社群则始终保持了其原有的理‍念。

经过多年的努力,人们尝试了许多成功和不太成功的开源模式。开源的概念不仅应用在计算机领域,还应用到了拼布图案、家酿啤酒、基因组模式研究等领域。通过大众的努力,我们发现了一些成功应用开源的模式,下面让我们来看看这些模‍式。

1.3.1 爱好者之间的信息分享

我们看到的最早的(也可以说是最普遍的)开源应用只是能够与他人分享信息和知识,以解决共同的问题。这通常是开源的基本动机,与开源基于黑客和创客文化的历史精‍神相契合。

信息分享的形式有很多种。虽然在开源领域中,我们通常会想到代码,但实际上,也可以通过设计、工具或流程的文档、图表、数据集以及其他类型的媒介进行分享。我将在第3章中介绍许可证在这些非代码环境中的运作方式,但是要知道,几乎每种类型的工作和社群都期望有相应的许可证存‍在。

一些专注于信息分享的开源项目包括以下4个。

Ubertooth:该项目构建了一个用于蓝牙实验的开源无线开发平台。该项目不仅构建了硬件的软件堆栈,也开源了硬件的设计图,供其他人构建实际的硬件(并培养了一个独立社群,提供硬件套件以及完全组装好的无线接收器)。

PiFire:该项目为烟熏炉或烧烤炉提供了一个支持无线网络的智能控制器,包括基于Raspberry PI平台的软件设计和硬件设‍计。

SecurityExplained:该项目专注于为软件安全社群提供各种信息。

Darwin Core:该项目是一个由Darwin Core维护兴趣小组维护的标准,标准中包括一个术语表,旨在促进生物多样性信息的分‍享。

“Awesome列表”是社群合作的一种方式,它们汇集了特定主题领域内的一些最佳资源。我知道的一些很棒的“Awesome列表”如‍下。

Awesome 3D Printing:为3D打印的爱好者提供各种链接和资‍源。

Awesome Interviews(工作面试问题列表):可以帮助求职者更好地准备工作面试,同时也让面试官能够更好地筛选和评估申请各类职位的人‍才。

与编程语言和框架相关的“Awesome列表”也有很多,如NodeJS、Erlang和极简框‍架。

1.3.2 基础技术

在基础技术中,有一个概念被称为UNIX方式或UNIX哲学,它描述了一种最小化和模块化的软件编写方法,这种方法是由Douglas Mcllroy和Peter H.Salus等人最先阐述的,并在Ken Thompson和Dennis Ritchie的著作中被进一步推广。虽然对于UNIX方式有多种解释,但基本上可以归结为一个核心概念:专心做好一件事。因为开源软件社群成员大多有 UNIX 背景,所以开源项目也秉承了这一理念。我们所依赖的Linux和其他UNIX派生系统中的许多基本命令行工具的设计都遵循了这一原则,如以下3个工‍具。

grep:一个命令行工具,用于在纯文本数据集中搜索匹配正则表达式的‍行。

sed:代表流编辑器,用于解析和转换文‍本。

cat:该工具用于从一个程序中获取输出并写入标准输出,以便作为另一个程序的输入。

现代软件具有多层库和框架,可以构建完整的解决方案,并且这些库和框架都是以同样的极简主义和以集成为中心的思维构建的。以下是我们经常看到的一些开源项‍目。

安卓项目:构建了一个底层操作系统,截至2021年,支持超过30亿台活跃设‍备。

Ruby on Rails:推广了Model-View-Controller(MVC)的Web开发方法,这对Web开发产生了重大影响,截至2022年,全球有超过120万个网站使用该框‍架。

Pandoc:文档转换工具中的“瑞士军刀”,支持将文档转换为几十种不同的格式(在本书的创作中非常有用)。

Memcached:这是一个分布式的高性能键值存储系统,可以通过减少访问数据不经常变化的数据库的方式来加速Web应用程‍序。

你会注意到这些项目主要是开发者工具,这不是巧合。开源大大降低了构建软件的成本,更重要的是,开源也使高质量的工具、编程语言和框架变得更容易获取,这帮助许多Web 2.0时代的公司成功启动,如Google、Meta、Netflix(网飞)等数百家公‍司。

1.3.3 构建技术生态系统

有一些项目属于前面的基础技术类别,但开源项目的形成和动机在本质上与构建生态系统更相关。换句话说,构建这些项目的目的是,使得无论是开源解决方案,还是商业解决方案,都能够具有一定的兼容性和技能适配性。这背后有多种原因,例如在行业水平或垂直市场上建立标准,探索新的技术领域,或者整合竞争性解决方案。在这些解决方案中,投资会被集中在更高层次的栈上,而这个层次的技术已经变得商品‍化。

我们将在第4章中深入探讨通过开源构建技术生态系统的内容。以下是一些属于此类别的项‍目。

Kubernetes:这是一个开源系统,用于自动化部署、扩展和管理容器化应用程序。它针对Kubernetes的解决方案构建了Kubernetes认证计划,目前拥有超过130种产品,同时Kubernetes认证服务提供商计划也已经有250多家供应商提供支持和服务。这些项目由Kubernetes社群构建并由CNCF工作人员管‍理。

Anuket Assured:这是一个开源的、社群主导的合规性和验证项目,用于展示商业云原生、虚拟化产品和服务的准备情况和可用性,包括NFVI、云原生基础设施、VNF和CNF,它们使用了Anuket和ONAP组‍件。

The Zowe Conformance Program:该项目建立了与Zowe开源项目构建或集成解决方案之间的互操作性需求。同样,这是一个由社群构建的项目,并由开放大型机项目工作人员管理,截至 2022年,已经提供了70多种独特的解决方案和服务产‍品。

需要注意的一点是,虽然这些项目旨在构建技术生态系统,但它们对开源许可证和代码仓库的重用没有影响。真正确立代码重用和其他实现规则的是许可证的条款。这些项目纯粹是为了提供一个供应商中立和社群运营的程序,以识别和认可各种实现。

1.3.4 提供高质量的免费软件

虽然我们中的许多人都很幸运地出生或生活在一个能够轻松购买和获取软件的环境中,但并非所有人都如此。即使对于富裕地区的人来说,某些软件的高成本也会让人望而却步。想象一家创业公司,可能会努力控制成本,或者一个学校,可能需要成百上千份软件副本。但免费软件使得这个本来无法实现的目标成为可‍能。

然而,同等重要的一个方面是自由,并不仅仅是指“免费啤酒”的那种免费,而是指拥有自由或开放的使用权。拥有高质量的软件,用户就可以根据自己的需求和工作流程修改软件,或者可能在上游项目停滞不前时保持更新,这是自由软件运动的核心原则之‍一。

Linux发行版,如Debian、Fedora、Ubuntu、ArchLinux等,为免费桌面环境铺平了道路,让用户在使用计算机时更加灵活;在许多情况下,这也让使用现代软件重用过时的硬件成为可能,这在那些难以获得现代硬件的地区很有价值。此外,我们还看到大多数主要的桌面应用程序都有活跃的开源替代品,以下仅是一小部分。

LibreOffice:该应用程序提供了一个与Microsoft Office相当的完整办公套‍件。

GNU图像操作程序(GNU Image Manipulation Program,GIMP):该应用程序的图像编辑和操作类似于Adobe Photoshop。

Inkscape:这是一个开源矢量图形编辑器,很像Adobe Illustrator。

Mozilla Firefox:它源于1998年Netsuite Communicator的开源版本,提供了一个先进且安全的网络浏览‍器。

这个列表还在不断增长,当我们谈论开源软件时,都会认为它是一个被更广泛认可的领域。这也是社群增长不仅仅是开发者增长的一个例子;在上述列表中,你可以看到经验丰富的项目经理、用户界面专家以及具有特定领域知识和专业能力的个人汇聚在一起,共同构建用于专业环境的高质量软‍件。

现在我们已经了解了开源是如何实现的,下面让我们看一些项目,并了解他们选择开源的动‍机。

1.4 开源项目及开源的原因

既然我已经解释了开源的基本内容(what)及其历史根源和开源的方式(how),为了完成黄金圈(why-how-what)的解析,现在我们来看看为什么要开源(why)。

我听说SUSE的Alan Clark曾经将开源描述为“根本上是为自己挠痒的模式”,这意味着参与开源与参与者的动机息息相关。可以想象,这使得开源项目的管理变得具有挑战性(这是我们将在第5章中深入探讨的另一个主题,涵盖治理模式、引入新的贡献者以及将贡献者发展为维护者的方法)。尽管如此,这也使得回答“为什么要开源”这个问题没有一个明确、通用的答‍案。

要了解为什么要开源,最佳方式是查看一些项目并了解这些社群的动机。让我们来看一些项目,希望能让你了解开源项目的价值和动‍机。

1.4.1 PHP

如果你在20世纪90年代做过任何类型的Web开发,你一定会熟悉CGI脚本的概念(cgi-bin目录万岁!)。网页大多是静态的,任何交互,如发送表单,都需要一个CGI脚本在后端进行处理。大多数脚本是用Perl编写的,还有一些是用C编写的可执行二进制文件。是的,那时的Web更加简单!

Rasmus Lerdorf在滑铁卢大学读书时,为了维护自己的个人主页而写了很多相关的脚本。他将自己的实现作为个人主页/表单解释器(PHP/FI)发布。随着时间的推移,这些脚本不断扩充,并在Zeev Suraski和Andi Gutmans的帮助下,被重写与重命名,形成了一个首字母缩写词“PHP:Hypertext Preprocessor”(这是开源早期维护者在命名项目时极具幽默感的众多例子之一)。作为一个项目,这是Web开发的一个巨大转变,即从单独的表单处理网页上显示内容,到能够将数据库调用和复杂逻辑等直接嵌入正在处理的网页‍中。

这也让交互式网页更易于构建,使任何具备基本编程技能的人都能够构建网页应用程序(尽管PHP通常以使用所谓的“意大利面条代码”构建网页应用程序,但这可以被视为一种进步的代价)。

关于PHP,我发现另一件有趣的事情是,Lerdorf谦虚地承认他在开始使用PHP/FI时从未打算创建一种编程语言。我也听过他的访谈,他表示自己感觉作为单一维护者很有压力,因为许多人向他请求添加新功能或寻求帮助以使其正常运行。今天的开源项目维护者也面临着同样的压力,在第9章中我将进一步探讨该问‍题。

1.4.2 Blender

计算机图形学和其他交互式显示技术是开源的强势领域之一。事实上,你今天看到的大多数电影或玩的大多数视频游戏都有开源的基‍础。

Ton Roosendaal是一位荷兰艺术总监和自学成才的软件开发者,他于1989年创立了自己的3D动画工作室NeoGeo。他编写了一个软件工具Blender,其组合了各种脚本和工具,用于构建3D作品和视觉艺术。Blender专门面向所谓的创意人群,Roosendaal理解他们在按照客户的复杂要求快速更改3D项目时所面临的困难。接下来的几年里Blender被转手多次,直到2002年,Roosendaal成立了Blender基金会,并将代码发布在GNU通用公共许可证下,以确保创意人群永远可以使用该软件。迄今为止,Blender被广泛应用于特效和视觉特效工作流程,以及其他进行3D模型动画开发的人群‍中。

Blender备受关注的原因非常简单——它是为创意人士创建的工具,并由他们共同构建。Blender的有趣之处在于它的模式,虽然有一个基金会赞助并管理项目自身的运营工作,并雇有一小部分员工,但绝大部分的开发工作都由世界各地的志愿者完成。在第5章中,当我谈论开源项目的治理模式时,将会更深入地探讨这一模‍式。

1.4.3 Zowe

大型机社群中有一个笑话,即今天被认为是非常新颖的每一项技术,早在几十年前就由大型机实现了。例如,虚拟化技术在1972年由IBM System/370首次引入,但直到21世纪初期才由VMware普及。正如我在本章前面讨论的,开源很大程度上都源于早期的大型机操作员和开发者。正如人们常说的,新的就是旧的!

大型机社群面临的一个挑战是,与大型机应用程序和数据进行交互的技术,与现代开发者习惯使用的技术截然不同。在2018年,开发者可能会使用Java、Node.js或Python来构建应用程序或集成各种应用程序,而大型机应用程序通常是基于几十年前的COBOL或FORTRAN代码构建的。一些接口可能使用描述性状态迁移(Representational State Transfer,REST),但其他接口可能是自定义编码的,或与IBM 3270终端交互。这在依赖大型机的组织中造成了分歧,分离了两组人员,其中一组人员维护大型机环境,而另一组人员则负责维护其他IT基础设‍施。

Zowe是由CA Technologies(2019年被Broadcom收购)、IBM和Rocket Software共同创立的项目,最初的代码贡献来自这些公司。Zowe提供了一个框架,用于将大型机应用程序和数据与其他应用程序和工具集成,该框架采用了更常见于非大型机开发者的开发工具和方法。Zowe的动机有两个方面:一方面,是因为他们需要不同的团队和方法来处理大型机应用程序和数据,这与他们处理其他计算机系统时完全不同;另一方面,是因为存在着不断增长的技能差距,即在大型机行业取得成功所需的技能与为其他系统开发软件所需的技能有很大的差‍别。

企业启动的开源项目通常会有一个学习曲线,因为他们需要适应开源的方法论。虽然最初的参与者对开源不太熟悉,但这个项目可能已经开始拥抱开源模式。我也经常在垂直行业项目中看到这种情况,我们将在后面的章节中深入探讨这个话题,就是如何让你的组织启动一个开源项目。

1.4.4 PiSCSI

我成长在一个苹果Macintosh计算机在学校中随处可见的时代。这些计算机在当时是非常先进的,不仅因为它们的性能好,还因为它们的标志性设计。有一个狂热的爱好者社群围绕着这些米色和铂金色的机器,他们费尽心思地修复这些机器,以保存计算机历史的重要部分。我恰好是其中一员,目前正在修复一台1990年左右生产的苹果Macintosh IIsi,如图1.1所‍示。

图1.1 我的Macintosh IIsi

苹果Macintosh计算机和一些其他品牌的计算机使用的硬盘驱动器采用了当时流行的小型计算机系统接口(Small Computer System Interface,SCSI)。几十年来,硬盘驱动器的容量不仅从当时的20 MB或40 MB增加到今天的1 TB,而且接口也从SCSI发展为并行ATA,现在是串行ATA,这意味着很难找到超过30年历史的替代硬盘驱动器。一位名为GIMONS的开发者为夏普X68000计算机构建了一个名为RaSCSI的解决方案,它可以使用SD卡和专门的适配器连接到树莓派,以取代SCSI硬盘驱动器。一群爱好者将该方法应用到其他计算机项目中,采用SCSI硬盘驱动器,并建立了PiSCSI项目。该项目旨在在已有工作的基础上进行扩展,并添加其他功能,如模拟以太网接口、为可以使用Web界面管理的计算机提供多个磁盘映像,以及其他有用功能,保证即使硬盘驱动器故障,这些计算机仍然可以使‍用。

这是一个由爱好者组成的社群试图解决共同问题的绝佳示例。通过使用常见的、低成本的组件来模拟SCSI硬盘驱动器,经过一段时间的发展,这个社群逐渐满足了这些爱好者在将老式计算机连接到现代网络方面的更多需求。它提供了专为树莓派运行的软件以及构建所需的自定义硬件的图表(如果不想那么麻烦,你还可以购买装配或完全构建的设备套件)。这一切都是以开源的方式进行的,开源有助于将这个庞大的社群聚集在一起,以改进并提供反馈,创造出每个人都可以受益的公共资‍源。

1.5 小结

开源是由许多不同动机和不同背景的热情爱好者推动的,他们有一个共同点,那就是倡导自由地与他人分享代码和知识,通过去中心化社群进行开放协作。开源建立在数十年协作精神的基础上,旨在通过共享信息推动人类进步。有人将开源描述为新文艺复兴时代的到来,这让人回想起大量推动社会进步的知识和创新的涌现。如果回顾过去三四十年,我们真的可以看到科技方面的进步让我们的社会有了很大的发展(当然,这也带来了新问题,但这是进步的结果,我们能够看到社会在不断做出回应并逐渐纠正这些问题)。

本章旨在为你提供关于开源的基础知识,让你了解什么是开源以及为什么要开源。下面我们将探讨一个重要主题:一个好的开源项目应该具备哪些特‍点。

相关图书

Joy RL:强化学习实践教程
Joy RL:强化学习实践教程
计算机组成原理(基于x86-64架构)
计算机组成原理(基于x86-64架构)
成为GPT高手
成为GPT高手
DeepSeek极速上手 :高效做事不内耗
DeepSeek极速上手 :高效做事不内耗
高并发系统:设计原理与实践
高并发系统:设计原理与实践
AI设计:Midjourney绘画设计教程
AI设计:Midjourney绘画设计教程

相关文章

相关课程