«Я думаю, вам следует закрыть проект и прекратить работать над ним. Я привлеку наших адвокатов в понедельник, если к тому времени вы не выполните условия. [...] Мы были крошечной компанией, когда вы стажировались у нас [...] К счастью, сейчас мы намного больше, и, что очень важно, у нас есть много денег, чтобы заплатить за лучших юристов, если мы будем вынуждены пойти по этому пути.»
— из переписки с CEO Replit


image


UPD: Я получил официальный ответ от Replit, и мой проект с открытым исходным кодом скоро вернется; пожалуйста, просмотрите нижнюю часть сообщения в посте для получения обновлений. Остальной контент здесь останется как исторический артефакт.

Привет, меня зовут Радон. В прошлом году я окончил колледж и теперь работаю программистом в DevOps/инфраструктуре. В свободное время я также поддерживаю ряд проектов с открытым исходным кодом.

Когда я учился в колледже, я стажировался в стартапе Replit. Это история о том, как Replit использует юридические угрозы и свое венчурное финансирование, чтобы заставить меня закрыть проект с открытым исходным кодом, который им не нравится.

Про Replit


Replit делает веб-приложение, которое вы можете использовать для запуска кода в Интернете на разных языках программирования. В этом нет ничего нового (загуглите «запустить python онлайн» для доказательства), поэтому ценностное предложение Replit — это дополнительные функции, такие как совместная работа, установка сторонних пакетов и размещение веб-приложений.

Я работал в Replit летом 2019 года, где меня попросили переделать стек управления пакетами Replit и сделать его open-source. Если вам нравится читать о технических вещах, вот мой пост для блога Replit, и вот код на GitHub.

Летом 2020 года я устроился на работу в другое место, но все еще время от времени общался с ними по электронной почте, когда они обращались ко мне, чтобы рассказать о чем-то крутом, разработанном Replit.

Про мой open-source проект


image
В 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


Однажды я получил от них электронное письмо, в котором они сообщили мне о новой функции, которую они выпустили. Я решил, что сейчас самое подходящее время поделиться с ними своим проектом с открытым исходным кодом, на случай, если они захотят черпать вдохновение в какой-либо из моих работ:

image

Сначала я получил позитивный оклик. Но потом, 30 минут спустя, из ниоткуда, Replit обвинил меня в неэтичном поведении и краже их дизайна:

image

Ни одна из идей, которые я использовал в своем проекте с открытым исходным кодом, не была «внутренними дизайнерскими решениями»: все они были опубликованы публично в блоге Replit (я знал это, потому что меня попросили написать некоторые из этих постов в блоге во время моей стажировки). И мой проект был похож на клон Replit, не больше, чем любой другой веб-сайт на первых нескольких страницах выдачи Google для «run python online», большинство из которых выглядят точно так же:

image

Но я подумал, что я что-то пропустил, поэтому запросил подробности:

image

(Остальная часть этого письма в основном повторяет предыдущий абзац этой статьи, но с гораздо более техническими подробностями. Вы можете прочитать всю переписку на Imgur, или в интернет-архиве.)

К сожалению, они отказались предоставить какие-либо конкретные сведения о том, что, по их словам, я сделал неправильно, повторили свои предыдущие заявления и пригрозили мне судебным иском:

image

А затем, вишенка на торте, Replit отправил мне еще одно электронное письмо, напомнив, что они только что привлекли 20 миллионов долларов от своих инвесторов в прошлом месяце, и они не боялись использовать это против меня. “you”, о котором идет речь, — это один из их предыдущих стажеров, который только что окончил колледж год назад и который вообще не занимается какой-либо коммерческой деятельностью.

image

Я хотел бы отметить две вещи об этом письме:

  • Замечание о «commits like this» — это на самом деле вводит в заблуждение. В моем проекте есть только один коммит, в котором упоминается Replit, и это тот, который я уже показывал вам ранее, начиная с моего третьего дня кодирования, когда я только что добавил все 38 языков, поддерживаемых Replit, прежде чем перейти к 178 другим языкам, которые я хотел добавить.
  • Замечание о том, что я «demanding» стажер — я на самом деле не уверен, что это означает, тем более, что Replit только что пытался завербовать меня ранее в тот же день (см. Скриншот их первого письма). Но я оставлю это в покое, потому что это не имеет отношения к рассматриваемому вопросу.


