Аудит открытого кода в вашем продукте
Мы найдём в вашей сборке каждый кусок чужого кода, прочитаем приехавшую с ним лицензию и скажем, какие её условия ваш выпуск уже включил и что с ними теперь делать.
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 просит этот набор; семейство копилефта добавляет обязанность открыть исходный код, и вот там лежит настоящая работа.
Разрешение прекращается само, потому что оно с самого начала было условным. У старой второй версии общественной лицензии это окончательно: текст прекращает права и обратной дороги не предлагает. Третья версия её даёт. Прекратите нарушение — лицензия сразу восстанавливается временно, а окончательно, если правообладатель молчит шестьдесят дней после того, как вы прекратили; если он всё же написал и это его первое уведомление, исправление в тридцать дней с его получения делает восстановление окончательным.
Потому что условия не остаются у вас: они едут вместе с программой, к которой прикреплены. Покупатель, забирающий продукт, забирает и каждую обязанность внутри него, включая те, что никто не записал, и цена этого целиком ложится в переговоры о сделке. Список компонентов с лицензией напротив каждой строки — самый короткий ответ на целый раздел их анкеты, и стоит он дороже, когда существует заранее.
Обсудить
Задание
Поговорите с нашей командой
Поговорите с нашей командой.
Расскажите нам о своей задаче —
мы поможем вам в этом в любой юрисдикции.

