V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ggp1ot2
V2EX  ›  程序员

基于开源项目二次开发违反道德吗?

  •  
  •   ggp1ot2 · 2022-12-07 21:35:48 +08:00 · 7957 次点击
    这是一个创建于 746 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT 。

    想用 Python 写一个插件,在查找相关资料时,发现在 GitHub 上有老外已经写了一个相关的项目。

    当然,不是 100%和我要实现的需求重合,大概有 60-70%的重合度

    但是主要的逻辑代码,我自从看过他写的,就跳不出他的想法了,因为已经实现了,代码写的也挺漂亮。

    我想基于他的代码,去做二次开发(删掉我不要的功能,新增我需要的特性,优化使用细节等)

    ======

    如果我直接拿走二次开发,那么我最终的项目里面不可避免的会有他的影子,至少主要逻辑的实现上差不多。

    =======

    我不知道这样做,是否违反某些开源协议,至少如果我直接这样做我会觉得有点不厚道。

    当然我可以重写他的代码,换换函数掉用顺序,修改修改变量名、参数名等等来魔改,改到至少一眼看不出来,但是这样更让我觉得有点 shame ,并且我也觉得,写的挺好了。

    ======

    所以,就这种情况,如果我基于别人的项目,具体点,在他现有的代码上修改来二次开发(无法通过提交 PR 合并来实现我的需求),是否为一件 [不应该] 去做的事情。

    另外,如果可以,那我的项目应该属于谁?

    =======

    补充,我检索到的 GitHub 项目没有几个 star ,页面提示了 MIT 协议。

    55 条回复    2022-12-08 17:09:57 +08:00
    ChaosesIb
        1
    ChaosesIb  
       2022-12-07 21:40:20 +08:00
    有时间写那么多话不如去读下 MIT 协议。
    delpo
        2
    delpo  
       2022-12-07 21:40:23 +08:00
    开源协议的存在价值之一就是让项目可以被更多的人使用,这里的使用自然也包括了二次开发,所以如果你在遵守协议的情况下对代码进行修改,分发,是完全合理合法的,因为这就是作者选择这种开源协议的本意
    ggp1ot2
        3
    ggp1ot2  
    OP
       2022-12-07 21:42:34 +08:00
    @ChaosesIb #1 抱歉,我读了,不然也不会打出来,因为第一次想去写一个开源的东西,直接咔咔拿走别人代码感觉有点不合适
    ggp1ot2
        4
    ggp1ot2  
    OP
       2022-12-07 21:44:36 +08:00
    如果没有 MIT 协议呢??
    JiuW
        5
    JiuW  
       2022-12-07 21:50:25 +08:00 via Android
    不违反协议就行。各个开源协议要求不同,原作者选择了某种协议就代表他认可这个协议的内容,在你遵守协议的前提下的行为自然也应当得到认可
    crysislinux
        6
    crysislinux  
       2022-12-07 21:51:28 +08:00
    MIT 随便用。GPL 你如果是服务端用也是随便用。当然你可以在自己的 license 里提到你用了这些项目。
    xmumiffy
        7
    xmumiffy  
       2022-12-07 21:51:57 +08:00 via Android
    不同协议有不同要求,按照协议要求去做就行。
    不过如果项目没有附带协议,那就是你不能做任何事,代码只是给你看看的
    subpo
        8
    subpo  
       2022-12-07 21:53:28 +08:00
    包括但不限于使用、复制、修改、合并 、发布、分发、再许可的权利, 被许可人有权利使用、复制、修改、合并、出版发行、散布、再许可和 /或贩售软件及软件的副本,及授予被供应人同等权利

    中文版本也很容易搜到,哪里很难理解了
    xujinkai
        9
    xujinkai  
       2022-12-07 21:58:16 +08:00 via Android   ❤️ 1
    MIT 随便,觉得不好意思就在你的 readme 里把他链接贴出来,再夸几句。
    momocha
        10
    momocha  
       2022-12-07 22:07:18 +08:00 via iPhone   ❤️ 10
    出于对前任贡献的尊重,添加致谢文件,保留前任的版权声明文件和源码里的版权声明,再添加自己的版权声明。
    每一行代码都是汗水,请大家在使用别人的成果时候尊重别人的劳动成果和版权声明。
    darkengine
        11
    darkengine  
       2022-12-07 22:22:58 +08:00
    没有协议就问原作者
    imv2er
        12
    imv2er  
       2022-12-07 22:24:05 +08:00
    很多不都是开源二次包装做成商业版发售吗
    hamsterbase
        13
    hamsterbase  
       2022-12-07 22:49:58 +08:00   ❤️ 3
    我觉得可以联系原作者,问一下能否新增 PR 加功能。 如果他不愿意,你可以选择 fork 。

    注意不要删除原来的 license 。

    推荐读一下 《大教堂与集市》,第 3.3 章提到了这个问题。

    下面是原文

    然而,在经历这些变化之后,人们对什么是“自由软件”或“开放源码”仍有着普遍认可的共识,在很多开源许可证中都能发现对此共识的清晰表达,其最关键要素都是一致的。

    1997 年,“Debian 自由软件准则”提炼了这些共同要素,并形成了开放源码定义( OSD ,参见 http://www.opensource.org )。

    定义指出,开源许可证必须保护任何个人或团体无条件修改开源软件(以及发布修改后软件版本)的权利。
    所以,OSD (以及与 OSD 一致的版权声明,如 GPL 、BSD 许可证、Perl 的艺术许可证( Artistic License ))隐含的规则是“任何人能干任何事”( anyone can hack anything ),没有任何事情可以阻止人们获取任意开源产品(如自由软件基金会的 gcc 编译器)、复制其源码、推进其向不同方向演进,并都可声称是该产品。

    这种演进上的分化称为“分支”(fork),分支最重要的特点是它派生出一个随后不能交换代码的竞争项目,并导致开发社区潜在的分裂。(有的情况看上去像分支但其实不是,如 Linux 存在的多种发布版本。这种伪分支可能会导致不同的项目,但是它们使用的代码几乎相同,并且可以互相受益于对方开发的所有成果,它们在技术上和社会学上都不是浪费,也不会让人感觉到是“分支”。)

    开源许可证没有对“分支”做任何限制,更不用说“伪分支”了。人们可能会说这暗中鼓励了分支,但实际上,“伪分支”比较常见,分支却几乎没有发生过。重大项目极少产生分化,如果有,也总伴随着重新命名以及大量的公开解释,很明显,在诸如 GNU Emacs/XEmacs 分化、gcc/egcs 分化,以及从 BSD 派生出的各种分化中,分化者都觉得他们在违背一个相当强大的社区准则

    事实上,和“任何人能干任何事”共识相矛盾的是,开源文化有一套严格的但主要是“不允许”类型的所有权惯例。
    这些惯例决定了谁能修改软件、在什么情况下可以修改,以及(特别是)谁有权利向社区发布修改后的版本。
    文化中的一些禁忌凸显了这些准则,我们在此总结其中一些重要的内容,以便后面使用。


    1. 分化一个项目会遇到强大的社会压力,只有在极为必要的情况下才使用,而且要重新命名和做出大量的公开解释。
    2. 在没有项目主持人认可的情况下发布更新是令人不悦的,除非是特殊情况(如本质上不重要的移植 bug 修复)。
    3. 在项目历史、致谢表或维护列表中移除某个人的名字是绝对不可以的,除非当事人明确表示同意。

    在本文的余下部分,我们将仔细研究这些禁忌和所有权惯例。我们将不仅探究这些概念是如何运转的,还将揭示开源社区背后隐藏的社会动力学及激励结构。
    hamsterbase
        14
    hamsterbase  
       2022-12-07 22:50:29 +08:00
    如果选择闭源,直接改就行了,完全没问题。
    geelaw
        15
    geelaw  
       2022-12-07 23:05:15 +08:00 via iPhone   ❤️ 1
    自由软件的宗旨就是告诉你所谓“使用别人的代码不道德”这个想法是有问题的,自由使用你所得到的软件,包括对它二次开发(实际上就是改进、衍生的一种)是自由软件运动鼓励的事情。没有领会到这一点是对自由软件运动理解的失败——这之中自然有受开源软件运动理念影响的问题。

    这里惟一的道德问题是是否标注出处( give credit ),道德的做法是明确标注你使用了什么代码(衍生自哪里),同时这也是合同(你获得的自由软件的许可协议)所要求的。
    lujiaxing
        16
    lujiaxing  
       2022-12-07 23:13:56 +08:00
    如果运用开源项目的代码都是违反道德的话, 那开源项目开源的意义在哪?
    MrDavidJones
        17
    MrDavidJones  
       2022-12-07 23:16:34 +08:00 via iPhone
    有开源还不用 作者看到更心疼
    loading
        18
    loading  
       2022-12-07 23:23:32 +08:00
    不用删除原有功能,加入配置项或其他方式就行,改进他的代码结构,
    如果可以,建议 fork 一下,后面 pr 回去,成为注意代码贡献者也是一个宝贵的经验。
    Laussan
        19
    Laussan  
       2022-12-07 23:24:39 +08:00 via iPhone   ❤️ 2
    他声明了协议,你觉得遵守它的协议违反道德,这同样也是对协议的不尊重。
    JackCh3ng
        20
    JackCh3ng  
       2022-12-07 23:24:43 +08:00   ❤️ 4
    你只要记住苟富贵,勿相忘。先不管道不道德,用了再说,可以在鸣谢里加上用了谁谁谁的代码或基于谁谁谁的代码,以后真要是发达了,作者找到你或者你主动找作者要授权就好了。不要蛋糕还没做出来,就想着这蛋糕我一个人吃了道不道德的问题。
    你也不要觉得我说的这种行为不道德,这样的行为在商业上很常见,先把蛋糕做出来,再考虑分蛋糕的事,你要是蛋糕都做不出来,谁会在乎你是不是用的他的代码做的蛋糕?
    mikewang
        21
    mikewang  
       2022-12-08 02:37:46 +08:00
    GitHub 右上角有一个 Fork 按钮,就是干这个用的。
    关于 MIT 协议,这个协议要求很宽松,你甚至可以选择闭源。
    唯一一点需要注意的是,需要在你的项目中注明使用到代码的原作者并付上原本的 MIT 协议,以示感谢。
    其他想怎么改就怎么改,改到原作者都不认识也都行。
    msg7086
        22
    msg7086  
       2022-12-08 03:11:14 +08:00
    跟着协议要求走就行了。

    MIT 协议允许你进行二次开发,照着上面的要求做就行了。他用了 MIT ,也就等于允许你做你说的事情。

    你的项目属于你和这个项目的作者。他是第一作者,项目是原创作品。你是第二作者,项目是衍生作品。你们两人共享项目著作权。细化到每一块代码,他写的他拥有著作权,你写的你拥有著作权,双方都涉及的部分两人共享著作权。

    看着他的代码来重写代码不会改变你的代码是衍生作品这一事实,没有必要做。
    iBugOne
        23
    iBugOne  
       2022-12-08 05:34:45 +08:00 via Android
    只要做法妥当,二次开发是光明磊落的。

    例如,Proxmox VE 是基于 Debian 发行版和 Ubuntu 的 kernel 二次开发的虚拟化平台,加入自己写的前端软件,对标全套 VMware vCenter 软件。不仅开发成果出来了,而且按订阅收费,有很多企业级订户,还收获了各路虚拟化 /软路由论坛的响当当的口碑。毫不夸张地说,PVE 是开源软件二次开发的一个巨大的成功例子。
    netabare
        24
    netabare  
       2022-12-08 06:18:40 +08:00   ❤️ 1
    只要符合开源协议要求,那就没有任何问题。有的协议甚至允许你的二次开发代码闭源。

    某种程度上说,二次开发也是软件开源的一个目的吧。
    Henryzhao
        25
    Henryzhao  
       2022-12-08 06:19:12 +08:00 via iPhone   ❤️ 1
    @ggp1ot2 如果注明的是其他协议遵守协议即可,如果没有注明任何协议,需要认为是原作者保留所有权利,任何形式的使用都是违规的。

    https://opensource.guide/legal/

    “If you don’t apply an open source license, everybody who contributes to your project also becomes an exclusive copyright holder of their work. That means nobody can use, copy, distribute, or modify their contributions – and that “nobody” includes you.”
    Henryzhao
        26
    Henryzhao  
       2022-12-08 06:22:09 +08:00 via iPhone   ❤️ 1
    @Henryzhao Section 2 第一段
    “When you make a creative work (such as writing, graphics, or code), that work is under exclusive copyright by default. That is, the law assumes that as the author of your work, you have a say in what others can do with it.
    In general, that means nobody else can use, copy, distribute, or modify your work without being at risk of take-downs, shake-downs, or litigation.”
    baobao1270
        27
    baobao1270  
       2022-12-08 07:30:37 +08:00
    问题不大。

    之前我有在用一个 MIT 协议的 Chrome 插件,后来作者将后续版本闭源并收费了,并且直接将用户安装的开源版本强制推送升级成封源版本。于是我就直接 fork 了最后一个以 MIT 协议授权的版本,然后重新在 Chrome 商店上架了。
    cheng6563
        28
    cheng6563  
       2022-12-08 09:19:52 +08:00
    没有协议就是不小心代码让你看到的闭源项目
    ttgo
        29
    ttgo  
       2022-12-08 09:27:07 +08:00
    安卓 ios 不都是「基于开源项目的二次开发」?
    chrawsl
        30
    chrawsl  
       2022-12-08 09:51:58 +08:00
    mit 貌似不允许直接倒卖源码,其他比如二次开发什么的都是允许的
    Leonard
        31
    Leonard  
       2022-12-08 09:55:21 +08:00
    开源就是为了让大家用的,只要协议允许就行。
    Marinaaaa
        32
    Marinaaaa  
       2022-12-08 09:56:28 +08:00
    直接问原作者,如果没有回应的话。可以直接在 readme 中贴上原地址,或者直接 fork 一份出来也可以。
    catsoul
        33
    catsoul  
       2022-12-08 10:07:40 +08:00
    @msg7086 我估计 OP 的意思是,删掉原有项目中的一部分代码,是否是不道德
    ggp1ot2
        34
    ggp1ot2  
    OP
       2022-12-08 10:23:47 +08:00
    @catsoul #33 删掉一部分,复用一部分,新增一部分。。。关键是复用的是核心代码,新增的只是新增一些功能,因为我感觉,如果让我从 0 开发,很大一部分精力是去思考、调试如何实现核心代码,现在直接发现有一份写好的,感觉直接拿来用感觉像小偷一样哈哈,
    catsoul
        35
    catsoul  
       2022-12-08 10:27:03 +08:00
    @ggp1ot2 按我对 mit 协议的理解来说,这些都是协议范围内,所以应该是没问题的~
    liprais
        36
    liprais  
       2022-12-08 10:30:06 +08:00 via iPhone
    mit 协议不是随便玩么,只要你保留他的版权声明就行
    soulmine
        37
    soulmine  
       2022-12-08 10:36:06 +08:00
    @ggp1ot2 那你这么想 你改出来的新版本也会有其他人像你一样直接在上面继续改出他所需要的版本 那你不就和他一样了么 这就是传承啊( bushi
    msg7086
        38
    msg7086  
       2022-12-08 10:46:05 +08:00
    @catsoul
    @ggp1ot2 这不是小偷,小偷是别人藏着护着的东西你给他拿来。这是人家主动公开了,主动允许你拿。
    star7th
        39
    star7th  
       2022-12-08 10:55:37 +08:00
    多年的开源项目维护者过来说一下。
    既然是 MIT 协议,那法律上不存在问题。道德上,愿意的话,就在仓库首页致谢一下,说本仓库的代码参考了 xxx 的部分实现。
    ysc3839
        40
    ysc3839  
       2022-12-08 11:14:40 +08:00
    道德是个很宽泛的概念,不同人的道德标准也不一样。前面那么多说说符合协议的,都只是在讲法律问题。不然为什么某系统宣称自主研发,但实际上是基于开源项目修改,结果遭到很多人批评?个人觉得道德是约束自己的,每个人都有自己的道德标准,而这个标准是很难解释理由的,按照自己的标准做事即可。
    vevlins
        41
    vevlins  
       2022-12-08 11:19:24 +08:00
    致谢、捐赠,都可以。
    协议允许内的任何事情都可以做。如果二次开发基于 MIT 协议的项目让人心存愧疚,那是对软件开源运动的否定。为了支持开源事业的发展,我将带头白嫖,持续白嫖,坚决白嫖。
    InHello
        42
    InHello  
       2022-12-08 11:19:55 +08:00
    @ysc3839 赞同你的话,不过现实中大部分人往往就以自己的标准去约束别人。
    hutoer
        43
    hutoer  
       2022-12-08 11:21:20 +08:00
    @ysc3839 那些“宣称自主研发”,主要是在刻意隐瞒基于开源项目修改,如果大大方方的标明,大家就没有必要批评了
    nonwill
        44
    nonwill  
       2022-12-08 11:42:31 +08:00   ❤️ 1
    @InHello 同意
    对原作心存敬意,但不要有“负债”感
    千万别太在意所谓的“社评”,如在乎不如一开始就放弃
    脸皮“厚”一点“薄”一点都没关系,要适当远离 以自己的标准去约束别人 的人(哪怕自己也是这样的人)
    最后,如果,在你得罪“利益”集合后,不要试图逃离,远离它们,但适当的逗乐一下也未尝不可

    https://www.zhihu.com/question/38408474/answer/1570556619
    https://github.com/goldendict/goldendict/issues/1424
    mr0joker
        45
    mr0joker  
       2022-12-08 12:01:08 +08:00
    @hamsterbase 这位老哥说的很好 @ggp1ot2 你直接去把你的情况跟原作者表明呗。
    mr0joker
        46
    mr0joker  
       2022-12-08 12:02:38 +08:00
    感觉直接拿来用感觉像小偷一样哈哈,

    ---------------------
    @ggp1ot2 你没有直接跟原作者沟通过吗?所以感觉自己是偷偷摸摸的是吗?😂
    opentrade
        47
    opentrade  
       2022-12-08 13:25:19 +08:00
    问是问,做是做
    vanton
        48
    vanton  
       2022-12-08 13:28:50 +08:00
    看协议。

    遵从元协议,并且标注来源。
    codingBug
        49
    codingBug  
       2022-12-08 14:56:40 +08:00
    既然是 MIT ,你觉得不好意思,就写上灵感来自于 xxx ,并大量参考了 xxx ,感谢 xxx
    如果你不开源,那也没人知道你用了什么
    libook
        50
    libook  
       2022-12-08 15:17:14 +08:00
    不违反原有开源协议就行,如果原来代码没附协议,就得联系作者获得书面授权,或者让作者加个开源协议。
    如果你觉得对你帮助很大,可以在自己的项目里感谢一下原项目,或者赞助原作者。
    tairan2006
        51
    tairan2006  
       2022-12-08 15:26:51 +08:00
    MIT 直接 fork 改就行,readme 里面提一下。
    yxzblue
        52
    yxzblue  
       2022-12-08 15:30:08 +08:00
    等他来起诉你 再说吧
    glamoroGG
        53
    glamoroGG  
       2022-12-08 15:39:27 +08:00
    readme 里说一嘴,给个链接
    FrankAdler
        54
    FrankAdler  
       2022-12-08 16:49:57 +08:00
    allgy
        55
    allgy  
       2022-12-08 17:09:57 +08:00
    为不违反道德看协议
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3211 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:14 · PVG 08:14 · LAX 16:14 · JFK 19:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.