Аудит открытого кода в вашем продукте
Мы найдём в вашей сборке весь чужой код и прочитаем лицензию к каждому куску. И скажем, какие условия уже действуют для вашего выпуска и что с ними делать.
Written source offer
Обещание исходника
at least 3 years
не меньше 3 лет
After a first notice
После уведомления
30 days to cure
30 дней на исправление
After you stop
После прекращения
60 silent days
60 дней молчания
A patent grant
Патентное разрешение
ends the day you sue
снимается вашим иском
Когда нужен аудит открытого кода

Покупатель просит список компонентов
Для проверки ему нужен каждый пакет из сборки и лицензия к нему. Такого списка в команде никто никогда не составлял.
Вы выпускаете готовое устройство
Программа уезжает к покупателю внутри железа. Часть условий включается только в этот момент. Со страницей загрузки всё устроено иначе.
Заказчик просит гарантию возмещения убытков за весь продукт
По договору вы должны отвечать за продукт целиком. Но часть кода написали посторонние люди. И на условиях, которых никто не читал.
Вам пришла претензия
Разработчик открытого проекта пишет, что вы не выполнили условие лицензии. Сохранится ли ваше разрешение, зависит от того, что вы сделаете в ближайшие недели.
Сборка сама выбирает пакеты
Зависимости приводят с собой свои зависимости. Что попало в выпуск, решила система сборки. А лицензии к этим пакетам никто не читал.
Что вы получаете
- Список всех компонентов сборки
- Текст лицензии к каждому из них
- Условия и то, что их включает
- Файл уведомлений, который вы обязаны приложить
- Правило, как добавлять новые пакеты
Что проверяет аудит открытого кода

