开源软件的一个简单、通俗的定义是,其源代码可以自由地向公众开放,任何人都可以修改和重新发布,而不受约束或后果。一个名为开放源代码促进会(OSI;https://opensource.org)的官方组织成立于1998年,以官方身份组织开源软件运动,它提供了一个非常清晰易懂的开源定义。在写这本书的过程中,我获得了OSI董事会的许可,将其包含在此。
开源不仅仅意味着访问源代码。开源软件的发布条款必须符合以下标准:
许可证不得限制任何一方出售或赠送软件作为包含来自多个不同来源的程序的聚合软件发行版的一个组成部分。许可证不得要求对此类销售收取特许权使用费或其他费用。
程序必须包括源代码,并且必须允许以源代码和编译形式进行分发。如果某种形式的产品不随源代码一起分发,则必须有一种广为人知的方式,以不超过合理的复制成本获得源代码;最好是通过互联网免费下载。源代码必须是程序员修改程序的首选形式。不允许使用故意混淆的源代码。不允许使用预处理器或转换器的输出等中间形式。
许可证必须允许修改和衍生作品,并且必须允许它们在与原始软件许可证相同的条款下分发。
许可证可能会限制修改后的源代码被分发,只有在许可证允许分发""补丁文件""和源代码,以便在构建时修改程序。许可证必须明确允许分发从修改后的源代码构建的软件。许可证可能要求衍生作品使用与原始软件不同的名称或版本号。
许可证不得歧视任何个人或群体。
许可证不得限制任何人在特定领域使用该程序。例如,它不得限制该程序在企业中使用,或用于基因研究。
附加到程序的权利必须适用于所有重新分发程序的人,而无需这些人执行额外的许可证。
附加到程序的权利不得取决于该程序是特定软件发行版的一部分。如果程序从该发行版中提取出来,并在程序许可证的条款范围内使用或分发,则程序重新分发给的所有各方都应享有与原始软件发行版一起授予的相同权利。
许可证不得对与许可软件一起分发的其他软件施加限制。例如,许可证不得坚持在同一介质上分发的所有其他程序都必须是开源软件。