强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

开源协议精讲 / 第七章:双重授权与商业许可

第七章:双重授权与商业许可

引言

双重授权(Dual Licensing)是一种商业模式,允许开源项目同时提供两种或多种许可证——通常是开源许可证(如 GPL)和商业许可证。这种模式既保障了开源社区的自由,又为版权持有者创造了商业收入。

MySQL、Qt、MongoDB、Redis 等知名项目都曾或正在使用双重授权模式。


7.1 双重授权的概念

7.1.1 什么是双重授权?

双重授权是指版权持有者将同一软件以两种不同许可证发布:

软件 X
├── 开源版本(如 GPL)→ 免费,但有传染性
└── 商业版本(如 Proprietary License)→ 付费,无传染性

用户选择:

用户类型选择原因
开源项目GPL免费使用,接受 GPL 传染
商业闭源项目商业许可付费使用,避免 GPL 传染

7.1.2 双重授权的商业逻辑

┌─────────────────────────────────────────────────────┐
│                 双重授权的商业逻辑                     │
├─────────────────────────────────────────────────────┤
│                                                       │
│  开源社区 ──→ 使用 GPL ──→ 增加用户基础               │
│  │                           │                        │
│  └──→ 贡献代码 ──→ 改进软件 ──┘                       │
│                                                       │
│  商业公司 ──→ 不想接受 GPL ──→ 购买商业许可            │
│  │                                    │                │
│  └──→ 支付许可费 ──→ 支持项目发展 ──┘                │
│                                                       │
└─────────────────────────────────────────────────────┘

7.1.3 前提条件

实施双重授权必须满足:

  1. 版权控制:你必须拥有所有代码的版权(或获得所有贡献者的授权)
  2. CLA(贡献者许可协议):要求贡献者签署 CLA,将版权或许可权转让给项目方
  3. 没有第三方 GPL 代码:如果包含第三方 GPL 代码,不能以商业许可证发布

7.2 经典案例分析

7.2.1 MySQL 模式

MySQL 是双重授权最著名的案例之一。

项目信息
公司MySQL AB(后被 Sun,再被 Oracle 收购)
开源许可证GPL v2
商业许可证MySQL Commercial License
收入来源商业许可 + 技术支持 + 培训

MySQL 模式的运作方式:

场景 1:开源项目使用 MySQL
→ 使用 GPL 版本
→ 免费
→ 自己的代码也必须开源(GPL 传染)

场景 2:商业软件嵌入 MySQL
→ 不想开源自己的代码
→ 购买商业许可证
→ 支付许可费

场景 3:Web 应用使用 MySQL
→ GPL 不影响 SaaS(GPL v2 的"漏洞")
→ 可以免费使用 GPL 版本
→ 不需要购买商业许可

7.2.2 Qt 模式

Qt 是另一个经典的双重授权案例。

项目信息
公司Qt Company(原 Nokia/Qt Development Frameworks)
开源许可证LGPL v3 / GPL v3
商业许可证Qt Commercial License
特点开源版可用于闭源(通过 LGPL)

Qt 的授权策略:

Qt 开发
├── 开源项目 → 使用 LGPL/GPL 版本 → 免费
├── 闭源桌面应用 → 使用 LGPL 版本 → 免费(遵守 LGPL)
├── 闭源嵌入式 → 使用 LGPL 或商业版 → 视情况
└── 需要额外支持/功能 → 使用商业版 → 付费

7.2.3 MongoDB 模式的转变

MongoDB 的授权策略经历了重要转变:

时期许可证变化原因
早期AGPL防止 SaaS 搭便车
2018SSPL云服务商绕过 AGPL
现在SSPL + 商业许可双重授权

SSPL(Server Side Public License):

MongoDB 创建的 SSPL 要求:

如果你将 MongoDB 作为服务提供给第三方,你必须开源整个服务栈(包括管理层、监控、存储等)。

SSPL 不是 OSI 批准的开源许可证,被许多社区视为"非开源"。

7.2.4 Redis 的策略调整

Redis 在 2024 年也进行了许可证调整:

时期许可证
早期BSD
2018SSPL + Apache 2.0(双重许可)
2024RSALv2 + SSPL(双重许可)

7.3 双重授权的法律基础

7.3.1 版权独占性

双重授权的前提是版权持有者拥有独占性版权

版权持有者
├── 可以同时以多种许可证发布
├── 可以随时改变许可证(对新版本)
├── 可以授予他人不同的权利
└── 不受任何单一许可证约束(因为他是版权持有者)

7.3.2 贡献者许可协议(CLA)

为了实施双重授权,必须确保所有贡献者将版权或许可权转让给项目方:

CLA 的两种形式:

形式说明例子
版权转让贡献者将版权完全转让FSF 的 GNU 项目
许可证授予贡献者保留版权,但授予广泛的许可权Apache 基金会

CLA 示例条款:

贡献者特此授予项目方:
1. 不可撤销的、全球性的、免版税的版权许可
2. 以任何许可证(包括商业许可证)再许可的权利
3. 转让以上权利给第三方的权利

7.3.3 双重授权与 GPL 的关系

关键问题:如果一个项目使用 GPL,它还能提供商业许可吗?

答案:可以,但有条件。

情况 1:你是唯一的版权持有者
→ 你可以同时以 GPL 和商业许可证发布
→ 用户可以选择其中一个

情况 2:你和他人共同拥有版权
→ 需要所有版权持有者同意
→ 通常通过 CLA 实现

