
开源的本质与理念——什么是开源?它与自由软件有何区别?
在这一部分,我们将深入探讨“开源”的概念定义、开源的本质与理念。首先会从开源的确切定义入手,并将其与自由软件进行对比,明确两者之间的联系和区别。此外,我们也将追溯开源运动的历史起源、分析其发展现状以及为什么越来越多的开发者和用户青睐开源软件。
我们将探究开源的核心价值观,例如开放、协作、分享、共赢等,并介绍不同类型的开源许可证及其特点,帮助读者理解如何选择适合自己项目的许可证。最后,我们将讨论开源对软件开发方式和文化的影响,以及如何与充满热情的开源社区成员建立良好关系。
通过阅读这一部分,读者将能够对开源的概念形成更加清晰的认识,并了解其背后的理念和价值观。
第1问:什么是开源?它与自由软件有何区别?
1、开源正变得越来越重要,而自由软件却越来越少被人提起了
开源软件如今可以说已经“席卷全球”,甚至有更加夸张的说法是“软件吞噬世界,开源吞噬软件”。无论我们对开源的理解有多深入,至少我们或多或少都听说过这个词。在几乎所有的IT领域中,从硬件驱动、操作系统,到云计算和大数据,从网站开发到目前最热门的人工智能,从IT自媒体到CCTV的新闻报道,再到企业战略、国家政策,甚至国际政治,我们都能找到关于开源的各种观点和论述。然而,令人遗憾的是,“自由软件”这一概念似乎逐渐被人们遗忘了。
有一种极简叙事的风格大概是这样的:20世纪80年代 ,自由软件(free software)开始出现,到了1998年开源(open source)这个词被提出,再后来自由软件就逐渐没落,不再被人提起了。真的是这样的吗?
作为一个客观事实,自由软件、GNU运动、四大自由之类的说法,的确越来越少被人提起了,背后的原因是什么呢?
2、自由软件与自由软件运动的由来
自由软件运动的起源可以追溯到20世纪80年代早期,由理查德·斯托曼(Richard Stallman)发起,这场运动的核心是对用户自由的追求。但是,斯托曼当时所说的用户和我们现在所理解的用户大不相同。在麻省理工学院(Massachusetts Institute of Technology,MIT)的人工智能实验室工作期间,斯托曼因一台打印机的驱动程序无法修改而受挫,这一事件使他意识到,软件的闭源和限制用户修改的行为是对(像他这样的用户的)自由的剥夺。在他看来,软件应该是开放的,允许用户自由地使用、复制、研究、修改和分发。因此,1983年,斯托曼发起了“GNU计划”,旨在创建一个完全自由的操作系统。
1985年,斯托曼发起成立了自由软件基金会(Free Software Foundation),1986年,在基金会的出版刊物《GNU’s Bulletin》上,他第一次发布了自由软件的定义,在这个定义中,斯托曼描述了软件的四大自由。
你可以按照自己的需求和目的自由运行这个程序(自由0)。
你可以研究程序的工作原理,并进行修改,使它能够按照你的需求进行计算(自由1)。要实现这一点,你需要能够访问程序的源代码。
你可以自由地分发程序的副本,这样你就可以帮助你的邻居或朋友(自由2)。
你可以将你修改后的版本分发给其他人,让他们也能使用改进后的程序(自由3)。这样做可以让整个社区都有机会从你的修改中受益。获取源代码是实现这一点的先决条件。
在自由软件运动中,GNU计划不仅开发了大量基础软件,还创建了GNU通用公共许可证(GNU General Public License,GPL),这是一个革命性的许可证,旨在确保软件的自由性和开放性。著名的Linux内核项目就是采用了GPLv2这样的许可证,并获得了巨大的成功。
随着时间的推移,人们逐渐意识到自由软件运动带来了一些“困扰”。首先,尽管斯托曼一直强调自由软件中的“free”指的是Free Speech(自由表达)而非Free Beer(免费啤酒),但实际上,基于自由软件盈利的难度仍然较大。其次,自由软件运动往往蕴含着强烈的“政治/道德”批判色彩,这让许多务实的、只想专注于编码的程序员感到“有些过于激进”。正是在这种背景下,商业开源与务实编码相遇,从而催生了开源的概念。(详见1.2节。)
3、如何定义“开源”
开源最简单的理解就是:开放源代码,尤其是软件领域的开放源代码。正如前面自由软件所强调的四项自由,软件要能够被任何人查看、使用、修改和分发,就必须开放源代码。
开源软件促进会(Open Source Initiative)在1998年成立之初发布的《The Open Source Definition》(简称OSD)中开篇第一句就明确表示:“开源不仅仅意味着可以访问源代码。开源软件的分发条款必须符合以下标准”。随后在OSD中提出了10条标准,其定义逻辑是:如果符合10条标准的授权协议(License)被一款软件用作分发时的授权条款,那么这款软件就可以算是开源软件。所以,本质上OSD只能说是开源软件授权协议的10条标准,而不是开源的定义。由于开源不断发展,从开源软件发展到开源硬件、开放数据、AI模型、开放文档等[^1] ,再用定义开源软件分发协议的方式来间接定义开源已经不合适了。
在2023年正式发布的团体标准《信息技术 开源 术语与综述》(T/CESA 1269-2023)中是这么定义的:
3.1.2 开源 open source:在软硬件开发、数据与信息共享中广泛采用的开放式协作模式,协作的产出物符合开源许可证(3.1.3)条款的要求。
3.1.3 开源许可证 open source license:一种具有法律效力的格式合同,定义用户(3.4.22)自由使用、修改、复制或分发开源许可作品(3.2.19)的权利和义务。
在笔者参与《信息技术 开源 术语与综述》的标准制定的过程中,的确没有关注到数字公共产品标准(Digital Public Goods Standard)在GitHub上有一个开源标准项目(DPG-Standard)。从2020年9月开始,在联合国指导(认可)下成立的数字公共产品联盟(The Digital Public Goods Alliance),致力于促进符合标准和最佳实践的开源解决方案的发现、开发、使用和投资,这些解决方案与实现可持续发展目标相关。
所以,如果能够继续迭代开源的定义,复用数字公共产品的定义,开源的定义可以表述为:以开放式协作模式,协作生产数字公共产品。关于这两个概念的详细解说,可以参见:1.5节及1.8节。
4、从自由软件到开源软件,不变的部分有哪些,变了的部分又有哪些
说到不变的部分,首先是源代码。开放源码始终是自由软件与开源软件(Free/Libre and Open Source Software,FLOSS)不变的追求。因为有很多软件,既属于自由软件,也属于开源软件,同为自由软件,有些愿意自称Free,有些愿意自称Libre。所以我们可以认为,FLOSS这个词本身就是一个寻求最大公约数的努力。坚持源代码必须开放,让用户能够自由访问、查看和研究甚至修改软件的源代码。这种开放性是自由软件和开源软件的共同基础。
其次是社区,无论是自由软件社区,还是开源社区,都非常强调“开放式协作”,两者都鼓励通过社区协作来推动软件的开发和改进。当然,更进一步地,通过开放式协作来推动各种各样的创新。
最后还有一点就是,他们共同的“敌人”都是专有软件,以及由此而来的封闭与垄断。
至于变了的部分,其实也很明显,首先是用户的范围变化。自由软件的用户是重视自由、隐私和控制权的有开发能力的技术极客;而开源软件的用户则大大扩展,包括开发者、个人用户、企业用户等。
其次是理念和价值观的变化,自由软件运动是一种带有伦理和社会责任感的运动,追求的是更多的自由;而开源则更强调开发模式的优势,如更高效的开发过程、快速的迭代和高质量的代码,关注的是实用性和商业价值,最终实现的是更好的软件。前者(自由)本身就是目的,而后者(开源)只是一种手段。
“对于商业更加友好”,或者按照自由软件运动的支持者的说法“对商业利益的妥协”,引发了开源软件与自由软件的更多差异,包括更加宽松的授权协议、更多商业力量参与的社区与市场推广及更高的市场接受度。
总体而言,开源运动不再像自由软件运动那样只是一小群技术极客的努力,而是商业、投资、教育更多相关利益方都积极参与进来的一场运动,在很多国家,推动开源创新,发展开源生态甚至上升为一种国家战略。这也可以回答我们在最开始的一个疑问:“为何开源正变得越来越重要,而自由软件却越来越少被人提起了?”
转载自 庄表伟 阅读思考与生活 开源的本质与理念——什么是开源?它与自由软件有何区别?


