V3144. This file is marked with a copyleft license, which may require you to disclose source code and modifications of the file.
Анализатор обнаружил в файле copyleft-лицензию, которая может накладывать требования на раскрытие исходного кода при распространении или модификации. В зависимости от типа лицензии (strong или weak copyleft) эти требования могут распространяться как на весь проект, так и только на его отдельные части, что может быть критично для коммерческого использования.
Если вы разрабатываете открытый проект, то можно просто игнорировать это предупреждение и отключить его.
Пример комментария, на который анализатор выдаст предупреждение:
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Примечание N1. Диагностическое правило поддерживает обнаружение лицензий по SPDX-идентификаторам.
Примечание N2. Если указано несколько SPDX-идентификаторов и хотя бы один из них соответствует copyleft-лицензии, то анализатор выдаст предупреждение. Это обусловлено тем, что анализатор не может достоверно определить, какая именно лицензия применяется в производном проекте.
Пример SPDX-идентификатора, на который анализатор выдаст предупреждение:
// spdx-license-identifier: MPL-2.0
Для закрытых проектов
Если в закрытый проект добавить файл с сильной (strong) copyleft-лицензией, например GPL, то остальной исходный код необходимо будет открыть из-за особенностей данной лицензии.
Сильные (strong) copyleft-лицензии называют "вирусными" лицензиями из-за их свойства распространяться на остальные файлы проекта. Проблема в том, что использование хотя бы одного файла с подобной лицензией в закрытом проекте автоматически делает весь исходный код открытым и обязывает распространять его вместе с бинарными файлами.
Если в закрытый проект добавить файл или библиотеку со слабой (weak) copyleft-лицензией, например LGPL, то при определённых условиях может потребоваться раскрыть код самой библиотеки и её модификаций, тогда как остальная часть проекта может оставаться закрытой.
На данный момент диагностическое правило поддерживает следующие лицензии:
|
Тип |
Список лицензий |
|---|---|
|
Strong copyleft |
AGPL, EUPL, GPL, NGPL, NPOSL-3.0, OSL, RPL, SSPL |
|
Weak copyleft |
Artistic-2.0, CATOSL-1.1, CDDL, CPL, EPL, LGPL, MPL |
Есть следующие варианты, как вы можете поступить, обнаружив в закрытым проекте использование файлов с copyleft-лицензий:
- отказаться от использования данного кода (библиотеки) в своём проекте;
- заменить используемую библиотеку;
- сделать свой проект или его часть открытыми (в случае weak copyleft-лицензии).
Для открытых проектов
Мы понимаем, что это диагностическое правило неуместно для открытых проектов. Команда PVS-Studio способствует развитию открытых проектов, помогая исправлять в них ошибки и предоставляя бесплатные варианты лицензий. Однако наш продукт является B2B решением, и поэтому это правило включено по умолчанию.
Если же ваш код распространяется под одной из указанных выше copyleft-лицензий, то вы можете отключить это правило следующими способами:
- Если вы используете PVS-Studio с помощью плагина для IDE, то выключить диагностическое правило можно прям в нём. Для этого перейдите в настройки плагина > Detectable Errors > General Analysis и снимите галочку с пункта V3144. Обратите внимание, что эта настройка влияет только на отображение предупреждения в плагине. При открытии сохранённого отчёта на другой машине или конвертации результатов анализа в другой формат отключенные таким образом предупреждения могут появиться снова.
- Если вы хотите выключить правило сразу для всей команды или полностью убрать его из отчётов анализатора, то можете воспользоваться файлом конфигурации диагностических правил анализатора (pvsconfig). Для этого добавьте в него строку
//-V::3144. Дополнительную информацию об отключении диагностических правил с помощью комментариев можно найти в документации. - Если для конвертации отчётов вы используете утилиту Plog Converter, то с помощью флага
-dможно убрать из результирующего отчёта эти предупреждения.
Пополнение списка copyleft-лицензий
Если вам известны другие copyleft-лицензии, требующие раскрытия исходного кода, и которые в данный момент не выявляет инструмент, то вы можете сообщить нам о них через форму обратной связи. Мы добавим их выявление в последующих релизах.