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

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

  •  
  •   Dimole · 26 天前 · 4369 次点击

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

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

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

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

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

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

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

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

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

    这已经是文明的了

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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



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



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

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



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

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

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