﻿# 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\) эти требования могут распространяться как на весь проект, так и только на его отдельные части, что может быть критично для коммерческого использования\.

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

Пример комментария, на который анализатор выдаст предупреждение:

```cpp
/*  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\-идентификатора, на который анализатор выдаст предупреждение:

```cpp
// spdx-license-identifier: MPL-2.0
```

## Для закрытых проектов

Если в закрытый проект добавить файл с сильной \(strong\) copyleft\-лицензией, например GPL, то остальной исходный код необходимо будет открыть из\-за особенностей данной лицензии\. 

Сильные \(strong\) copyleft\-лицензии называют "[вирусными](https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%83%D1%81%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)" лицензиями из\-за их свойства распространяться на остальные файлы проекта\. Проблема в том, что использование хотя бы одного файла с подобной лицензией в закрытом проекте автоматически делает весь исходный код открытым и обязывает распространять его вместе с бинарными файлами\. 

Если в закрытый проект добавить файл или библиотеку со слабой \(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 способствует развитию открытых проектов, помогая исправлять в них [ошибки](https://pvs-studio.ru/ru/blog/examples/) и предоставляя бесплатные [варианты](https://pvs-studio.ru/ru/blog/posts/0614/) лицензий\. Однако наш продукт является B2B решением, и поэтому это правило включено по умолчанию\.

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

* Если вы используете PVS\-Studio с помощью плагина для IDE, то выключить диагностическое правило можно прям в нём\. Для этого перейдите в **настройки плагина \> Detectable Errors \> General Analysis** и снимите галочку с пункта **V3144**\. Обратите внимание, что эта настройка влияет только на отображение предупреждения в плагине\. При открытии сохранённого отчёта на другой машине или конвертации результатов анализа в другой формат отключенные таким образом предупреждения могут появиться снова\.
* Если вы хотите выключить правило сразу для всей команды или полностью убрать его из отчётов анализатора, то можете воспользоваться [файлом конфигурации диагностических правил анализатора \(pvsconfig\)](https://pvs-studio.ru/ru/docs/manual/6630/)\. Для этого добавьте в него строку `//-V::3144`\. Дополнительную информацию об отключении диагностических правил с помощью комментариев можно найти в [документации](https://pvs-studio.ru/ru/docs/manual/0017/)\.
* Если для конвертации отчётов вы используете утилиту [Plog Converter](https://pvs-studio.ru/ru/docs/manual/0036/), то с помощью флага `-d` можно убрать из результирующего отчёта эти предупреждения\. 

## Пополнение списка copyleft\-лицензий

Если вам известны другие copyleft\-лицензии, требующие раскрытия исходного кода, и которые в данный момент не выявляет инструмент, то вы можете сообщить нам о них через [форму обратной связи](https://pvs-studio.ru/ru/about-feedback/)\. Мы добавим их выявление в последующих релизах\.

## Дополнительные ссылки

1. [GNU General Public License](https://ru.wikipedia.org/wiki/GNU_General_Public_License)
1. ["Вирусные" лицензии](https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%83%D1%81%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)
1. [Бесплатные варианты лицензирования PVS\-Studio](https://pvs-studio.ru/ru/blog/posts/0614/)
1. [Подавление ложных предупреждений](https://pvs-studio.ru/ru/docs/manual/0017/)