@
ysc3839 @
ericgui 完全错误。
GPL 传染性和是否通过接口和怎么调用完全无关。
传染性看的是你的程序是否是一个「 derivative work 」衍生作品,或者说你的程序是否依赖了原始作品的功能。
比如你的软件 A 引用了类库 B。类库 B 实现了软件 A 中的某个需要的功能,缺少了类库 B 会让软件 A 无法正常使用,那么一般认为软件 A 是类库 B 的一个衍生作品。
不管他们是静态编译的,还是动态编译的,还是通过操作系统的其他手段调用的,都没有关系。
比如有一命令行程序 A 是 GPL 的,你为 A 编写了一个图形界面 B。显然 B 必须要 A 才能正常使用,那么 B 就是 A 的衍生作品,也受 GPL 约束。(实际的例子,比如你为 GPL 许可证下的 ffmpeg 写了一个 GUI,那么你的 GUI 受 GPL 约束。)
又比如有一命令行程序 A 是 GPL 的,你写了一个很复杂的软件 B,其中一个功能可以调用 A,但没有 A 也能实现主要功能,用户可以自行下载软件 A 与你的软件 B 一起工作,那么一般认为 B 不是 A 的衍生作品,不受 GPL 约束。(实际的例子,比如你为 Adobe Premiere 写了一个开源的视频导入插件,调用了 GPL 许可证下的 ffmpeg,那么你的插件受 GPL 约束但是 Adobe 软件不受。)