开源软件是指以允许用户使用、研究、修改和再分发的许可证提供源代码的软件。其核心特征不仅在于代码可公开获取,更在于随代码一并授予的各项权限。开放源代码促进会(OSI)负责维护广泛采用的开源定义,其中规定了许可证被认定为开源许可证所须符合的标准。开源软件可以由多人协作开发,也可以由单个组织开发;既可以商业形式提供,也可以免费提供。(opensource.org)
定义与界限
《开源定义》要求提供最适合修改程序的代码形式,允许创建和分发衍生作品,并保障自由再分发软件的权利。许可证不得歧视任何个人、群体或活动领域,因此不能排除商业用途。许可证还必须保持技术中立,不能要求与该程序一同分发的无关软件采用相同的许可证。(opensource.org)
这些要求将开源软件与源码可用软件区分开来:后者的代码虽然可供查看,但其许可证可能限制修改、再分发或某些特定用途。开源软件也不同于免费软件,后者只表示无需付费即可获得的软件,并不一定授予获取源代码或修改软件的权利。代码仓库可供公众查看,本身并不意味着已授予开源权限。(opensource.org)
自由软件与开源软件在很大程度上重叠。自由软件基金会通过四项自由来定义自由软件:为任何目的运行程序的自由、研究和修改程序的自由、再分发副本的自由,以及分发修改版本的自由。这两种术语体现了不同的侧重点:自由软件运动将用户自由置于首位,而“开源”这一名称在历史上更强调实际协作和推广应用。“自由与开源软件”(缩写为 FOSS)涵盖了这两种传统。(gnu.org)
历史发展
软件共享与协作改进的实践早于“开源”这一说法。其中一项重要的组织性进展是GNU 计划。该计划于 1984 年 1 月开始实施,目标是开发一个自由的操作系统。其工作为开发和分发保障用户自由的软件建立了延续至今的框架。(gnu.org)
在网景公司宣布将发布浏览器源代码之后,1998 年 2 月 3 日于美国加利福尼亚州帕洛阿尔托举行的一次会议上,有人提出了“开源”这一名称。OSI 于同月稍后成立。其定义改编自 Debian 于 1997 年采纳的Debian 自由软件指导方针,删去了仅针对该发行版的表述。因此,这一新术语承接的是已有的许可框架,而非从无到有地开创软件共享。(opensource.org)
许可模式
开源许可在著作权制度内运作,并不必然意味着放弃著作权。作者或其他权利人在保留权利归属的同时,授予特定权限。许可证条件可能包括保留署名、附上许可证声明,或在分发许可证所涵盖的软件时提供源代码。不同许可证规定的义务也各不相同。(gnu.org)
通常可将开源许可证分为两大类:
- **宽松许可证**允许将其涵盖的代码纳入按其他条款分发的软件,包括采用专有条款的软件,但须遵守署名等条件。例子包括MIT 许可证、BSD 许可证和Apache 许可证。Apache 许可证 2.0 还包含明确的专利许可条款。(opensource.org)
- **著佐权许可证**要求其涵盖的衍生作品在分发时保留指定的自由。GNU 通用公共许可证(GPL)是其中的代表。著佐权通常不要求公开每一项私下进行的修改;仅仅将相互独立的程序一同分发,也不会自动使它们全部受同一许可证约束。(gnu.org)
GNU Affero 通用公共许可证将源代码共享要求扩展到通过网络使用修改版软件的某些情形。因此,以服务形式运行的软件,可能涉及与以副本形式交付的软件不同的许可问题。获准使用代码,也不自动意味着获准使用原项目的商标或品牌标识。(opensource.org)
开发与治理
协作项目通常围绕代码仓库、问题报告、修改提案、测试和维护者审查来组织工作。贡献不仅限于编程,还包括软件文档编写、翻译、测试和缺陷报告。贡献指南会规定代码规范、审查要求、沟通渠道和问题报告流程。代码公开可用,并不意味着维护者有义务接受所有修改提案。(docs.github.com)
分叉是从现有项目衍生出来、独立开发的版本。开源许可授予的权限使这种开发能够在适用许可证的约束下进行。一些项目还使用贡献者协议,以明确其分发所提交材料的权利;这些协议与规范软件接收者如何使用软件的许可证并不相同。(opensource.org)
商业与安全
开源与商业活动并不矛盾。企业可以销售软件副本、定制开发、维护、支持、质保及其他服务。接收者仍享有许可证授予的再分发权,因此,对交付收费不会使相关软件变成专有软件。收入安排与许可权限是产品的两个不同方面。(opensource.org)
源代码可用意味着可以检查代码,但并不能证明软件安全。网络安全取决于开发实践、审查、维护和漏洞管理。OpenSSF 的安全工具通过安全控制措施和自动化检查来评估项目,而不是将开源许可证视为安全性的证据。依赖项同样重要:第三方组件中的漏洞可能影响使用这些组件的软件,而过时的依赖项可能仍包含已知缺陷。(baseline.openssf.org)