V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wniming
V2EX  ›  程序员

如果我基于使用 GPLv2 授权的软件进行二次开发并分发给用户使用,我需要将源代码开源吗?

  •  
  •   wniming · 2023-03-05 22:59:31 +08:00 via Android · 2883 次点击
    这是一个创建于 628 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的软件不是让用户可见直接使用的,而是要作为硬件的固件让用户使用的,我知道技术上应该不会被人发现我使用了什么开源软件,但我想知道法律上我是否应该把我的修改也开源出来?

    具体来说我是要把 linux 做一些修改并放在硬件里跑,让 linux 充当固件,我想知道我是否应该将修改后的源代码也开源出来,如果我不想开源,我是否可以通过将功能写成一个单独的内核模块来避免法律上的问题?

    23 条回复    2023-03-07 08:06:08 +08:00
    ysc3839
        1
    ysc3839  
       2023-03-05 23:09:24 +08:00 via Android   ❤️ 1
    印象中是如果你提供固件给用户下载,那也要提供源代码,如果整个硬件完全是一个黑箱给用户使用,则不需要。
    wniming
        2
    wniming  
    OP
       2023-03-05 23:12:00 +08:00 via Android
    @ysc3839 感谢回复,让用户使用特定的软件升级固件的这个过程也有下载的操作,但下载完是直接刷写到硬件里的,这种情况不需要开源吧?
    ysc3839
        3
    ysc3839  
       2023-03-05 23:13:39 +08:00 via Android
    @wniming 应该不需要
    GuangXiN
        4
    GuangXiN  
       2023-03-05 23:33:22 +08:00 via Android
    即便你以硬件附带二进制程序的方式分发软件,也必须保证用户获得你的源代码的自由。
    adoyle
        5
    adoyle  
       2023-03-05 23:36:43 +08:00
    你修改了 GPLv2 授权的软件,打包成固件发布。你就必须要开源这个固件的源码。
    neoblackcap
        6
    neoblackcap  
       2023-03-06 00:25:38 +08:00   ❤️ 1
    需要,可以参照 QNAP 等基于 linux 的固件,都是得公开源代码的。
    你不想公开你的代码,那么得写成能动态加载的内核模块才行。具体例子就是英伟达显卡的驱动
    cnbatch
        7
    cnbatch  
       2023-03-06 01:32:18 +08:00
    TL;DR: 当然需要

    如果 OP 玩过 OpenWRT 或者听说过 OpenWRT ,可以尝试了解下它诞生的历史背景,了解完你就会明白怎样做。

    顺手写个简略版:

    Linksys 的 WRT54G 路由器( 2002 年 12 月发售)用了 Linux 做系统固件但未公开源码,被人发现后依然死撑拒绝公布,然而没多久就撑不住了,最后在 2003 年 7 月时公开了固件源码。

    半年后,OpenWRT 诞生,代码正是基于 Linksys 公布的源码。
    Trim21
        8
    Trim21  
       2023-03-06 03:40:09 +08:00 via Android
    @wniming 我不确定完全黑盒的情况,但如果你提供固件下载的话肯定是要提供源码的。
    yolee599
        9
    yolee599  
       2023-03-06 08:42:24 +08:00 via Android
    只要你修改了 Linux 源码,就必须要公开,包括启动脚本。如果是内核模块,单独编译,再在系统运行起来的时候手动通过 insmod 安装,则不用公开,不能直接编译进内核!
    missdeer
        10
    missdeer  
       2023-03-06 09:16:26 +08:00
    代码是肯定要开源的,但是你可以把一些重要信息做成编译参数的形式,就只要编译时通过命令行写进去,就不用开源
    haha512
        11
    haha512  
       2023-03-06 09:29:24 +08:00
    如果只是面向国内客户,完全不用考虑,法律上又不承认开源协议,只要不侵犯别人的专利权著作权就行了
    ByLCY
        12
    ByLCY  
       2023-03-06 09:58:34 +08:00
    @haha512 国内有法院将开源协议当做合同来看案例
    msg7086
        13
    msg7086  
       2023-03-06 10:12:01 +08:00
    你说的这个就是 7 楼 WRT 的原版案例。把 Linux 刷进硬件以后拿来卖,最后被强制开源。
    vone
        14
    vone  
       2023-03-06 10:21:42 +08:00
    可以说:代码开源,但是不使用任何开源平台。如果有用户需要代码,可以线下前往公司复制。
    leonshaw
        15
    leonshaw  
       2023-03-06 10:30:12 +08:00
    单独内核模块的话不能引用 GPL ( EXPORT_SYMBOL_GPL )的内核符号。
    haha512
        16
    haha512  
       2023-03-06 11:35:42 +08:00
    @ByLCY 看过那个案例,并不是承认了开源协议当合同,核心还是侵犯了版权
    ByLCY
        17
    ByLCY  
       2023-03-06 14:42:22 +08:00
    @haha512 [判决书]( https://wenshu.court.gov.cn/website/wenshu/181107ANFZ0BXSK4/index.html?docId=U2i3wuBZ89P1nTSd0/3YzhGmrtdffuqMILDvq3QadoIqgYneTFEOgfUKq3u+IEo4+Q+nCz0HhftEubetEZilKDqpGwpjdCW96r/hZ1lBbz97jkS4qMaXo9zZD2CSSWY/)
    上面是判决书,你可以看下。我要是没理解错的话就是当作了合同,原告通过 gpl 协议(合同)将他的一部分权利让渡给了不特定对象。判决书中的相关说明:

    >> 关于 GPL3.0 协议的法律性质。其一,协议的内容具备合同特征。GPL3.0 协议属于发生私法上效果的意思表示,而意思表示是民事法律行为的核心要素,因此 GPL3.0 协议是一种民事法律行为。该协议授予用户复制、修改、再发布等权利,实际上在授权人和用户间形成了权利变动,属于设立、变更、终止民事权利义务关系的民事法律行为。授权人许可的权利符合我国著作权法的相关规定;其采用开源许可证发布源代码,将自己的大部分著作权授予不特定用户,完全是出于自愿。用户在许可证下复制、修改或再发布源代码,通过行为对许可证作出承诺,也是出于自愿。用户在对源代码进行复制、修改或发布时许可证成立,同时许可证发生法律效力。其二,协议的形式亦具备合同特征。GPL3.0 协议以电子文本方式表现其内容,而电子文本是一种有形的表现形式,属于以书面形式订立的合同。综上所述,GPL3.0 协议具有合同性质,可认定为授权人与用户间订立的著作权协议,属于我国《合同法》调整的范围。

    ---

    关于你说的版权,是在授权人有著作权的情况下就可以通过许可将权利让渡。在文书中有提到以下句子:

    >> 开源软件依赖于现有著作权及相关法律体系的保护,授权人只在享有著作权的情况下,其通过许可证将权利有条件进行许可或让渡才有法理依据。

    ---

    关于权限的让渡在 gpl 协议中是有条件的让渡,如果被授权方不履行合同要求让渡的权利就会被收回。判决书中的原文是这样的:

    >> 关于违反 GPL3.0 协议的侵权责任。著作权法为了保护权利人的专有权,仅规定非权利人可以在如“合理使用”等范围内使用作品,诸如复制、修改、发行等权利则专属于权利人,任何人非经许可实施这些行为将构成侵权。根据 GPL3.0 协议第 8 条“终止授权”的约定,授权人许可用户在遵守许可证规定的前提下行使某些权利,但用户必须承担相应的义务。若用户违反 GPL3.0 协议的使用条件来复制、修改或传播受保护的作品,其通过 GPL3.0 协议获得的授权将会自动终止。对此,我国《民法总则》第一百五十八条规定:“民事法律行为可以附条件……附解除条件的民事法律行为,自条件成就时失效”。根据开源软件的特性,GPL3.0 协议规定的使用条件(如开放源代码、标注著作权信息和修改信息等)系授权人许可用户自由使用的前提条件,亦即协议所附的解除条件。一旦用户违反了使用的前提条件,将导致 GPL3.0 协议在授权人与用户之间自动解除,用户基于协议获得的许可即时终止。用户实施的复制、修改、发布等行为,因失去权利来源而构成侵权。明确违反开源软件许可证的侵权法律责任,一方面可以及时制止侵权行为,防止他人对开源软件的不正当利用;另一方面能够有效保护授权人的利益,使他们保有继续创作的动力,促进源代码共享和知识的传播。
    andytao
        18
    andytao  
       2023-03-06 14:44:59 +08:00
    [袋鼠数据库工具]( https://www.datatable.online/zh/download/v2.3.2.230301.html) 也是基于开源软件开发的,选择的库都是 LGPL 协议许可的库,产生的相关修改都会直接提交 PR 合入上游的。
    andytao
        19
    andytao  
       2023-03-06 14:47:08 +08:00
    [袋鼠数据库工具] 也是基于开源软件开发的,选择的库都是 LGPL 协议许可的库,产生的相关修改都会直接提交 PR 合入上游的。干这一行就要遵守这一行的游戏规则。

    欢迎体验袋鼠最新版本:v2.3.2
    https://www.datatable.online/zh/download/v2.3.2.230301.html
    haha512
        20
    haha512  
       2023-03-06 16:54:28 +08:00
    @ByLCY 不管是提起诉讼还是判决都是"侵害了原告的软件著作权",而不是违反开源协议.

    这个软件如果没有申请著作权,那么不管被告如何违反开源协议,都无法以此理由发起诉讼

    从这个案例来看,在以侵犯其他权利发起诉讼后,再证明被告违反了开源协议,只是让可能胜率更大点.
    ysc3839
        21
    ysc3839  
       2023-03-06 20:27:34 +08:00 via Android
    @haha512 开放源代码协议是给软件著作权所有者使用的授权协议,违反了该授权协议自然就是侵犯了软件著作权。
    love51money
        22
    love51money  
       2023-03-06 20:52:54 +08:00
    @haha512 由于我国目前尚未形成较具规模的开源社区和较权威的开源软件行业自律组织,我国司法实践中尚未出现直接以违反开源协议为由起诉的案件,但出现了部分以权利软件使用了开源协议或包含开源代码而无权禁止被诉侵权人复制、发行、修改为由进行抗辩的案件。
    e3c78a97e0f8
        23
    e3c78a97e0f8  
       2023-03-07 08:06:08 +08:00 via iPhone
    @haha512 著作权根本就不需要申请
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2756 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:45 · PVG 20:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.