发布上线前必读
模块 5 · 第 5 节
开源许可协议:不是网上的代码都能随便商用
是什么
开源不等于可以随便用。每个开源项目都有一份许可协议,规定了你能用它做什么、不能做什么。有的允许商用但要求署名,有的要求你把自己的代码也开源,有的干脆禁止商用。不看协议就用,可能会惹上法律麻烦。
解决什么问题
如果以为"开源 = 免费随便用",你可能会在不知情的情况下违反许可协议的条款——轻则被要求下架产品,重则面临法律诉讼。
"开源"不是"随便用"
当 AI 帮你搭建项目时,它会大量使用开源的库和框架。"开源"的意思是这些代码是公开的,任何人都可以查看它的源代码。
但公开可以查看和可以随便使用是两回事。
每一个开源项目都附带着一份许可协议(License),它是作者和使用者之间的一份"契约",规定了你在什么条件下可以使用这些代码。有些协议很宽松,有些则有严格的限制。
忽略许可协议不会让它消失——它只会让你在不知情的情况下可能违反了规定。
常见的许可协议类型
你不需要成为法律专家,但了解几种最常见的许可协议类型,能帮你在大多数情况下做出正确的判断。
MIT 协议
最宽松的协议之一。 你几乎可以用它做任何事——包括商用、修改、分发。唯一的要求是在你的项目中保留原作者的版权声明。绝大多数流行的 JavaScript 库(比如 React、Next.js)都使用 MIT 协议。
Apache 2.0 协议
和 MIT 类似的宽松型协议。 允许商用,要求保留版权声明,并且如果你修改了原始代码,需要标注哪些地方是你改的。它还提供了一些专利方面的保护。
GPL(General Public License)
"传染性"协议。 如果你的项目使用了 GPL 协议的代码,你的整个项目也必须以 GPL 协议开源。这意味着你必须公开自己的源代码,并且允许其他人以同样的方式使用。
对于想要保持代码闭源的商业项目来说,GPL 是一个需要特别谨慎对待的协议。
AGPL(Affero GPL)
比 GPL 更严格。 即使你只是在服务器上运行使用了 AGPL 代码的应用(而不是分发它),你也需要公开你的源代码。对于网络应用来说,这个限制尤其重要。
GPL / AGPL 是「传染性」协议,可能迫使你公开全部源代码
如果你的项目打算商用或保持闭源,遇到 GPL 或 AGPL 协议的依赖时需要格外谨慎。GPL 要求使用其代码的项目也必须以 GPL 开源;AGPL 更进一步——即使你只在服务器上运行而非分发,也必须公开源代码。不确定时,优先寻找使用 MIT、Apache 2.0 等宽松协议的替代品。
"无协议"
如果一段代码没有附带任何许可协议,这不意味着你可以自由使用——恰恰相反。在大多数国家的法律下,没有协议意味着作者保留了所有权利。你在未经许可的情况下使用它,理论上是侵权行为。
没有协议 ≠ 可以随便用
网上搜到的代码片段如果没有任何许可声明,在大多数国家的法律下意味着"作者保留所有权利"。未经许可使用可能构成侵权。在使用前要么联系作者获取授权,要么寻找有明确宽松协议(如 MIT)的替代实现。
AI 生成的代码呢
AI 生成的代码的版权归属在法律上还是一个正在演变的灰色地带。但有一个你需要注意的实际风险:AI 有时会在生成代码时"参考"它训练数据中的开源代码,生成的结果可能和某个开源项目的代码高度相似。
如果那个项目使用的是 GPL 这类传染性协议,那么你使用这段 AI 生成的代码就可能存在合规风险。
这并不是说你要对 AI 生成的每一行代码都做法律审查。但当 AI 给出了一大段看起来非常成熟、结构完整的代码时——尤其是它承认"这是基于某个库的用法"时——值得留意一下那个库的许可协议。
实际操作:怎么检查
查看依赖的许可协议。 你项目中的每个依赖包都会在其发布页面上注明许可协议类型。在 npm 上,这个信息通常显示在包的页面侧栏。
关注 GPL/AGPL。 如果你的项目打算商用或保持闭源,遇到 GPL 或 AGPL 协议的依赖时需要格外谨慎。不确定的话,考虑寻找使用更宽松协议的替代品。
保留版权声明。 即使是最宽松的 MIT 协议,也要求你保留原始的版权声明。通常这个声明已经包含在依赖包里了,你不需要额外做什么——但如果你直接复制了某段代码到自己的文件中,记得把版权声明也一起保留。
有疑问就问。 如果对某个许可协议的含义拿不准,你可以把协议的全文交给 AI,让它帮你解读"我能不能在商业项目中使用这个代码"。虽然 AI 的回答不是法律建议,但它能帮你建立一个初步的判断。
指挥与验收
一边讲怎么让 AI 帮你做,一边讲怎么看出 AI 做砸了。
指挥
连接到
术语
事故复盘