情况 3:你的代码包含第三方 GPL 代码
→ 你不能以商业许可证发布包含 GPL 代码的部分
→ 但你可以为你的原创部分提供商业许可

7.4 双重授权的商业策略

7.4.1 收入模式

模式说明例子
许可费按使用量或公司规模收费MySQL、Qt
技术支持付费技术支持Red Hat
企业版功能额外的企业功能GitLab、Elastic
托管服务云托管版本MongoDB Atlas
认证培训官方认证Red Hat、LPI

7.4.2 定价策略

定价因素:
├── 公司规模(开发者数量/营收)
├── 使用方式(内部/外部/嵌入式)
├── 支持级别(社区/标准/高级)
├── 功能范围(社区版/企业版)
└── 合同期限(年付/多年)

7.4.3 社区版 vs 企业版

版本特点目标用户
社区版开源、免费、基本功能个人开发者、小公司
企业版商业许可、高级功能、支持大型企业

GitLab 的例子:

GitLab 授权策略(调整后)
├── 社区版(CE)→ MIT + 其他开源许可
├── 企业版(EE)→ 商业许可
└── 核心功能 → 开源
    高级功能 → 商业

7.5 Open Core 模式

7.5.1 什么是 Open Core?

Open Core(开放核心)是双重授权的一种变体:

Open Core 模式
├── 核心功能 → 开源(如 MIT、Apache 2.0)
└── 高级功能 → 商业许可

与传统双重授权的区别:

维度传统双重授权Open Core
代码关系同一代码库不同功能模块
开源版本完整功能核心功能
商业版本无额外功能高级功能
例子MySQLGitLab、Elastic

7.5.2 Open Core 的成功案例

公司开源核心商业扩展
GitLabCI/CD、版本控制安全、合规、分析
ElasticElasticsearchX-Pack 功能
Redis核心数据结构模块、集群管理
Grafana监控仪表板企业告警、数据源
HashiCorpTerraform、Vault企业功能

7.5.3 Open Core 的争议

支持者观点:

  • 创造了可持续的开源商业模式
  • 核心功能仍然开放
  • 企业版收入支持开源开发

反对者观点:

  • “开源诱饵”(Open Bait)策略
  • 企业版功能往往是用户最需要的
  • 社区贡献被商业化利用

7.6 选型指南

7.6.1 何时选择双重授权

适合双重授权的项目:
├── 拥有完整的版权控制(或 CLA)
├── 有明确的商业用户需求
├── 社区足够活跃
├── 竞争对手较少
└── 有持续开发的资源

不适合双重授权的项目:
├── 包含大量第三方 GPL 代码
├── 贡献者众多且未签 CLA
├── 纯工具/库项目
└── 竞争激烈的领域

7.6.2 许可证组合选择

开源许可证商业许可证适用场景
GPLProprietary最大化商业压力
LGPLProprietary中等商业压力
AGPLProprietary防止 SaaS 搭便车
Apache 2.0增值商业版Open Core 模式
MIT企业支持以服务为主要收入

7.6.3 实施步骤

1. 评估版权情况
   └── 是否拥有完整版权?是否需要 CLA?

2. 选择许可证组合
   └── 开源许可证 + 商业许可证

3. 建立 CLA 流程
   └── 使用 CLA 工具(如 CLA Assistant)

4. 制定商业策略
   └── 定价、功能划分、销售渠道

5. 社区沟通
   └── 透明说明授权策略

6. 法律审查
   └── 确保合规

7.7 常见问题

Q1:我可以用 GPL + 商业双重授权吗?

可以,但你必须:

  1. 拥有所有代码的版权
  2. 获得所有贡献者的授权(通过 CLA)
  3. 不包含第三方 GPL 代码(除非你也获得商业许可)

Q2:双重授权违反开源精神吗?

有争议。支持者认为它创造了可持续的商业模式;反对者认为它利用了社区贡献。关键是透明度和公平性。

Q3:SSPL 是开源许可证吗?

不是。SSPL 没有获得 OSI 批准,不满足开源定义(OSD)。使用 SSPL 的项目通常被称为"源码可用"(Source Available)而非"开源"。

Q4:如何从单许可证转向双重授权?

  1. 确保拥有完整版权
  2. 引入 CLA 流程
  3. 新版本以双重授权发布
  4. 旧版本保持原许可证

Q5:CLA 会吓跑贡献者吗?

可能会。一些开发者反对 CLA,认为它不公平地将权利集中于项目方。建议:

  • 使用公平的 CLA 模板
  • 解释 CLA 的必要性
  • 考虑使用 DCO(开发者原产地证书)替代

7.8 本章小结

模式特点适用场景
传统双重授权同一代码,两种许可证数据库、中间件
Open Core核心开源,扩展商业DevOps、监控工具
商业 + 支持免费软件,付费服务Linux 发行版
SaaS 变体云托管收费云数据库、API 服务

扩展阅读

  1. MySQL 许可证:https://www.mysql.com/about/legal/licensing/oem/
  2. Qt 许可证:https://www.qt.io/licensing
  3. MongoDB SSPL:https://www.mongodb.com/licensing/server-side-public-license
  4. CLA Assistant:https://cla-assistant.io/
  5. Developer Certificate of Origin:https://developercertificate.org/
  6. 《Open Source Business Models》:https://www.linuxfoundation.org/

上一章:知识共享协议 下一章:许可证兼容性与冲突