热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:“我的开源项目被威胁了!”

篇首语:本文由编程笔记#小编为大家整理,主要介绍了“我的开源项目被威胁了!”相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了“我的开源项目被威胁了!”相关的知识,希望对你有一定的参考价值。








作者 | Radon Rosborough


译者 | 弯月


出品 | CSDN(ID:CSDNnews)


去年我从大学毕业,现在一家公司担任开发运维及基础设施工程师。工作之余,我还利用空闲时间维护了一些开源项目。


在大学期间,我曾在一家创业公司 Replit 实习。本文主要讲述了 Replit 胁迫我关闭他们不喜欢的开源项目的经过。




Replit 是什么?


Replit 开发了一款 Web 应用,你可以通过这款应用在线运行使用不同的编程语言编写的代码。这并不是什么新的点子,但 Replit 的价值在于附加功能,比如分享工作成果、安装第三方软件包以及托管 Web 应用等等。


2019 年夏天,我在 Replit 工作期间,曾负责重建 Replit 的包管理技术栈,并将其开源了(源代码地址:https://github.com/raxod502/upm)。


2020 年夏天,我进入了另一家公司工作,但有时 Replit 会告诉我他们开发了一些非常酷的功能,我也会通过电子邮件与他们聊天。



我的开源项目


Replit 能够支持许多不同的编程语言,这一点我非常喜欢。我经常思考一个问题:一个网站可以容纳多少种编程语言?


为了研究这个问题,我构建了一个很小的可以在线运行代码的 Web 应用。我花了一天的时间,这款应用的雏形就构建好了。为什么我的这款应用如此之快?其实,在 Web 应用中运行 Python 代码只需要 30 行代码就可以了!这可能就是为什么在线运行 Python 代码的网站如此之多……


在这款小应用可以正常运行之后,我开始陆续加入各种不同的编程语言。如下是该项目的部分版本历史记录,我超级兴奋:


languages---------2020-06-05 df9ba38 Initial commit 02020-06-05 5e3a4a4 Install some packages into a Docker image 02020-06-05 e937c8f Simple Express server with "Hello world" 02020-06-06 0961498 Embed terminal on frontend app 02020-06-06 c66cf63 Embed Monaco editor on frontend 02020-06-06 27ab1f7 Add "run" button 02020-06-06 f417858 You can run Python code now 12020-06-07 d543081 You can run many languages now 82020-06-07 e2a3e71 All languages 17 working now 172020-06-07 473c50c ALL THE LANGUAGES 252020-06-08 3718315 even more languages 332020-06-08 548c1c1 repl.it superiority!! 382020-06-08 1ae424f More languages, we need all the languages 482020-06-09 c34ccf2 A lot more languages 772020-06-09 846caf2 At this point the number of languages is absurd 79

最终,我一共添加了 216 种语言,包括 Replit 支持的 38 种语言。你可能会问:为什么我要花这么多时间,在一个没什么人使用的 Web 应用中添加如此之多鲜为人知的编程语言?我只能说:这算不算是 2020 年你所见过的最奇怪的个人爱好?



与 Replit 分享了我的开源项目

有一天,我收到了一封来自 Replit 的电子邮件,通过邮件我得知他们发布了一项新功能。我认为这是与他们分享我的开源项目的好时机,也许他们可以从我的工作中获得一些灵感:



起初,我获得了一些积极的回应。然而,30 分钟后,Replit 突然开始指责我,说我不道德,还说我抄袭他们的设计:



首先,我的开源项目用到的所有想法均不是他们的“内部设计决策”(internal design decisions):他们的设计决策都发布到了 Replit 的博客上(我知道这一点是因为在我实习期间也写了一些博文)。其次,我的项目并非 Replit 克隆版,你去网上搜索一下“在线运行 Python”(或者搜索英文 run python online)就知道了,大部分代码都是大同小异:



但是,我觉得这中间可能有一些误会,因此我询问了细节:



然而,不幸的是,Replit 拒绝提供任何细节详细说明我究竟做错了什么。他们只是重申了之前的陈述,并威胁会起诉我:



接着,Replit 发来了另一封电子邮件,提醒我上个月他们刚刚从投资者那里筹集到了 2000 万美元,有必要的话,他们会利用这笔资金来对付我。然而,我曾是他们公司的一名实习生,一年前刚从大学毕业,并且没有经营任何商业机构。



关于这封邮件,我想指出两点:


  • 邮件中提到“类似这样的代码提交”(commits like this),实际上是一种误导。我的项目中只有一次代码提交提到了“Replit”,就是我上面展示的那个,在写代码的第三天,我就添加完了 Replit 支持的 38 种语言,然后又继续添加了 178 种其他语言。

  • 邮件中还说他们非常需要我这样的实习生,但我不明白这是什么意思。尤其是在第一份邮件中,他们还说希望我能回去。但是无所谓了,因为这与眼前的问题并没有什么关系。



Replit 威胁要起诉我

于是,我立即撤了我的项目,我觉得需要一些时间冷静下来,而且我还向 Replit 发了邮件道歉。我觉得有些东西在邮件中说不清楚,所以我问他能不能通个电话:



然而,不幸的是,Replit 无视了我的邮件,所以我又发送了邮件。这一次虽然我得到了回应,但是与我的希望有所出入:



为了让 Replit 明白,我并不满意眼前的情况,在接下来的几周内我又先后发送了三封电子邮件,但都被无视了。


换句话说,Replit 非常坚定:如果我重新发布我的开源项目,他们就会聘请“顶级律师”起诉我。



Replit 做的对吗?

Replit 声称我的开源项目是:


1. 抄袭 Replit;


2. 抄袭他们的商业秘密(“内部设计决策”);


3. 不道德。


下面,我们来逐个看看他们的这些说法:


1. 在开发项目的时候,我克隆 Replit 了吗?


2. 在开发项目的时候,我利用任何 Replit 的商业秘密了吗?


3. 在他们公司工作过一段时间后,我开发一个类似于 Replit 的开源项目,就是不道德?


问题 1 和问题 2 涉及很多技术细节,总的来说:


1. 如果说我的项目抄袭了 Replit,那么网上的其他项目呢?网上搜索的结果有 15 个之多(而且是商业项目!)。你只需要搜索一下“在线运行 python”(run python online)或“在线编程环境”(online programming environment)就知道了。


2. 通过 GitHub 代码库和 Replit 在线发布的博客文章就可以找出我的项目和 Replit 之间的每一个相似之处,这显然不是什么秘密。


下面,我们再来说一说问题 3:在他们公司工作过一段时间后,我开发一个类似于 Replit 的开源项目,就是不道德?


在我看来,这个问题的答案是“否”,原因有以下几个:


  • 我的项目 Riju 完全是非商业性质的。与 Replit 不同,我没有从任何资金来源:广告、捐赠、集资、订阅等等。我对商业经营没有兴趣,而且也从来没想过有一天我的项目会非常流行,因为服务器的费用都是我个人支付的。

  • 我的项目 Riju 并没有挖走任何 Replit 的客户。根据我的分析数据,2月份 Riju 共收到了38次访问(其中一半可能是我自己)。然而,Replit 拥有 700 多万用户。显然,Riju 不可能与 Replit 竞争。

  • 我的项目 Riju 的建立初衷根本不是为了成为Replit 的竞争对手。由于我的架构仅限于在单个服务器上运行,因此只要任何人向我扔一个 fork 炸弹,我的整个系统都会崩溃。如果我想设计一个能与 Replit 竞争的产品,绝不会选择如此儿戏的架构。

  • Replit 的核心价值主张不是在线运行代码(许多网站都有此类免费的服务),而是提供附加功能。而我的项目 Riju 根本没有这些功能,比如:用户账号、保存工作成果、分享工作成果、发布 Web 应用、永久的工作空间、论坛、与 GitHub 集成等等。

  • 在开发 Riju 的时候,我对 Replit 没有任何恶意,也没有试图隐藏任何东西。从一开始,我就通过 GitHub 公开了该项目,而 Replit 发现这个项目,也是因为我主动与他们分享了我的项目,希望他们能够从我的产品中获得一些灵感。

  • 我从未想过将 Riju 打造成一款产品,这只不过是我个人的实验或艺术品。我甚至花了几十个小时添加了 Hexagony 和 SNOBOL 等语言。


我不是一个商人,我只是一个开源开发者,喜欢为了好玩而构建奇怪的东西。只要翻看一下我的网站项目列表(https://intuitiveexplanations.com/about/projects),就可以发现我没有构建过任何赚钱的产品。


我从未想过抄袭任何人的商业构思。伤害 Replit 并不是我构建 Riju 的目的,但他们却对我妄加指责(尤其是没有澄清问题,并拒绝讨论),在我看来,Replit 有很大的恶意。



为什么 Replit 会有如此行为?

Replit 所倡导的思想包括:


  • 鼓励开源开发。例如,部分开源技术,为 Replit 添加 GitHub 支持;Replit 的 CEO还声称:“我的整个职业生涯都应归功于开源”(https://web.archive.org/web/20210108083314/https://amasad.me/github)。

  • 回馈社区(https://web.archive.org/web/20210504051428/https://blog.replit.com/upm)。

  • 降低分享与创作的难度。例如,Replit 的 CEO 在学习编程时曾说:“我会下载相关的项目……并进行相应的修改,以及获取灵感。”(https://web.archive.org/web/20210522215545/https://blog.replit.com/github)


然而,此次事件暴露了 Replit 的虚伪:


  • 他们说他们鼓励开源开发,但是当我的开源项目冒犯了他们时,他们就采用极端偏激的手法要求我立即关闭项目。

  • 他们声称通过希望开源和博客文章回馈社区,但是当我在社区项目中使用这些想法时,他们威胁要起诉我。

  • 他们说他们希望降低分享与创作的难度,但是当我尝试借鉴 Replit 构建新项目时,却成为了他们的眼中钉。


在 Replit 给我的电子邮件中,他们的威胁基于这样一个事实:我曾在他们公司工作。但是,我认为这又是一个烟雾弹。为什么?我们来看看在我收到威胁的电子邮件后,Replit 的首席执行官 Amjad 发布的推文:




后来,由于引发了争论,Amjad 删除了这些推文:



在这些推文中,Amjad 指出 Athens Research 受到了另一家公司的启发,并认为因此他们应该被诟病,并禁止接受资助。此外,他说:“我对于抄袭者的看法非常坚定”,他鄙视所有他认定的“抄袭者”,而不仅仅是他推文中的某个公司。


Amjad 对 Athens Research 的评论,与我的项目收到的威胁有明显的相似之处。他甚至使用了同一个词:“copycat”(抄袭者)。对于 Athens Research,除了在推特上诋毁他们之外,Amjad 也别无他法。但就因为我曾在 Replit 工作过,所以 Amjad 就能对我提出起诉了。对于不了解此事情前后的人来说,这些指控看起来像是很合法。


最后,我还要重申一次:Replit 利用“顶级律师”和“大量资金”威胁一个没有公司、没有资金、没有商业野心、刚刚从大学毕业的人。如果是一个真正的商业企业冒犯到 Replit,我不敢想象他们会受到怎样对待。



Replit 给予这篇博文的回应

在我发布这篇博文之后,在 Hacker News 上引起了广泛的讨论。后来,Amjad 在 Hacker News 上发表了道歉声明,又引发了新一轮的讨论。



后来,他还联系我,想与我通话,我自然同意了:



在通话过程中,Amjad 向我道歉了,但他重申他认为我克隆了 Replit,而且认为我的行为不道德。最终,我们无法在这件事上达成一致,但他以书面形式承诺,同意我重新启动我的项目:



回想起来,我对 Amjad 有点失望:


  • 他没有因为威胁我的事情而向我道歉(甚至没有提及),也没有在电话结束后更新帖子;

  • 他没有因为公开转发指控我“窃取和发布 IP”而道歉(甚至没有提及),尽管他删除了转发;

  • 他没有因为对我进行人身攻击而道歉(甚至没有提及),尽管前面曾提到十分需要我;

  • 在电话中,在“道歉”之后,他觉得就好像他邀请我去他家,而我却背叛了他的信任;

  • 即使我在电话中多次询问,他依然拒绝了详细说明我究竟复制 Replit 的哪一部分,他坚持声称我复制 Replit 的行为很不道德,无论是私下还是公开场合;

  • 他断章取义,引用我说过的话,让人看起来好像是我同意他的指控。


总而言之,我以为我们本可以更好地处理这件事。


尽管如此,我仍然很高兴我们能够和解,而且我也非常期待接下来的生活,包括重启我的项目 Riju。



网友评论

评论 1:


怎么感觉你被一个 CEO 欺负了。他指责你行为不端,还威胁要请律师告你。他只不过是连哄带吓唬,迫使你关闭项目,结果真奏效了。


我想对所有读者说,不要害怕律师。律师不喜欢败诉,也不喜欢接会败诉的案子。然而,他们必须按照客户的要求行事,因此他们会调查问题,甚至发送恶意邮件。但是这些都没有关系。只有当律师真正接下案子,才有意义。在此之前的一切都是装腔作势和欺凌。


如果遇到相同的情况,我绝不会承认错误,不道歉,无视他们的邮件(尤其是人身攻击),然后任由事态发展,直到他们采取某种实际的行动。


同时,也需要有心理准备,如果真的打起官司来,无疑是劳民伤财,对双方都没有好处。最好看一看雇佣合同,有无这方面的明确声明。一方面遵纪守法,一方面也不要被别人不成熟的行为吓到。


评论 2:

Replit 好歹也是一家资金雄厚的公司,怎么就被一个实习生的业务项目给吓到了,真是有趣。如果他们的护城河这么低,几天之内就可以复制,那么恐怕他们需要担心的不止是这一个开源项目了。


原文:https://intuitiveexplanations.com/tech/replit/


本文为 CSDN 翻译,转载请注明来源出处。





☞万物互联的千亿级通信云市场,开发者机会在哪里

☞乔布斯当年是这样面试我的,你能挺到哪一步?

☞40 万年薪招应届生?OPPO 狂揽芯片人才,应届生招聘行情究竟如何?

☞腾讯迈出反内卷第一步:强制员工 6 点下班,周末双休,你羡慕了吗?

☞“搏一搏,单车变摩托!”华为天才少年耗时四个月,将自行车强势升级为自动驾驶




推荐阅读
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
author-avatar
翡翠雕刻师李贵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有