OpenSourceCamp

开源许可协议

姜宁

讲师介绍

  • TODO 添加讲师相关的内容

自由软件与开源软件

  • FreeSoftware

  • OpenSourceSoftware

  • FOSS,FLOSS 自由软件与开源软件

License 许可证类型

  • 公共领域

  • 著佐权 CopyLeft

  • 宽松型许可证

  • 私有/商业/闭源

OSI 开源许可定义

  • 自由地分发

  • 提供源代码

  • 允许衍生工作

  • 保证作者代码的完整性

  • 不针对个人和团体进行歧视

  • 不针对应用领域进行歧视

  • 许可协议附属权利的分发

  • 许可证不能针对某个产品

  • 许可协议不能限制其他软件

  • 许可协议必须是技术中立的

开源许可证分类

  • Give me credit: MIT, BSD,AL

  • Give me fix: MPL, EPL

  • Give me everything: GPL, LGPL

许可证的兼容性

  • 与私有许可证的兼容性

  • 与其他类型的开源许可证的兼容性

  • 权力予以认可

  • 商标保护

  • 专利回弹

多许可证之间的兼容

  • 源代码包开源许可

    • 最常见的开源许可证

    • 通过Binding形式来生成开源许可证

  • 开源代码编译成二进制包许可证

    • 需要考虑打包的软件发组合方式,静态或者动态链接

    • 对于Java,Python,JavaScript 的打包方式有不同的理解

    • GPL的软件在二进制发布的特殊要求

  • GPL的传染性不是体现在源代码包, 而是体现在二进制代码包

  • 讨论: Bepf对 内核GPL的传染性的影响

开源许可证对二次分发的义务要求

  • 绝大部分开源软件许可证义务是在分发阶段触发

  • AL 分发包含软件声明

  • MPL/EPL 要求如果修改了软件代码,需要提供修改后的代码

  • GPL 要求提供分发二进制文件相关的源代码

GPL软件用户代码需要开源场景

  • GNU许可证常见问题列举了很多场景

  • 核心是用户程序是否与GPL软件在同一进程运行并一同发布

    • 软件可执行代码受GPL的影响

    • 可执行程序装配会涉及多种场景

  • GPLv2 + Classpath Exception

    • 提供了一个例外情况避免 Java 字节码,Python,JavaScript代码受到GPL的影响

LGPL软件用户代码需要开源的场景

  • 比GPL宽松,主要适用于 GlibC库

  • 当用户采用静态链接库的方式使用LGPL软件,用户代码不用开源

  • 如果修改了LGPL软件的代码,修改部分需要开源

  • 当LGPL软件调用用户代码时,用户代码不需要开源

AGPL 软件用户代码需要开源的场景

国内GPL相关的案例

CLA & DCO

  • 贡献者协议CLA

    • 原创声明

    • 贡献者授予版权许可

    • 有个人和公司两个版本

  • 开发者原创声明 DCO

    • 原创声明

    • 依赖项目的原生开源许可证

源代码开放的非开源许可证

私有再许可

  • 一些公司提供了带有私有再许可方案的开源代码

  • 开源版本按照开源条款获得, 而私有版本需要付费获得

  • 通常是GPL或者AGPL

  • 下游用户需要获得例外的许可协议

    • 允许不执行著佐许可证的再分发的承诺

    • 私有版本再许可(Open Core情况)

商标使用的案例

  • 自由软件的代码可以自由使用,但是商标不行

  • Mozilla 的 Firefox

  • Debian打包不能使用Firefoxshangb

  • Iceweasel

专利问题

  • 软件专利在自由软件中富有争议

  • 专利是针对实施某个特定想法的全面禁令

  • 防御性专利收集,纯粹出于辩护目的收集专利

  • 专利流氓

  • OIN 开放创新网络联盟

参考资料