Открытый код бесплатный, но не безусловный. К каждому пакету, который вы подключили, приложен документ. Это лицензия, а не подарок. Когда вы передаёте программу кому-то ещё, её условия начинают действовать для вас.
Аудит письменно отвечает на три вопроса. Что лежит в сборке? Чего требует каждая лицензия? Какие из этих требований уже действуют для вашего выпуска? Кому принадлежит код вашей собственной команды — отдельная работа: это аудит цепочки прав.
Что проверяет аудит
- Дерево зависимостей — в том виде, в каком его собирает система сборки. Включая пакеты, которые никто не выбирал.
- Текст лицензии в самом пакете той версии, которую вы выпускаете. Не ярлык, который пакету присвоил каталог.
- Код, скопированный вручную: куски с форумов, файлы примеров и сгенерированные фрагменты.
- Как программа попадает к людям: загрузкой, в готовом устройстве, в приборе, как сервис по сети.
- Что вы уже публикуете: файл уведомлений и экран благодарностей.
Откуда берутся условия
Одни условия требуют только передать документы дальше. Нужно сохранить в распространяемом исходном коде уведомления об авторстве, патентах, товарных знаках и авторах. Приложить копию лицензии. Пометить изменённые файлы. И воспроизвести файл уведомлений, если он пришёл с пакетом. Такой набор требует лицензия Apache версии 2.0.
Другие условия распространяются на ваш собственный код, причём в разной мере. Общественная лицензия Mozilla версии 2.0 охватывает файлы, где лежит её код. В том числе новые файлы, куда вы его перенесли. Стандартная общественная лицензия GNU охватывает всю работу, которую вы распространяете.
Стандартная общественная лицензия GNU Affero версии 3 идёт дальше. Если вы изменили программу и даёте людям пользоваться ею по сети, вы обязаны предложить им исходный код вашей версии. Бесплатно и с сетевого сервера.
Что прекращает разрешение
Разрешение даётся на условиях, поэтому нарушение прекращает его автоматически. В Стандартной общественной лицензии GNU версии 2 на этом всё. Права прекращаются сами, и способа вернуть их текст не описывает.
В версии 3 появился выход. Прекратите нарушение — и лицензия от конкретного правообладателя сразу восстановится, но временно. Окончательно она восстановится, если он не уведомит вас в течение шестидесяти дней после того, как вы прекратили нарушение. Если уведомит и это его первое такое уведомление, исправьте нарушение в течение тридцати дней после получения. Тогда восстановление станет окончательным. Общественная лицензия Mozilla версии 2.0 устроена так же.
Если собранная программа уезжает внутри физического продукта, версия 3 Стандартной общественной лицензии GNU разрешает приложить к ней письменное обещание выдать исходный код. Обещание должно действовать не менее трёх лет. И всё время, пока вы предлагаете запчасти или поддержку для этой модели продукта.
Патентное разрешение прекращается по своей причине. По лицензии Apache вы теряете его в день, когда начинаете патентный спор и утверждаете, что работа нарушает ваши права.
Источники: письменное обещание выдать исходный код (три года и пока вы предлагаете запчасти или поддержку для этой модели) и восстановление прав после шестидесяти дней молчания или исправления за тридцать дней с первого уведомления — в Стандартной общественной лицензии GNU; автоматическое прекращение — в её версии 2; выдача исходного кода по сети — в лицензии Affero; патент — в лицензии Apache.
Этапы работы
Собираем список компонентов — 3–5 рабочих дней.
Отправная точка — выпуск, который вы реально отдаёте людям. Сегодняшний вид репозитория здесь ни при чём. Мы возьмём дерево зависимостей этой версии со всем, что подтянулось по цепочке.
Читаем сами лицензии.
Лицензия — это файл внутри пакета. Ярлык в каталоге — только догадка о нём. Мы прочитаем текст и версию, которые пришли с пакетом, и запишем, какую именно прочитали.
Находим, где срабатывает каждое условие.
У каждого условия есть повод: распространение сборок, изменение файлов, связывание, установка в устройство, доступ по сети. Денег стоят только те условия, которые сработали.
Отмечаем то, что распространяется на ваш код.
Мы отделим компоненты, которым нужны только уведомления, от тех, чьи условия переходят на всё, с чем вы их соединили. И скажем, как далеко заходит каждое из них в вашей сборке.
Чиним дешёвое и называем дорогое.
Недостающие уведомления, копию лицензии и файл уведомлений мы подготовим и закроем за один заход. Если условия компонента несовместимы с вашим продуктом, его замену решаем отдельно.
Отчёт и правило на будущее.
Всё в одном документе: компоненты, лицензии, сработавшие условия, что исправлено и что осталось открытым. Его можно отдать покупателю как есть. В конце — короткое правило, как добавлять следующий пакет.
Эта услуга входит в более широкое направление «IP и контент».
FAQ
Только часть его — и только когда вы передаёте программу кому-то. Одни лицензии просят уведомлений и файла с упоминанием авторов, и больше ничего. Другие несут условия, которые переходят на всё, с чем вы их соединили. Но и здесь охват разный. Общественная лицензия Mozilla охватывает файлы, где лежит её код. Стандартная общественная лицензия GNU — всю распространяемую работу. Какой ваш код куда попадает, покажет список компонентов.
Это четыре требования, от дешёвого к дорогому. Сохранить уведомления об авторстве, патентах, товарных знаках и авторах, которые пришли с пакетом. Приложить копию текста лицензии. Пометить файлы, которые вы изменили. И воспроизвести файл с упоминанием авторов, если пакет пришёл с таким, — там, где его увидит получатель. Этот набор требует лицензия Apache версии 2.0. Лицензии семейства копилефта добавляют обязанность открыть исходный код. Вот там и начинается настоящая работа.
Разрешение прекращается само: оно с самого начала было условным. Во второй версии общественной лицензии GNU это окончательно. Текст прекращает права и способа вернуть их не предлагает. В третьей версии такой способ есть. Прекратите нарушение — и лицензия сразу восстановится, но временно. Окончательно она восстановится, если правообладатель промолчит шестьдесят дней после того, как вы прекратили нарушение. Если он всё же написал и это его первое уведомление, исправьте нарушение за тридцать дней с момента получения. Тогда восстановление станет окончательным.
Потому что условия едут вместе с программой. Кто покупает продукт, получает и все обязанности внутри него. Даже те, которые никто не записал. Цена этого ложится на переговоры о сделке, вместо того чтобы всплыть в суде. Список компонентов с лицензией к каждому — самый короткий ответ на целый раздел анкеты покупателя. И он ценнее, если составлен заранее.
Обсудить
Задание
Поговорите с нашей командой
Поговорите с нашей командой.
Расскажите нам о своей задаче —
мы поможем вам в этом в любой юрисдикции.

