笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
Replit 如何用法律威胁扼杀我的开源项目
一家风投支持的初创公司,用法律威胁和资本优势,迫使一名前实习生关闭其开源项目。
Replit 如何用法律威胁扼杀我的开源项目
背景:我是谁
大家好,我叫 Radon。去年刚从大学毕业,目前在一家公司的 DevOps/基础设施团队做软件工程师。业余时间,我维护着几个开源项目。大学期间,我曾在初创公司 Replit 实习。这篇博客,就是关于 Replit 如何利用法律威胁和风险投资资金,来霸凌我关停一个他们不喜欢的开源项目的故事。
Replit 是什么?
Replit 提供了一个网页应用,让你可以在线运行各种编程语言的代码。这其实不是什么新鲜事(Google 搜索“run python online”就能看到一大堆),所以 Replit 的价值主张在于额外功能,比如分享你的工作、安装第三方包、托管 Web 应用等。
2019 年夏天,我在 Replit 实习,当时被要求重建 Replit 的包管理栈,并将其开源。如果你对技术细节感兴趣,这是我为 Replit 博客写的文章,代码在 GitHub 上。2020 年夏天我去了别的公司,但偶尔还会通过邮件跟他们聊聊,他们有时会告诉我 Replit 开发了什么新东西。
我的开源项目是什么?
Replit 真正吸引我的地方,是它对多种编程语言的支持。(我还为 Replit 写过另一篇博客讲他们是怎么做到的。)这让我思考:一个网站究竟能塞进多少种编程语言?
为了探索这个问题,我动手做了一个自己的小 Web 应用,用来在线运行代码。大约一天后,就有了能跑的东西。(如果你好奇为什么这么快——其实只需要 30 行代码就能让人们在 Web 应用里运行 Python 代码!这可能也是为什么网上有那么多“在线运行 Python”的网站……)
跑通之后,我开始疯狂地添加各种编程语言。从我的项目版本历史就能看出来,我有点过于兴奋了:
语言数量
2020-06-05 df9ba38 初始提交 0
2020-06-05 5e3a4a4 在 Docker 镜像中安装一些包 0
2020-06-05 e937c8f 简单的 Express 服务器,带 Hello world 0
2020-06-06 0961498 在前端嵌入终端 0
2020-06-06 c66cf63 在前端嵌入 Monaco 编辑器 0
2020-06-06 27ab1f7 添加“运行”按钮 0
2020-06-06 f417858 现在可以运行 Python 代码了 1
2020-06-07 d543081 现在可以运行多种语言了 8
2020-06-07 e2a3e71 所有语言 17 种正常工作 17
2020-06-07 473c50c 所有语言! 25
2020-06-08 3718315 更多语言 33
2020-06-08 548c1c1 repl.it 优越性!! 38
2020-06-08 1ae424f 更多语言,我们需要所有语言 48
2020-06-09 c34ccf2 很多语言 77
2020-06-09 846caf2 此时语言数量已经荒谬了 79
最终我达到了 216 种语言,包括 Replit 支持的全部 38 种语言、Yusuke Endoh 的“Quine Relay”项目中的全部 100 种语言,以及其他许多语言。你可能会问:我为什么要花这么多时间,往一个没人用的 Web 应用里添加冷门编程语言?嗯,换个角度想:这算是你见过的 2020 年最奇怪的爱好吗?
当我把项目分享给 Replit 时发生了什么?
有一天,我收到 Replit 的邮件,告诉我他们发布了新功能。我觉得这是个好时机,把我的开源项目分享给他们,万一他们能从我的工作里获得灵感呢:
起初,我得到了积极的回应。但 30 分钟后,Replit 突然指责我行为不道德,窃取了他们的设计。
他们说我的项目是“基于 Replit 内部设计决策的克隆”,并要求我下架。我回复说,我项目中使用的所有想法都不是什么“内部设计决策”——它们都已经公开发布在 Replit 的博客上了(我知道这一点,因为其中一些博客文章还是我实习时被要求写的)。而且,我的项目并不比 Google 搜索“run python online”前几页的其他网站更像 Replit 的克隆,那些网站看起来都一模一样。
但我觉得自己可能确实漏掉了什么,于是请求他们给出具体说明。不幸的是,Replit 拒绝提供任何细节,只是重复之前的说法,并威胁要起诉我。
然后,最过分的是,Replit 又发了一封邮件,提醒我他们上个月刚从投资人那里筹集了 2000 万美元,而且他们不怕用这笔钱来对付我。这里的“我”指的是他们之前的一名实习生,刚毕业一年,根本没有在运营任何商业项目。
我想指出这封邮件的两个问题:
- “像这样的提交”——这其实有误导性。我的项目中只有一个提交提到了 Replit,就是我之前展示的那个,那是我编码第三天添加的,当时我刚加入 Replit 支持的 38 种语言,之后我又添加了 178 种其他语言。
- “苛刻的实习生”——我不太确定这暗示什么,尤其是 Replit 当天早些时候还在试图招募我(看他们第一封邮件的截图)。但这不是重点,我就不多说了。
被威胁起诉后发生了什么?
自然,我立刻下架了项目,让情绪冷静了一下,然后给 Replit 发了一封道歉信。我以为是邮件沟通出了问题,所以请求打个电话沟通。
不幸的是,Replit 无视了这封邮件。我又发了一封跟进邮件,这次得到了回复,但不是我希望的那种。他们坚持之前的立场:如果我再发布这个开源项目,他们就会用“顶级律师”起诉我。
接下来的几周里,我又发了三封跟进邮件,表达我对这种情况的不满,但全部被无视了。换句话说,Replit 坚持他们的威胁:如果我重新发布我的开源项目,他们就会用“顶级律师”起诉我。
Replit 是对的吗?
Replit 声称我的开源项目:
- 是基于他们商业秘密(“内部设计决策”)的 Replit 克隆
- 开发它是“不道德”的
让我们逐条审视这些说法:
问题 1 和 2:我是否在克隆 Replit?是否使用了他们的商业秘密?
这两个问题涉及大量技术细节,我放在了单独的文章里。简而言之:我的项目与 Replit 的相似程度,并不比 Google 上搜索“run python online”或“在线编程环境”找到的其他 15 个(商业化的!)网站更高。我的项目与 Replit 之间的每一个相似点,都可以仅通过 Replit 自己在网上公开发布的 GitHub 仓库和博客文章来解释,这些显然不是什么秘密。
问题 3:为 Replit 工作后,开发一个类似的开源项目是否不道德?
这是一个更复杂的问题。我实习时参与的是 Replit 的包管理栈,而我的项目是一个在线代码运行器。两者在技术上有关联,但我的项目并不是 Replit 任何商业产品的替代品。
更重要的是,作为实习生,我从未签署过任何保密协议(NDA)或竞业禁止协议。我为 Replit 写的博客文章,是 Replit 明确要求并公开的。我的项目代码是我自己从零写的,没有复制任何 Replit 的代码。
在科技行业,工程师离职后创建与老东家类似的开源项目,是非常普遍且合法的行为。GitHub 上充满了这样的例子。如果 Replit 认为我的项目侵犯了他们的权益,他们完全可以通过法律途径解决,而不是用威胁和恐吓。
Replit 为什么要这样做?
我认为有几个可能的原因:
竞争焦虑:Replit 是一家快速成长的初创公司,他们可能担心任何类似的工具都会分散用户注意力。尽管我的项目只是一个非商业的开源玩具,但他们可能把它视为潜在威胁。
资本傲慢:Replit 刚刚融了 2000 万美元,他们可能觉得可以用钱来压人。他们明确提到了“顶级律师”和“很多钱”,这显然是一种恐吓策略。
内部流程混乱:Replit 可能没有一个清晰的流程来处理这类事情。他们先是积极回应,然后 30 分钟内就翻脸,这说明内部可能有人反应过度或误解了情况。
Replit 对这篇博客的回应是什么?
我在发布这篇博客后,收到了 Replit 的官方回应。他们表示愿意重新审视这个问题,并最终允许我重新发布项目。我的开源项目(Riju)很快就恢复了上线。
我收到了 Replit 的官方回应,我的开源项目很快会重新上线;请看博客底部的更新。本文其余内容将作为历史记录保留。
所以 Riju 现在重新上线了吗?
是的,Riju 已经重新上线了。你可以访问 riju.codes 查看。
反思
这件事让我学到了几个重要的教训:
- 大公司的法律威胁是真实的:即使你只是一个小开发者,没有任何商业意图,只要你的项目碰触到大公司的利益,他们可能会毫不犹豫地动用法律手段。
- 开源社区的脆弱性:开源项目往往建立在个人时间和热情之上,而大公司可以用法律和资金轻易地压制它们。
- 保持记录的重要性:我保留了所有邮件往来和项目历史,这让我能够清晰地还原整个事件。
- 公开沟通的力量:这篇博客发布后,Replit 迅速改变了态度。公开曝光可能比私下沟通更有效。
最终,我希望我的经历能给其他开源开发者一些警示:当你与大公司产生交集时,要小心保护自己,但也不要因为恐惧而放弃做正确的事。开源精神值得捍卫。
本文基于 Radon 的博客文章翻译改写,原文链接:https://intuitiveexplanations.com/tech/replit/