Что произошло после того, как Replit пригрозил подать на меня в суд


Естественно, я сразу скрыл свой проект, подождал некоторое время, чтобы чувства остыли, и послал Replit извинения. Я подумал, что, возможно, что-то было потеряно по электронной почте, поэтому попросил созвониться:

image

Увы, Replit проигнорировал это письмо, поэтому отправил им еще одно. На это я получил ответ, но не тот, на который я надеялся:

image

На всякий случай, если Replit не понял, что я доволен сложившейся ситуацией, я отправил три последующих письма с объяснениями в течение следующих нескольких недель, все из которых были проигнорированы.

Другими словами, позиция Replit прежняя: если я переопубликую свой проект с открытым исходным кодом, они подадут на меня в суд с «топовыми юристами».

Прав ли Replit


Replit утверждал, что мой проект с открытым исходным кодом был:

  1. клоном Replit
  2. основывался на их коммерческой тайне (внутреннем проектном решении)
  3. неэтичен


Разберем эти утверждения по частям:

  1. Разрабатывая свой проект, делал ли я клон Replit?
  2. Разрабатывая свой проект, я использовал какие-либо коммерческие секреты Replit?
  3. Было ли неэтично с моей стороны разрабатывать проект с открытым исходным кодом, похожий на Replit, после работы на них?


Вопросы 1 и 2 содержат довольно много технических деталей, поэтому я поместил их в отдельный пост. Вот TL;DR по этим вопросам:

  1. Мой проект не более похож на Replit, чем 15 других (коммерческих!) проектов, которые вы можете найти в Google, вбив в поиск “run python online” или “online programming environment”.
  2. Любое сходство между моим проектом и 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, опубликовал сразу после того, как угрожал мне по электронной почте:

image


image


Позже Амджад удалил эти твиты, потому что они оказались противоречивыми:

image


В этих твитах Амджад указывает, что Athens Research было явно вдохновлено другой компанией, и утверждает, что поэтому их следует «высмеять» и запретить получать финансирование. Кроме того, он говорит: «Я придерживаюсь того, что я сказал о copycats в целом», то есть он презирает всех людей, которые, по его мнению, «copycat» существующие проекты, а не только конкретную компанию в своем твите.

Существует явное сходство между комментариями Амджада по поводу Athens Research и его юридическими угрозами в отношении моего собственного проекта. Он даже использовал в обоих случаях одно и то же слово — «copycat». В случае с Athens Research Амджад ничего не мог сделать, чтобы выразить свое презрение, кроме как очернить их в Твиттере. Но в моем случае, поскольку я раньше работал в Replit, у Амджада был повод бросить мне обвинения — обвинения, которые, если вы не знакомы с фактами, звучат так, как будто они могут быть законными.

Я также хотел бы повторить, что человек, которому Replit угрожает «лучшими юристами» и «большими деньгами», — это свежеиспеченный выпускник без компании, без финансирования и без коммерческих амбиций. Если бы кто-то с реальной коммерческой компанией обидел Replit, я содрогаюсь при мысли о том, какое ответ они могли бы получить.

Как Replit отреагировал на мой пост на HackerNews


После того, как я опубликовал статью утром, она широко обсуждалась в Hacker News. Около 17:00 Амджад опубликовал в Hacker News извинения.

image


Он также попросил запланировать звонок, на что я, естественно, согласился:

image

Во время созвона Амджад извинился за юридические угрозы, но повторил, что, по его мнению, я сделал клон Replit и действовал неэтично. В конце концов мы согласились не соглашаться, и он письменно пообещал, что не возражает против того, чтобы я вернул свой проект обратно:

image

Я счастлив, что мы смогли разрешить эту ситуацию по-хорошему, и я с нетерпением жду продолжения моей жизни — включая восстановление Riju, после того как я снова смогу строить вещи :)

Мир.