3 апреля на сайте InfoWorld вышла статья известного публициста на тему Open Source и юриста Matt Asay под названием «OpenTofu, возможно, демонстрирует нам, как не надо делать форк». Лидер-абзац в статье довольно жёсткий:
Не согласны с лицензией? Просто сделайте форк проекта, но не выкидывайте его код — говорите, что он всегда был доступен публично. Сравните код и лицензию HashiCorp с версией OpenTofu.
Автор, используя обороты вроде «возможно» и «судя по всему», довольно жёстко обвиняет сообщество OpenTofu в том, что они включили в своей проект часть кода Terraform, который доступен только под лицензией BUSL и не может быть свободно переиспользован, фактически вменяя разработчикам свободного проекта воровство.
Напомним, в августе 2023 года HashiCorp сменила лицензию на Terraform с MPLv2 на BUSL, не соответствующую критериям Open Source Initiative. После этого ряд игроков рынка сделал форк еще свободной версии Terraform и запустил проект, в итоге получивший название OpenTofu. Через некоторое время проект был передан в Linux Foundation и с тех пор развивался под крылом этой организации.
Ниже — главные мысли автора статьи (мы постарались сохранить стилистику).
OpenTofu — чрезвычайно многообещающий, но сложный в реализации проект. Настолько сложный, что OpenTofu, возможно, незаконно заимствовал код HashiCorp, чтобы не отставать от Terraform.
OpenTofu, судя по всему, удалил код Terraform, связанный с новой фичей, связанной с блоком removed
, впервые реализованной в Terraform версии 1.7, которая была выпущена уже под Business Software License (BUSL) — через несколько месяцев после создания самого OpenTofu. То есть разработчики OpenTofu взяли этот код, удалили заголовки и попытались перелицензировать его под публичной лицензией Mozilla (MPL 2.0).
Ребята, открытый исходный код работает не так. Вы можете не соглашаться с тем, какую лицензию выбрал правообладатель, но у вас нет права брать чужой код, а потом копировать его и менять лицензию.
OpenTofu был запущен в сентябре 2023 года с большой помпой и «официальными гарантиями» поддержки от более чем 140 организаций, среди которых Cloudflare, Harness, Oracle и GitLab. Конечно, основные мейнтейнеры в основном пришли от прямых конкурентов HashiCorp (Spacelift и env0), которые построили свой бизнес на Terraform и были расстроены сменой лицензии HashiCorp. Справедливо (тут автор явно использует сарказм — Прим. ред.).
К январю проект вовсю говорил о том, что OpenTofu уже доступен, даже несмотря на то, что в нём упоминались функции, которые ещё не были реализованы в Terraform и в самом OpenTofu должны были появиться позднее. Однако, несмотря на оптимистичное начало, команда вскоре начала осознавать сложность реализации этой функции. Безопасность — это сложно. (Возможно, ребята из HashiCorp, в конце концов, не были идиотами). Если такая скорость разработки звучит слишком хорошо и нереалистично, особенно учитывая, что за проектом стоит наспех собранная группа относительно небольших компаний (и ни одного из крупных поставщиков облачных технологий), возможно, так оно и было. В конце концов, что бы кто ни думал об изменении лицензии HashiCorp, компания потратила десятилетие на создание продукта. Инженерная мощь, стоящая за подобными усилиями, не проявится в течение нескольких месяцев, какими бы высокими ни были идеалы основателей.
В Terraform версии 1.7 HashiCorp представила важную новую функцию: автоматизация удаления ресурсов из state с использованием блока removed
, которая позволяет Terraform лучше управлять удалением ресурсов. Думайте об этом как о подходе, основанном на конфигурации к terraform state rm. Важно отметить, что эта функция была представлена в конце ноября 2023 года, то есть уже после перехода HashiCorp на BUSL. Если кто-то хотел использовать блок removed
для автоматизации удаления, он не мог использовать эту функцию так, будто бы она была выпущена под MPL.
К концу февраля 2024 года OpenTofu выпустил функциональность, аналогичную удалённой автоматизации блокировки от HashiCorp. Не только с точки зрения того, что она делает, но и с точки зрения кода, написанного для её выполнения. Взгляните на эти репозитории и скажите мне, если вы не видите того же самого:
-
remove_statement.go от Terraform и remove_statement.go от OpenTofu;
-
Terraform removed.go и OpenTofu removed.go;
-
remove_target_test.go от Terraform и remove_test.go от OpenTofu;
-
remove_target.go от Terraform и remove_endpoint_test.go от OpenTofu.
Закон об авторских правах сложен. По образованию я юрист, но не практикую, поэтому не могу считаться очень хорошим юристом. Важнее то, что OpenTofu, похоже, удалил некоторые комментарии в нескольких файлах. Возможно, они к тому же изменили пару строчек в нескольких местах. Возможно, кто-то даже мог бы утверждать, что OpenTofu на самом деле не использовал код Terraform, лицензированный BUSL. Возможно.
Однако такой аргумент становится менее убедительным, когда вы смотрите на заголовки OpenTofu в файлах. Вот заголовок, который HashiCorp использовал в своих файлах с кодом блока removed
:
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
А вот заголовок, который использовал OpenTofu:
// Copyright (c) 2023 HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
Видите проблему? OpenTofu признает, что использует код HashiCorp, но делает вид, что этот код лицензирован по MPL. Только это не так. Вообще. Весь этот код был выпущен после перевода Terraform на BUSL. В лучшем случае сообщество OpenTofu выдает желаемое за действительное, отчаянно надеясь, что оно сможет задним числом волшебным образом превратить код, лицензированный BUSL, в код, лицензированный MPL. В худшем случае разработчики OpenTofu обманным путём незаконно использовали интеллектуальную собственность HashiCorp и попытались присвоить её себе.
Что бы ни думали разработчики OpenTofu, такое поведение грубо противоречит позитивному «подходу, ориентированному на сообщество» и уж точно никак не демонстрирует «ценности открытого исходного кода», как провозглашается в пресс-релизе Linux Foundation. Это очень похоже на нарушение интеллектуальной собственности HashiCorp. Со стороны OpenTofu довольно логично не принимать новые лицензионные условия HashiCorp и форкать проект; однако с их стороны также совершенно незаконно брать код HashiCorp и применять к нему ту лицензию, которая им по душе.
А ещё это уж больно похоже на провал в менеджменте. Cloudflare, Oracle и другие компании никак не могли подписаться на такое поведение сообщества, но, похоже, именно это они и получают в итоге.
Пикантности этой статье добавляют три факта:
Matt Asay руководит DevRel-направлением в MongoDB — ещё одном Open Source-проекте, которой в недавнем прошлом сменил лицензию на не-Open Source.
Статья вышла до официального сообщения о том, что юристы HashiCorp отправили претензию сообществу OpenTofu. Возникает вопрос, откуда DevRel с юридическим, а не техническим бэкграундом выкопал все эти факты? В статье об этом, между прочим, — ни слова. Мем с Киселевым с канала «Россия» как нельзя кстати :)
OpenTofu — часть Linux Foundation, организации, у которой высокая репутация во всём мире: как среди инженеров, так и в бизнес-сообществе.
Обсуждения статьи в интернете
На самом сайте InfoWorld нельзя оставить комментарии, поэтому дебаты разгорелись на других площадках:
-
в Twitter у Matt Asay, где он поделился ссылкой на статью;
-
на Reddit;
-
в Slack-пространстве OpenTofu: первый тред, второй тред.
Причём реакция практически всех комментаторов была однозначной:
-
Статья написана слишком обвинительным тоном, при этом мнения второй стороны никто не спросил.
-
Реализация фичи отличается, а сходство будет просто в силу того, что реализуются одинаковые функции и реализуются они на Go, а этот язык дает не так много вариантов реализации одной и той же логики.
-
В заголовках файлов упоминаются авторские права HashiCorp, потому что так принято делать.
Мэтт, ты прекрасно всё знаешь сам. Именно так и происходит, когда ты делаешь форк. Форк всегда сохраняет предупреждения об авторских правах их прежнего проекта. И я посмотрел на код [обоих проектов]: то, что в них выглядит похоже, — просто следствие того, что они реализуют одну и ту же функциональность. А то, что в них выглядит по-разному, — я вижу как «разные SDE».
Эй, член core-команды OpenTofu здесь.
Заголовки с копирайтами в новых файлах необходимы, потому что иногда мы вынуждены перемещать код из старых файлов.
Больше информации — в этом посте.
А вот ещё несколько ответов от представителей сообщества:
Письмо от юристов из HashiCorp
Примерно через неделю после публикации этой статьи в LinkedIn проекта OpenTofu появился пост следующего содержания:
Проект OpenTofu недавно узнал о письме юристов HashiCorp, в котором утверждается, что OpenTofu не соблюдает условия лицензии BSL, регулирующей кодовую базу Terraform. Проект OpenTofu категорически не согласен с любыми предположениями о том, что он незаконно присвоил и неправильно использовал исходный код или иным образом нарушил лицензию BSL на продукт HashiCorp. На самом деле мы предполагаем, что HashiCorp может смешивать код, исходники которого ранее были открыты под лицензией MPL, и свежий код, опубликованный уже под BSL. Мейнтейнеры OpenTofu исследовали этот вопрос и намерены в ближайшие дни выпустить письменный ответ с более подробным объяснением своей позиции.
Саму претензию HashiCorp можно посмотреть по ссылке (pdf) — оказалось, что юристы прислали её ещё 3 апреля.
Ответ сообщества OpenTofu
11 апреля команда OpenTofu опубликовала долгожданный ответ — хотя к тому моменту уже мало кто сомневался, что OpenTofu не виноваты и обвинение было ложным. К ответу команда проекта приложила детальный анализ спорного кода на 46 страницах и скан официального ответа на претензию юристов HashiCorp.
Выдержка из статьи:
Команда OpenTofu категорически не согласна с любыми предположениями о том, что она незаконно присвоила, использовала неверные источники или иным образом неправильно использовала BSL-код HashiCorp. Все подобные заявления не имеют под собой никакой фактической основы.
HashiCorp подала заявления о нарушении авторских прав в письме о прекращении деятельности. Эти претензии абсолютно необоснованны.
Можно чётко проследить, что спорный код был скопирован из более старого кода, лицензированного ещё под MPL-2.0. Похоже, что HashiCorp и сама скопировала тот же код, когда реализовывала свою версию этой функции. Всё это легко увидеть в нашем подробном анализе SCO, а также в их собственных комментариях, которые как раз указывают на это.
Эта статья расставила все точки над i, претензии HashiCorp были отклонены.
Извинения Matt Asay
В тот же день Matt Asay опубликовал у себя в Twitter извинения.
Но не все подписчики остались довольны результатом — кто-то продолжал спрашивать, зачем он вообще опубликовал свою статью, а кто-то выражал сожаление, что вместо разработки новых функций сообщество OpenTofu вынуждено было проводить детальный анализ спорного фрагмента кода и составлять документ на 46 страниц.
Кроме того, автор статьи добавил в свой материал дисклеймер. В нём он сообщал, что, учитывая ответ OpenTofu, можно с уверенностью сказать — разработчики использовали код Terraform в рамках лицензии и обвинять их нет никаких оснований.
Выводы из этой истории
-
HashiCorp явно ревностно следит за OpenTofu и воспринимает проект как угрозу для Terraform.
-
Репутация Matt Asay как публициста, возможно, будет довольно сильно подпорчена.
-
Если вы пишете статью с серьёзными обвинениями в чей-то адрес, лучше для начала погрузиться в вопрос более основательно. Особенно если вы обвиняете подразделение уважаемой во всём мире организации — такой как Linux Foundation. И не стоит бросаться обвинениями, пока вы не выяснили всех подробностей, — лучше выбирать более нейтральный и беспристрастный тон.
-
Linux Foundation — зрелая организация, которая не зря имеет хорошую репутацию в инженерной и бизнесовой среде. А сообщества вокруг её проектов управляются достаточно зрелыми специалистами, которые способны спокойно и хладнокровно действовать даже в эмоционально очень сложной ситуации.
-
Немного конспирологии: вся последовательность действий выглядела так, будто бы это была некая атака, спланированная несколькими коммерческими структурами, которые в недавнем прошлом отказались от Open Source-лицензий на свои продукты.
Автор: Тимур Тукаев