用开源不等于随便用

开源代码免费、好用,但「免费」不代表「没有规矩」。每个开源项目都带着一份许可证,它本质是作者给你的一份使用许可:你能用来做什么、要不要保留版权声明、改了之后要不要开源。很多团队上线前都没读过它,埋下了合规隐患。

开源许可证是作者和使用者之间的约定,用之前读一遍,是对别人也是对自己负责。

踩坑的代价往往不小:轻则要重新替换依赖,重则被要求公开整个产品源码。下面就把常见许可证分清楚。

许可证最该先看的三件事
  • 能否商用大多数都允许,但要看清。
  • 是否要开源有些许可证会传染你的代码。
  • 署名义务通常要求保留原版权声明。

宽松型:MIT 与 Apache

最常见也最省心的是宽松型许可证。MIT 极其简短:你几乎可以随便用、改、商用,只要在分发时保留原作者的版权声明。Apache 类似宽松,但多了一条专利授权条款,对企业更友好,能避免日后的专利纠纷。

这两类是绝大多数开源项目的选择,做闭源商业产品也基本不用担心。下面这段小表是它们的特点。

# 宽松型许可证
PERMISSIVE = {
    "MIT": "几乎随便用,保留版权声明即可",
    "Apache": "宽松 + 额外的专利授权保护",
}

def show():
    for k, v in PERMISSIVE.items():
        print(f"{k}:{v}")

show()
发光蓝色盾牌上摊开抽象文书卷轴、旁边悬浮打勾印章与天平轮廓的扁平插画
宽松许可证像一份大方的授权书:用得自由,只需记得署名。

传染型:GPL 系要小心

和宽松型相对的,是带「传染」性质的 GPL 系许可证。它的核心要求是:如果你用了 GPL 的代码、又把整个产品对外分发,那么你的整个相关代码通常也得按同样的许可证开源。这对想做闭源商业产品的团队来说,是个需要非常谨慎的红线。

不是说 GPL 不能用,而是要用在合适的地方。下面这段小清单是判断要点。

  • 做闭源商用产品时,慎用强传染型依赖。
  • 以独立进程方式调用,往往比直接链接更安全。
  • 拿不准时,找公司里熟悉开源合规的人确认。

许可证没有对错,关键是你的产品模式和它匹不匹配。

依赖里藏着的许可证

真正麻烦的,往往不是你直接用的那个库,而是它一层套一层的依赖。你引入一个库,可能顺带拉进来十几个你从没听过的包,每个都有自己的许可证。人工一个个翻根本不现实,好在有工具可以自动扫描。

下面这段小脚本是依赖扫描要关注的几项。

# 依赖许可证扫描关注点
SCAN = [
    "列出所有直接与间接依赖的许可证",
    "标记可能有传染风险的包",
    "检查是否有该保留的版权声明",
]

def scan():
    for s in SCAN:
        print("-", s)

scan()

把这件事自动化,比靠人肉记忆靠谱得多。