[Перевод] Как Replit отжимает мой open-source проект
«Я думаю, вам следует закрыть проект и прекратить работать над ним. Я привлеку наших адвокатов в понедельник, если к тому времени вы не выполнитте условия. […] Мы были крошечной компанией, когда вы стажировались у нас […] К счастью, сейчас мы намного больше, и, что очень важно, у нас есть много денег, чтобы заплатить за лучших юристов, если мы будем вынуждены пойти по этому пути.»
— из переписки с CEO Replit
Привет, меня зовут Радон. В прошлом году я окончил колледж и теперь работаю программистом в DevOps/инфраструктуре. В свободное время я также поддерживаю ряд проектов с открытым исходным кодом.
Когда я учился в колледже, я стажировался в стартапе Replit. Это история о том, как Replit использует юридические угрозы и свое венчурное финансирование, чтобы заставить меня закрыть проект с открытым исходным кодом, который им не нравится.
Про Replit
Replit делает веб-приложение, которое вы можете использовать для запуска кода в Интернете на разных языках программирования. В этом нет ничего нового (загуглите «запустить python онлайн» для доказательства), поэтому ценностное предложение Replit — это дополнительные функции, такие как совместная работа, установка сторонних пакетов и размещение веб-приложений.
Я работал в Replit летом 2019 года, где меня попросили переделать стек управления пакетами Replit и сделать его open-source. Если вам нравится читать о технических вещах, вот мой пост для блога Replit, и вот код на GitHub.
Летом 2020 года я устроился на работу в другом месте, но все еще время от времени общался с ними по электронной почте, когда они обращались ко мне, чтобы рассказать о чем-то крутом, разработанном Replit.
Про мой open-source проект
В Replit мне действительно понравилась поддержка множества различных языков программирования. (Я написал еще один пост в блоге Replit о том, как они это делают.) И я задумался: сколько языков программирования можно запихнуть в один веб-сайт?
Чтобы изучить этот вопрос, я собрал свое собственное небольшое веб-приложение, которое могло бы запускать код в Интернете. Примерно через день у меня появилось кое-что, что заработало. (Если вам интересно, почему это было так быстро — оказывается, вам нужно всего 30 строк кода, чтобы люди могли запускать Python в веб-приложении! Возможно, именно поэтому существует так много веб-сайтов для запуска Python в Интернете…)
После того, как это сработало, я начал добавлять столько различных языков программирования, сколько мог найти. Как вы можете видеть из этого отрывка истории версий моего проекта, я немного перевозбудился:
2020–06–05 df9ba38 Initial commit — 0 (количество языков)
2020–06–05 5e3a4a4 Install some packages into a Docker image — 0
2020–06–05 e937c8f Simple Express server with «Hello world» — 0
2020–06–06 0961498 Embed terminal on frontend app — 0
2020–06–06 c66cf63 Embed Monaco editor on frontend — 0
2020–06–06 27ab1f7 Add «run» button — 0
2020–06–06 f417858 You can run Python code now — 1
2020–06–07 d543081 You can run many languages now — 8
2020–06–07 e2a3e71 All languages 17 working now — 17
2020–06–07 473c50c ALL THE LANGUAGES — 25
2020–06–08 3718315 even more languages — 33
2020–06–08 548c1c1 repl.it superiority!!! — 38
2020–06–08 1ae424f More languages, we need all the languages — 48
2020–06–09 c34ccf2 A lot more languages — 77
2020–06–09 846caf2 At this point the number of languages is absurd — 79
В конце концов я добавил 216 языков, включая все 38 языков из Replit, все 100 языков из «Quine Relay» Юсуке Эндо и многое другое. Вы можете спросить: почему я потратил так много времени на добавление непонятных языков программирования в веб-приложение, которое никто не собирался использовать? Ну, позвольте мне сказать так: это ли самое странное хобби 2020 года, которое вы видели?
Что произошло, когда я рассказал о своем проекте сотрудникам Replit
Однажды я получил от них электронное письмо, в котором они сообщили мне о новой функции, которую они выпустили. Я решил, что сейчас самое подходящее время поделиться с ними своим проектом с открытым исходным кодом, на случай, если они захотят черпать вдохновение в какой-либо из моих работ:
Сначала я получил позитивный оклик. Но потом, 30 минут спустя, из ниоткуда, Replit обвинил меня в неэтичном поведении и краже их дизайна:
Ни одна из идей, которые я использовал в своем проекте с открытым исходным кодом, не была «внутренними дизайнерскими решениями»: все они были опубликованы публично в блоге Replit (я знал это, потому что меня попросили написать некоторые из этих постов в блоге во время моей стажировки). И мой проект был больше похож на клон Replit, не больше, чем любой другой веб-сайт на первых нескольких страницах выдачи Google для «run python online», большинство из которых выглядят точно так же:
Но я подумал, что я что-то пропустил, поэтому запросил подробности:
(Остальная часть этого письма в основном повторяет предыдущий абзац этой статьи, но с гораздо более техническими подробностями. Вы можете прочитать всю переписку на Imgur, или в интернет-архиве.)
К сожалению, они отказались предоставить какие-либо конкретные сведения о том, что, по их словам, я сделал неправильно, повторили свои предыдущие заявления и пригрозили мне судебным иском:
А затем, вишенка на торте, Replit отправил мне еще одно электронное письмо, напомнив, что они только что привлекли 20 миллионов долларов от своих инвесторов в прошлом месяце, и они не боялись использовать это против меня. «you», о котором идет речь, — это один из их предыдущих стажеров, который только что окончил колледж год назад и который вообще не занимается какой-либо коммерческой деятельностью.
Я хотел бы отметить две вещи об этом письме:
- Замечание о «commits like this» — это на самом деле вводит в заблуждение. В моем проекте есть только один коммит, в котором упоминается Replit, и это тот, который я уже показывал вам ранее, начиная с моего третьего дня кодирования, когда я только что добавил все 38 языков, поддерживаемых Replit, прежде чем перейти к 178 другим языкам, которые я хотел добавить.
- Замечание о том, что я «demanding» стажер — я на самом деле не уверен, что это означает, тем более, что Replit только что пытался завербовать меня ранее в тот же день (см. Скриншот их первого письма). Но я оставлю это в покое, потому что это не имеет отношения к рассматриваемому вопросу.
Что произошло после того, как Replit пригрозил подать на меня в суд
Естественно, я сразу скрыл свой проект, подождал некоторое время, чтобы чувства остыли, и послал Replit извинения. Я подумал, что, возможно, что-то было потеряно по электронной почте, поэтому попросил созвониться:
Увы, Replit проигнорировал это письмо, поэтому отправил им еще одно. Этот получил ответ, но не тот, на который я надеялся:
На всякий случай, если Replit не понял, что я доволен сложившейся ситуацией, я отправил три последующих письма с объяснениями в течение следующих нескольких недель, все из которых были проигнорированы.
Другими словами, позиция Replit прежняя: если я переопубликую свой проект с открытым исходным кодом, они подадут на меня в суд с «топовыми юристами».
Прав ли Replit
Replit утверждал, что мой проект с открытым исходным кодом был:
- клоном Replit
- основывался на их коммерческой тайне (внутреннем проектном решении)
- неэтичен
Разберем эти утверждения по частям:
- Разрабатывая свой проект, делал ли я клон Replit?
- Разрабатывая свой проект, я использовал какие-либо коммерческие секреты Replit?
- Было ли неэтично с моей стороны разрабатывать проект с открытым исходным кодом, похожий на Replit, после работы на них?
Вопросы 1 и 2 содержат довольно много технических деталей, поэтому я поместил их в отдельный пост. Вот TL; DR по этим вопросам:
- Мой проект не более похож на Replit, чем 15 других (коммерческих!) проектов, которые вы можете найти в Google, вбив в поиск «run python online» или «online programming environment».
- Любое сходство между моим проектом и Replit можно объяснить, взглянув только на репозитории GitHub и сообщения в блогах, которые были опубликованы в Интернете самим Replit, что очевидно делает не секретными.
Давайте ответим на вопрос 3 здесь:
Вопрос: Было ли неэтично с моей стороны разрабатывать проект с открытым исходным кодом, похожий на Replit, после работы на них?
На мой взгляд, ответ на этот вопрос «нет», на то есть ряд причин:
- Riju полностью некоммерческая организация. В отличие от Replit, я не искал финансирования из какого-либо источника, рекламы, пожертвований, сбора средств, подписки, чего угодно. Я не заинтересован в ведении бизнеса и никогда не хотел, чтобы Riju стал слишком популярным, так как именно я оплачивал счет за сервер.
- Riju не крал клиентов у Replit. Основываясь на моих аналитических данных, в феврале у Riju было 38 посещений. (Половина из них, вероятно, была моих.) Между тем, у Replit более 7 миллионов пользователей. Очевидно, нет никакого смысла в конкуренции Riju с Replit.
- Riju также не был построен как конкурент для Replit. Поскольку архитектура была ограничена запуском на одном сервере, любой мог вывести из строя всю систему, просто введя fork bomb — и один из моих друзей сделал это, просто чтобы посмотреть, что произойдет. (Система вышла из строя.) Если бы я разрабатывал продукт, чтобы конкурировать с Replit, я, конечно, не выбрал бы архитектуру, которую можно масштабировать до размера игрушечного проекта.
- Основная ценность Replit — не про запуск код онлайн (вы можете сделать это в десятках мест бесплатно). Их конкурентное предложение — это функции, которые они предлагают помимо запуска кода. Riju категорически не хватало всех этих функций, включая: наличие учетной записи пользователя, сохранение вашей работы, совместное использование вашей работы, публикацию веб-приложений, постоянные рабочие пространства, дискуссионные форумы, интеграцию с GitHub и так далее.
- У меня не было злого умысла по отношению к Replit, когда я разрабатывал Riju, и я не пытался ничего скрывать. В качестве доказательства этих утверждений я напоминаю, что я с самого начала опубликовал проект на своем GitHub. Обратите внимание, что Replit узнал о моем проекте, потому что я открыто поделился им с ними по собственной воле, предложив им черпать вдохновение из моей работы.
- Riju никогда не задумывался как продукт. Он был задуман как личное пространство для игры, или как произведение искусства. В качестве доказательства этого утверждения я предлагаю тот факт, что я потратил десятки часов на добавление таких языков, как Hexagony и SNOBOL, а не на то, чтобы вы могли сохранить свою работу (!).
Я не бизнесовый человек. Я просто open-source разработчик, который любит создавать странные вещи для удовольствия. (Если вы сомневаетесь в моем опыте создания вещей, которые не приносят денег, просто ознакомьтесь со списком на моем веб-сайте и обратите внимание на заметное отсутствие чего-либо, что когда-либо приносило хоть цент дохода.)
Я бы никогда не попытался украсть чей-то бизнес после того, как работал с ними. Причинение вреда Replit не входило в мои намерения при работе над Riju, и обвинять меня в обратном, особенно не задавая ни одного уточняющего вопроса и отказываясь от всех предложений провести дискуссию, на мой взгляд, свидетельствует о большой недобросовестности со стороны Replit.
Если вы хотите сами решить, кто прав, я с удовольствием выложу все доказательства в открытую (за исключением кода, потому что Replit все еще обещает подать на меня в суд, если я это сделаю). Опять же, у меня есть отдельный пост со всеми техническими деталями. И вы также можете прочитать всю переписку между мной и Replit, в полном и сокращенном виде, на Imgur, зеркало в Internet Archive). (Технические подробности о Replit были отредактированы, а также любое утверждения, которые могут косвенно раскрыть такие детали.)
Зачем Replit это сделал?
Replit заявляет следующие идеалы:
Однако действия Replit в данном случае свидетельствуют о лицемерии:
- они говорят, что они поощряют open-source разработку, но когда мой проект с открытым исходным обидел их, они закрыли его, впав в предрассудки
- они утверждают, что помогали open-source сообществу, постили сообщения в блоге, но когда я попытался использовать эти идеи в общественном проекте, они угрожали подать на меня в суд
- они говорят, что они позволяют легко распространять, перерабатывать, исправлять свои творения, но когда я попытался сделать ремикс Replit под себя, я стал персоной нон-грата
В письмах Replit ко мне их угрозы основывались на том факте, что я работал на них в прошлом. Однако я считаю, что это рассуждение — ширма. Чтобы понять почему, давайте взглянем на некоторые твиты, которые CEO Replit, Amjad, опубликовал сразу после того, как угрожал мне по электронной почте:
Позже Амджад удалил эти твиты, потому что они оказались противоречивыми:
В этих твитах Амджад указывает, что Athens Research было явно вдохновлено другой компанией, и утверждает, что поэтому их следует «высмеять» и запретить получать финансирование. Кроме того, он говорит: «Я придерживаюсь того, что я сказал о copycats в целом», то есть он презирает всех людей, которые, по его мнению, «copycat» существующие проекты, а не только конкретную компанию в своем твите.
Существует явное сходство между комментариями Амджада по поводу Athens Research и его юридическими угрозами в отношении моего собственного проекта. Он даже использовал в обоих случаях одно и то же слово — «copycat». В случае с Athens Research Амджад ничего не мог сделать, чтобы выразить свое презрение, кроме как очернить их в Твиттере. Но в моем случае, поскольку я раньше работал в Replit, у Амджада был повод бросить мне обвинения — обвинения, которые, если вы не знакомы с фактами, звучат так, как будто они могут быть законными.
Я также хотел бы повторить, что человек, которому Replit угрожает «лучшими юристами» и «большими деньгами», — это свежеиспеченный выпускник без компании, без финансирования и без коммерческих амбиций. Если бы кто-то с реальной коммерческой компанией обидел Replit, я содрогаюсь при мысли о том, какое ответ они могли бы получить.