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

开源代码被人抄去用另一个语言重写闭源,只能认栽吗

  •  
  •   Dimole · 3 天前 · 3968 次点击

    如题。每次开源项目更新后第二天,闭源的程序就能跟进一样的功能。使用 IDA 反编译后发现其闭源程序部分实现逻辑相似度较高,只是使用了不同语言,而对方认为他用另一个语言重写了就是没有相似度、和开源原作无关联。

    开源的时候不知道江湖水深,选择的是 MPL-2.0 ,是只能认栽了吗?

    43 条回复    2025-08-13 12:02:03 +08:00
    sduoduo233
        1
    sduoduo233  
       3 天前 via Android
    开源还不让别人用?直接闭源算了
    mayli
        2
    mayli  
       3 天前
    啊?这玩意相似度也不行?
    levelworm
        3
    levelworm  
       3 天前
    这种都不算逆向了吧,就是实现相同的功能。我觉得道德上也没啥问题。法律上来说,应该也不算修改代码和发布代码。不过怎么说呢,就算违反道德和法律,一般也没啥办法,做开源嘛,就是给别人用的,一定会有人白嫖。这种还好了不算白嫖。
    Linho1219
        4
    Linho1219  
       3 天前 via Android   ❤️ 1
    这不是好事吗,至少你的项目有比较高的价值以至于有人愿意迁移代码。你应该反思的是:为什么他的用户宁愿用人家闭源的也不用你开源的?没做跨平台?移植麻烦?缺支持?如果真的有这样的问题,那确实是你的项目满足不了人家的需求,该人家赚钱;如果两个项目完全是平替关系,那是否是你的宣传问题?
    Dimole
        5
    Dimole  
    OP
       3 天前
    忘了提了,他闭源后在闭源群里诋毁开源的版本,说开源版本会丢数据
    但是实际经过测试并没有丢过
    Dimole
        6
    Dimole  
    OP
       3 天前
    @sduoduo233 什么时候不让用了?
    Dimole
        7
    Dimole  
    OP
       3 天前
    @mayli 日志里还有很多变量名都一样
    Dimole
        8
    Dimole  
    OP
       3 天前
    @Linho1219 真的是好事吗?我开源是为了大家能一起参与开源社区。有人拿了开源社区的东西就跑还要骂一嘴是好事?
    caola
        9
    caola  
       3 天前
    使用不同的语言,理论上只能算仿造,而不算直接用你的源码。当然有很多大公司也一样不会遵守开源协议的的,开源只能挣那些愿意遵守开源协议的用户。

    很多公司开源只是为了引流,让用户使用自己的付费高级功能、服务、或版本。
    又或者完全不区分免费或付费功能,单纯为了吸引用户使用自己的其他服务。
    mayli
        10
    mayli  
       3 天前
    不如把项目贴出来,让大家别猜谜语 :)
    ashong
        11
    ashong  
       3 天前 via iPhone
    没理解生气的点,
    重构?
    闭源?
    盈利?
    夺流?
    baobao1270
        12
    baobao1270  
       3 天前
    首先,开源本身维权就非常困难
    其次,就算对方也开源,你要证明「代码逻辑的相似度」也很困难
    最后,你没有对方的源代码而只有二进制,那么你自己都没有可信的证据证明「对方使用了你的代码」
    Dimole
        13
    Dimole  
    OP
       3 天前 via Android
    @ashong 5#补充了
    msg7086
        14
    msg7086  
       3 天前
    查看了你的源代码以后新写类似的其他语言的代码到闭源项目,是违反开源许可证的。
    著作权法保护的是代码实现,如果对方是看了你的源代码然后用其他语言实现一遍,跟直接把你的代码抄过去是相同的性质,这个在著作权法下属于改编或者翻译。
    比如说有人用中文写了本书,你擅自翻译成英语,这当然侵犯了翻译权或者改编权。你可以说汉字和拉丁字母长得不像所以就没有相似度吗。

    至于维权,这确实有点难,因为开源软件没有收益,所以即使被侵犯著作权也很难主张损失。最多只能要求 cease and desist ,收益和付出不成比例。
    kk2syc
        15
    kk2syc  
       3 天前
    国内互联网因为开源发展,也会因为开源毁灭。偷鸡摸狗的获利,创作者可能都饿死了。
    fbichijing
        16
    fbichijing  
       3 天前   ❤️ 1
    这种事情和 license 没有关系吧。

    诋毁的话是编程者自己的道德问题,别管他就是了。世界那么大,什么人没有。

    至于说换语言写闭源。如果将这件事换个角度,是不是就好理解了。

    不是经常看到一些不错的商业或者闭源软件,想要自由使用的时候总会想着用熟悉的语言自己实现,做一个简单的出来。事情似乎好像差不多?当然,看着开源实现难度就大幅下降这个没得说。

    细细想来,换个 license 就能规避吗?是 license 能限制的吗?印象中 unix 的诞生也是一些人花了不少时间重写了一些具有 license 限制的程序才存在的,是不是换句话说,这些具有 license 的程序的持有者并无法通过 license 来限制其他人重写它。众所周知,Linux 基于 gplv2 许可证,并且也是开源的。理论上说,只要你足够强足够有人手,时间和精力,也可以重新用别的语言或者相同语言完全重构整个系统,然后换一个几乎没有什么限制的许可证?
    bk201
        17
    bk201  
       3 天前   ❤️ 3
    你一个版本开源,一个闭源,闭源的引入新 feature ,那你功能始终领先对方
    wegbjwjm
        18
    wegbjwjm  
       3 天前 via iPhone
    改成闭源,增加新功能
    ersic
        19
    ersic  
       3 天前
    抄思路没办法
    cryptovae
        20
    cryptovae  
       3 天前   ❤️ 1
    建议把项目地址发出来看看,参考之前 PakePlus
    kinghly
        21
    kinghly  
       3 天前 via Android
    你造车,别人也造车。
    peteretep
        22
    peteretep  
       3 天前
    选择开源前就要想清楚,
    这就是开源的效果啊,
    人家不参考不复制,那开源的意义在哪里?
    iorilu
        23
    iorilu  
       3 天前
    这很正常把

    这已经是文明的了

    再说了, 如果你不愿意这样, 那完全可以关闭开源, 并且从性能功能超过对方不就行了
    Greendays
        24
    Greendays  
       3 天前
    用另一种语言写了那就是人家的东西了。
    WillBeethoven
        25
    WillBeethoven  
       3 天前
    我的所有开源项目都是 AGPL-3.0 最严格的条款。

    - 代码修改后再发布时必须同许可证开源
    - 代码仅跑在自家服务器、供外部用户通过网络使用时必须开源
    a33291
        26
    a33291  
       3 天前
    @WillBeethoven OP 描述这种好像没办法,类似 TX 直接"借鉴"别人的创意,并未直接借用任何产物
    zzz22333
        27
    zzz22333  
       3 天前
    既想开源又不想被白嫖,建议还是不要开源了。
    WillBeethoven
        28
    WillBeethoven  
       3 天前
    @a33291 对方留下了可比对的“文本相似度”证据,如果没有那是真没办法了。
    nevin47
        29
    nevin47  
       3 天前
    @Dimole #8 拿了就跑正常,拿了跑了不回馈社区还嘴贱骂一嘴,这种建议贴出来骂死他。。。
    Foxkeh
        30
    Foxkeh  
       3 天前
    那就许可证改掉
    belin520
        31
    belin520  
       3 天前
    那你以后闭源就好了
    hxsf
        32
    hxsf  
       3 天前   ❤️ 1
    > "而对方认为他用另一个语言重写了就是没有相似度、和开源原作无关联"

    首先,直接阅读你代码然后自己再写一份(不论语言)都是侵犯你著作权的!
    像规避著作权侵犯,一般最稳健的做法是使用净室设计( Clean-room design )( https://en.wikipedia.org/wiki/Clean-room_design )百科里也有相关案例(正反面)
    BTW 净室方法不能规避专利。
    dcsuibian
        33
    dcsuibian  
       2 天前   ❤️ 1
    第一个层面:
    首先,如果对方是大量参考了你的代码然后翻译成另一种语言,那他这种实际属于派生作品。如果他闭源分发了,那就是违法开源协议。
    第二个层面:
    即使他违反开源协议,你要举证也是非常困难的。

    建议:
    谁主张谁举证。如果你觉得他说开源版本会丢数据的言论不实的话,你可以大大方方地在项目相关文档中说明并驳斥,要求对方提供证据。但是不要说对方抄袭(否则这个就是你来举证了)。
    他诋毁你是因为他怕抢不走你的用户。
    项目本身开源免费的话,那你大大方方的就可以了。开源是你的优势,闭源是他的劣势。如果是完全相同的功能,用户为啥要选择闭源版本?
    同时如果他增强了你的功能,你可以直接拿过来,毕竟你是开源的,他是闭源的。你肯定没法抄他的。
    久而久之他的就不会有啥用户的。

    另外多说一嘴:
    如果是我开源,不打算赚钱搞开闭源版本的话,那直接就是 MIT 协议起手了。这样就不用担心这种问题。
    因为许可证相当宽松,基本怎么样都不违反。甚至即使被我讨厌的人拿去用了,我也会继续开源,毕竟本来就没有任何限制。
    HENQIGUAI
        34
    HENQIGUAI  
       2 天前
    是这样的,无论你选择什么协议,其实都只是相当于一个君子协定。你就算闭源打包加壳的代码,他们都会解密拆壳反编译的。
    GeruzoniAnsasu
        35
    GeruzoniAnsasu  
       2 天前
    没错所以真正的开源项目一定有商业版:

    如果厂商只会抄 -> 那么他的产品一定落后于商业版
    如果厂商不止抄 -> 但他产品不开源,那口碑一定不如开源+商业版
    如果厂商抄完了还开源 -> 大家都开源,那太好了

    全赢!
    CKylinMC
        36
    CKylinMC  
       2 天前
    啊?佬,是你吗?我看见一个项目刚给所有 contributers 询问要不要换 AGPL3 ,理由完全一样的
    newaccount
        37
    newaccount  
       2 天前   ❤️ 1
    你可以在项目里加个页面叫耻辱柱,把对方钉死在上面
    iv8d
        38
    iv8d  
       2 天前
    直接闭源,要想炒照样能炒,你拿出证据直接扔出来。
    iv8d
        39
    iv8d  
       2 天前
    @dcsuibian 大佬说的在理
    fbichijing
        40
    fbichijing  
       2 天前
    感觉 #17 和 #36 这两种方法都很有趣。

    从 #17 引申一下,或可以让自己的闭源领先开源几个版本或者一段时间。不过从程序角度可能客观来说,可能只是加大了一点难度?

    #36 的方法感觉很好玩。
    NewYear
        41
    NewYear  
       1 天前
    开源一定会遇到这些问题:

    被人白嫖拿去用
    被人白嫖拿去做商业项目,赚得盆满钵满
    被人白嫖设计思想仿造
    被人骂

    甚至,被人实现后进行“微创新”,体验大幅度上升,用户流失。


    其实在这个时候,我们作为开源软件作者,已经失去了当年开源的愿景了。
    我们当时为什么要开源这个软件呢?为什么我们开源了还这么痛苦?


    这里建议参考一下 Redis 的历史,作为一个开源项目,最开始他肯定是没有想过要赚大钱然后和各大互联网厂商拼杀,但当他看到各大互联网厂商用它赚钱后,就开始对抗……各种矛盾升级……
    (例如他选择只开源基础部分,并将大量增强功能避免,并继续开发更强大的闭源功能,需要付费使用,又从授权上想从互联网厂商分利润等等)

    直到有一天,各大互联网在这个领域玩不下去了,成本太高,未来不可控
    得,干脆联合起来成立一个组织,把对方的工程师挖过来,自己再用自家的资源,从头到尾把他的功能全部实现,管你开源闭源,在不违反开源协议的情况下,全部实现一遍。

    然后 Redis 作者,选择了更激烈的对抗手段,试图接管所有“连接 Redis 服务器的客户端组件”,拉黑掉互联网厂商实现这个数据库产品。。。。

    后续我就没太关注了,但我知道一点,Redis 的名声臭了,即便后续再宣布全部开源,也没有意义了,各大互联网厂商不可能抛弃自己的项目,又跑回去用他的“开源软件”。



    还有一个例子是 S/S 、S/S/R ,大家所熟知的软件。
    我从记忆里简单整理,不保真:简单来说,就是后者除了实现自己的功能,又不断的在抄前者的功能,导致前者怎么都不可能在功能上竞争得过后者,最后两个项目好像都黄了。



    好了,回到主题,为什么我们开源了,还要被骂?
    在这个事情里,首先我们要认知到开源软件的局限性,也就是“被人白嫖等等”(上面列了清单),这是无法避免的。

    那如何应对呢?
    在这里,一定要有“公关思维”,回忆一下,什么是公关思维?这里可以建议楼主看几期咱们外/交/部回复记者的发言。
    1 、脸皮一定要厚!你说什么,我不在意:我只在意我说什么,我说世界上只有一个中/国,那世界上就不可能有两百多个国家和地区。你问了也白问,我继续占有主动权。
    2 、学会吹捧自己!五千年古国,印度的万年古国,这都是我们实实在在的战绩,战绩可查!是谁创立了这个类别的软件?是谁有良好的品质才选择了开源?是谁接受大家的意见(甚至是骂娘的语言)?是谁引领了这个潮流,让相似的软件如雨后春笋一个个诞生?
    3 、不要太过于在意他人的看法,因为你控制不了别人的看法,你控制不了别人的行为,你控制不了天气的变化,你越在意,你越痛苦。这种时候一定冷静,不要因为情绪而反击他们,冷静想想自己能做什么。是不是咱们可以要求对方提供相关证据,或者复现方式,“我们一定会重视并进行复现和修复”呢?更希望其他用户提供线索,以帮助咱们软件存在隐性漏洞。。。



    最后我想说两点:
    1 、一个软件被另一个软件替代是很正常的,但软件嘛,都是功能上的区别,他可以做你也可以做,没关系的。也希望你自己可以理解。
    2 、当时开源这个软件时的愿景,一定是你能获得正面的反馈,从而心理上更舒服。但要运营一个软件项目,往往会遇到很多困扰,有些事你去处理了没什么太大价值,不处理又难受。。。所以如果实在太累,违背了当初的愿景,甚至让自己变得痛苦。。。。那么放手,也是一种不错的选择。

    最后的最后:
    你可以把我这大段文字丢给 AI ,让它给出一个合适的意见,再搭配你自己的想法,接下来怎么做其实很容易决定的。

    最后的最后的最后:
    感谢开源。
    julyclyde
        42
    julyclyde  
       1 天前
    对的,这叫 cleanroom engineering
    julyclyde
        43
    julyclyde  
       1 天前
    @Dimole 其实对方的错误只有骂一嘴
    你犯不着先提他拿走了,再强调骂一嘴
    他拿走完全是你赋予他的权利
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:29 · PVG 10:29 · LAX 19:29 · JFK 22:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.