Как защитить свой аддон от распространения через агрегаторы

С ростом популярности Blender растет и количество аддонов, создаваемых для него сторонними разработчиками. В настоящий момент под Blender написано множество качественных профессиональных аддонов. С течением времени аддонов становится все больше. И на волне роста их количества появились агрегаторы — программы или сервисы самостоятельно проводящие поиск аддонов в сети и позволяющие пользователям Blender устанавливать аддоны быстро, сразу много и минуя каналы распространения аддонов, выбранные их авторами. Что вызвало среди разработчиков аддонов волну негатива.

Попробуем разобраться в ситуации.

Имеют ли агрегаторы аддонов право на существование?

Blender распространяется по лицензии GPL.

Лицензия GPL наследуемая — она гарантирует, что пользователи всех производных программ должны получить все те же самые права, что и у исходной программы. Нельзя скомбинировать программу из двух связанных между собой частей — одной под лицензией GPL, а другой — нет (за исключением совместимых). Если в программе есть хоть какая-то часть под лицензией GPL — вся программа должна распространяться под лицензией GPL.

Следовательно, как только разработчик аддона пишет в коде

или

его аддон будет обязан распространяться по лицензии GPL. Здесь есть свои юридические тонкости, например API не лицензируется в некоторых странах, но в общем случае — любой аддон для Blender обязан распространяться по лицензии GPL.

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

В итоге, как бы это не нравилось разработчикам аддонов, агрегаторы аддонов действуют вполне правомерно.

Так ли все плохо с точки зрения разработчика аддонов?

В сообществе Blender сложилась определенная практика распространения аддонов. Основным ресурсом, где разработчики публикуют, а пользователи ищут нужные аддоны, является Blender Market. Сложившаяся система позволяет разработчиками получать за работу над аддонами определенное вознаграждение, позволяющее им продолжать работу над текущими или создавать новые аддоны. Пользователи же имеют достаточно удобный сервис по поиску нужного им функционала. Нужно ли подчеркивать, что агрегаторы аддонов в корне ломает устоявшуюся систему?

Очень небольшое количество аддонов рассчитано на предоставление какого-либо сервиса, что по мнению авторов GPL должно обеспечивать их авторов вознаграждением. Большинство аддонов — готовые законченные программы, не требующие дополнительного контента в виде развернутой документации, сопровождения или обучения. Такой аддон скачивается пользователем один раз, и очень редко пользователи возвращаются на ресурс автора, чтобы отблагодарить его после. Установка таких аддонов через агрегатор практически гарантированно лишает автора возможности получения вознаграждений, ведь пользователь даже не узнает, что существует место, где он может отблагодарить автора понравившегося аддона.

Так ли все хорошо с точки зрения пользователя?

Да, возможность легко, быстро и бесплатно получить в свое распоряжение нужный инструмент конечно привлекательна для любого пользователя. Пользователь находит нужный аддон в агрегаторе, устанавливает его, получает результат. Замечательно! Но все так хорошо только на коротком промежутке времени. А если заглянуть чуть дальше?

Пользователь скачал аддон через агрегатор — автор не получил установленного вознаграждения. Вряд ли теперь автор продолжит развитие, доработку и придумывание новых фич, и скорее всего не возьмется за разработку новых аддонов. Время идет, Blender меняется от версии к версии. Аддон устаревает, падает с ошибками и перестает работать. Где пользователю взять новую версию аддона? Обновлений нет, исправлений нет, нового функционала — тоже нет. Не говоря о том, что пользователь потенциально не получит и новых, может быть очень полезных и нужных, аддонов.

И еще…

Где сами агрегаторы берут аддоны? Не приобретают же на Blender Market? Чаще всего агрегаторы ищут аддоны в автоматическом режиме. Пользуясь тем, что лицензия GPL требует от автора публикации исходного кода программы, агрегаторы мониторят ресурсы, где авторы выкладывают «исходники» аддонов, например GitHub, и предоставляют их пользователю. Но ведь такие ресурсы не являются для авторов аддонов «витриной» для публикации, и они не обязаны следить здесь за чистотой кода, правильной настройкой и полнотой комплектации аддона. Они вообще не предназначены для распространения аддонов. Скачанный таким образом аддон может неправильно или не полностью работать, отчего пострадают как пользователь, так и разработчик. Пользователь не получит требуемого функционала, автору же подобное грозит репутационными потерями, что даже хуже финансовых.

Что в итоге?

На первый взгляд агрегаторы аддонов выглядят очень привлекательно для пользователей. Но если разобраться, в перспективе грозят потерями как разработчикам, так и самим же пользователям.

Что можно с этим сделать

Кроме очевидного — не писать аддоны под Blender, если не намереваешься распространять их бесплатно?

Разработчик вполне может защититься от распространения своих аддонов через агрегаторы и не нарушая лицензии GPL.

Самый простой способ защиты — публиковать код не на популярных репозиториях вроде GitHub, а где-нибудь еще, например на личной страничке в сети. Обойти весь Интернет способны поисковики уровня Google но не частные агрегаторы. Однако в этом случае разработчик лишается ряда удобных инструментов по контролю кода, которые предоставляет ему официальный репозиторий.

Закрыть код своего аддона от нежелательного распространения можно и продолжая публиковать его в общедоступных репозиториях вроде GitHub. Для этого просто нужно добавить в аддона конфигурационный файл, в котором прописать параметр, определяющий статус текущего кода: «демонстрационный» — для публикации, или «релизный» — предоставляемый пользователю для работы. Аддон так же будет работать в указанном режиме. В публикуемом на GitHub коде этот параметр можно установить в «демонстрационный», а в предоставляемом пользователю аддоне на Blender Market — в «релизный». В демонстрационном режиме аддон может показывать пользователю сообщение о том, что в его работе возможны неточности и куда следует обратиться за получением полнофункциональной версии аддона. Никакой агрегатор не сможет влезть в чужой код и автоматически изменить значение данного параметра.

Конфигурационный файл может быть в формате JSON и выглядеть примерно так:

Значение «true» указывает, что аддон находится в режиме разработки/публикации кода и может на работать нужным образом. «false» — означает полнофункциональную версию аддона.

Для удобного доступа к этому параметру из кода можно использовать следующий класс, сохранив его в отдельный модуль addon.py:

Класс имеет единственный метод demo_mode(), возвращающий значение параметра из конфигурационного файла cfg.json.

Эти два файла cfg.json и addon.py нужно скопировать в директорию своего аддона. После этого в заглавном файле __init__.py можно быстро получить текущее значение параметра и на его основании выполнить определенные действия. Например — вывести предупреждение.

Здесь в функции register() проверяется режим работы аддона — «демонстрационный» или «релизный» и в случае первого — в консоль выводится предупреждение. Если же рабочий код аддона внести под условие else, аддон в демонстрационном режиме вообще не запустится, а только выдаст предупреждение.

Таким образом аддон вполне можно защитить от нежелательного распространения через репозитории. И конечно разработчику нужно не забывать менять значение параметра при сборке релизной версии аддона для Blender Market.