V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
softempire
V2EX  ›  问与答

、用了一个 GPL2 的 library,我需要开源我的软件吗

  •  
  •   softempire · 2019-12-28 20:58:26 +08:00 · 4869 次点击
    这是一个创建于 1796 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的软件不是商业的,只是科研机构做研究用的,不会对外,只是内部使用,需要开源吗?

    16 条回复    2020-03-16 15:33:27 +08:00
    emric
        1
    emric  
       2019-12-28 21:14:34 +08:00 via Android
    不重新分发,没关系。
    gwy15
        2
    gwy15  
       2019-12-28 21:21:43 +08:00
    跟商不商业没关系,只要你用了 GPL 协议的代码,道德上你整个 project 都应该继承 GPL 协议。
    gwy15
        3
    gwy15  
       2019-12-28 21:26:28 +08:00
    更准确地说,如果你要公开自己的软件(指任何行式的公开发布二进制或是源代码),你的 project 必须公开源代码并继承 GPL 协议。比如使用了 ffmpeg 的软件,只要提供了二进制分发,就应该要提供源代码并 licensed under GPL。像你这种面向“科研机构做研究用不会对外”,只要你不公开分发,就不用公布源代码。
    janus77
        4
    janus77  
       2019-12-28 22:19:32 +08:00 via iPhone
    都看清楚是 GPL2……不用开源的吧
    tyrealgray
        5
    tyrealgray  
       2019-12-28 23:53:18 +08:00   ❤️ 2
    @gwy15 不要动不动扯道德,GPL2 不分发不需要继承许可,不需要开源
    Kirscheis
        6
    Kirscheis  
       2019-12-29 00:08:20 +08:00 via Android
    1. 不对外就不用

    2. GPL 的 library,通过独立封装的接口等方式调用的,一般除该 library 外的部分也不用
    ysc3839
        7
    ysc3839  
       2019-12-29 00:08:44 +08:00 via Android
    你不修改这个 library,只是调用的话应该是不需要的。否则你的程序调用了 glibc 难道也要开源?
    ericgui
        8
    ericgui  
       2019-12-29 02:16:39 +08:00   ❤️ 1
    @ysc3839 正解

    你修复了源代码,没问题
    不分发,没问题
    分发,就必须同样用 GPL 协议

    至于你调用别人的 GPL 协议的软件,仅仅通过接口而已,没问题,分发不分发,都不需要考虑这个 GPL 的“传染性”
    ericgui
        9
    ericgui  
       2019-12-29 02:16:50 +08:00
    *修改,不是修复
    gwy15
        10
    gwy15  
       2019-12-29 11:56:33 +08:00
    @tyrealgray GNU 哲学本身就认为非自由软件是不道德的,

    > "https://www.gnu.org/philosophy/free-sw.en.html"
    > While we can distinguish various nonfree distribution schemes in terms of how far they fall short of being free, we consider them all equally unethical.

    我说道德上应该要继承 GPL 协议 /自由软件有什么问题吗?

    GPLv2 协议是允许你在不公开发布(自用)的情况下保持闭源,但是这也不影响在 GNU 哲学下被认为不道德。我没有对楼主进行谴责,我只是说按照 GNU 的哲学应该保持自由软件。GNU 是非常激进的自由软件推送者,你可以不认同 GNU 的哲学。


    @ysc3839 glibc 是 LGPL,允许非自由软件调用 LGPL 的库。
    msg7086
        11
    msg7086  
       2019-12-29 14:32:46 +08:00   ❤️ 1
    @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 软件不受。)
    msg7086
        12
    msg7086  
       2019-12-29 14:40:35 +08:00   ❤️ 1
    @softempire
    用了 GPL2 的库,你当然需要开源你的软件。
    但是你不需要 向全世界 开源你的软件。
    GPL 的要求是,你需要向你分发二进制的目标提供源码。

    所以比如说这个软件你拷给了你的同事,那么他如果问你要源码,你有义务给。
    但是我问你要源码,你完全不需要给,因为你没有把软件分发给我。

    但是同样的,你不能剥夺你同事分发你的软件和你的源码的权利。
    如果你的同事把软件拷给了我,那么我问你同事要源码,他就必须给。
    (但是我不能问你要,你也不需要给我,因为分发给我的不是你。)

    所以简而言之,你需要开源,但你不需要公开。
    ericgui
        13
    ericgui  
       2019-12-29 16:04:41 +08:00 via Android
    @msg7086 android 必须用 linux 内核,没有这个 linux kernel,这系统就不能工作了吧?这个怎么算?

    老铁,您也不是法律专家,就别这么斩钉截铁了吧。。。。
    tyrealgray
        14
    tyrealgray  
       2019-12-29 20:24:33 +08:00 via Android
    @gwy15 非自由软件指的是那些以知识产权保护为理由禁止破译研究以及改良的发行软件,而非单纯的自己内部搞搞的非商用内部软件。

    另外 GNU 这几年也不是什么都是真理,GPLv3 就争议很大,很多人就不认同,包括我。
    msg7086
        15
    msg7086  
       2019-12-30 05:45:31 +08:00 via Android
    @ericgui 什么怎么算? Android 是基于 Linux 的没错,但 Linux 可不是纯粹的 GPL,而是带有附加豁免条件的 GPL,对于通过 API 调用的用户态程序不感染协议。所以安卓的内核态代码都是 GPL 的,而用户态代码可以是任意许可证。

    同理对于已经自成一体的独立内核模块也不会感染 GPL。比如显卡驱动,本身就不是基于 Linux 的功能,不是衍生作品。zfs on Linux 是从其它操作系统上移植过来的软件,自然也不是 Linux 的衍生作品,可以用 CDDL 合法发布。

    你说得对,我不是法律专家,但是这不意味着我不能指出明显的错误。法律上对此问题的描述很明确,每个软件工程师都应该仔细研究学习,免得哪天不小心就给公司带去几百万的官司赔款。至于具体的结果,是法律专家也没有用,最终还是法官判决。甚至法官判决也不一定就是对的,还有上级法院可以上诉。上级法院也不一定就是对的,还有最高裁呢…
    xinxijishuwyq
        16
    xinxijishuwyq  
       2020-03-16 15:33:27 +08:00 via Android
    @ysc3839 glibc 是 lgpl 协议,所以可以调用不开源
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1046 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.