Практическое руководство по соблюдению лицензий GPL, LGPL, MIT, BSD и Apache-2.0 в прошивке ручки-читалки с указанием перечня открытого ПО по каждой модели.

Опубликовано: окт 26, 2020 - 78 Просмотры

Ручка-читалка с открытым исходным кодом и лицензия GPL: практическое соответствие для встраиваемых устройств

Аудитория: Эта статья написана для специалистов по комплаенсу OEM/ODM, инженеров по прошивкам и владельцев брендов среди импортёров, издательств и дистрибьюторов образовательной продукции, которые обязаны выполнить требования лицензий GPL/LGPL/MIT/BSD/Apache-2.0 для смарт-ручки для чтения до отгрузки.

Открытый код работает под проприетарным кодом в каждой современной ручке для чтения. Наша линейка из 11 моделей — B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6 — поставляется со встроенной ведомостью открытых компонентов, насчитывающей 47 отдельных пакетов в 8 сборках прошивки. Большинство из них распространяются по лицензиям MIT, BSD или Apache-2.0; несколько — по LGPL; один — по GPLv2. Ни один — по GPLv3.

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

Совет покупателю: «Открытый исходный код» не означает «отсутствие обязательств». Компоненты LGPL и GPL требуют от вас предоставить соответствующий исходный код, передать тексты лицензий и (в некоторых случаях) разрешить реверс-инжиниринг для отладки. Закладывайте это в бюджет комплаенса заранее.

1. Почему открытый исходный код важен для ручки для чтения

Открытый код используется потому, что в 2026 году это самый качественный и наименее затратный способ вывести встроенный продукт на рынок. Альтернативы — написание собственной реализации TLS, собственной файловой системы FAT, собственного аудиокодека — добавили бы к проекту от 30 до 60 инженеро-месяцев и не смогли бы обеспечить уровень защиты, сопоставимый с библиотеками, проверенными сообществом. Поэтому каждая современная ручка для чтения содержит компоненты с открытым исходным кодом, и каждый такой компонент имеет лицензию.

Категории лицензий, актуальные для нашей линейки:

  • MIT и BSD-2/3-Clause: Разрешительные, требуют только уведомления об авторских правах. Без copyleft. Покрывают FreeRTOS, LVGL, FatFs, OPUS и большую часть нашего графического стека.
  • Apache-2.0: Разрешительная с явным патентным грантом. Покрывает mbedTLS, Zephyr и части загрузочного процесса K7.
  • LGPL-2.1 и LGPL-3.0: Слабый copyleft, требует возможности перекомпоновки библиотеки. Покрывает GNU C Library (glibc) только в нашем тестовом стенде на базе Linux — не в самой ручке.
  • GPLv2 с исключением FreeType: Сильный copyleft, но со специальным исключением FreeType License (FTL), допускающим статическую компоновку в коммерческих продуктах. Покрывает FreeType на Y6, Q8, T2 и L5.
  • Общественное достояние: Без обязательств. Покрывает части OID-парсера, написанные нами в 2018 году и выпущенные под CC0.

Эти пять категорий формируют пять различных режимов комплаенса. Наивный подход «открытый код = ничего делать не нужно» — неверен; наивный подход «GPL = катастрофа» — тоже неверен. Для каждой категории существует конкретный задокументированный ответ.

Компоненты открытого кода в прошивке ручки для чтения
===============================================
Разрешительные (MIT/BSD/Apache) : 41 пакетов
LGPL                            : 4 пакетов
GPLv2 + исключение FTL          : 1 пакетов
GPLv3                           : 0 пакетов
Общественное достояние (CC0)    : 1 пакетов
===============================================
Всего: 47 пакетов открытого кода
===============================================

2. Состав открытого кода по моделям

Не каждая ручка для чтения использует один и тот же набор пакетов открытого кода. Состав различается в зависимости от модели и версии прошивки. Ниже приведён снимок нашего парка устройств на III квартал 2026 года:

Модель RTOS Графика Файловая система Криптография Кодек Шрифт LGPL? GPL?
B1 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap Нет Нет
B2 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap Нет Нет
F8 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap Нет Нет
K7 Zephyr LVGL FatFs mbedTLS OPUS Bitmap Нет Нет
KF1 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap Нет Нет
L5 Zephyr LVGL FatFs mbedTLS OPUS FreeType Нет Да
P2 FreeRTOS LVGL FatFs н/д н/д Bitmap Нет Нет
Q6 Zephyr LVGL FatFs mbedTLS OPUS Bitmap Нет Нет
Q8 Zephyr LVGL FatFs mbedTLS OPUS FreeType Нет Да
T2 ThreadX LVGL FatFs mbedTLS OPUS FreeType Нет Да
Y6 Zephyr LVGL FatFs mbedTLS OPUS FreeType Нет Да

Четыре модели под GPL (L5, Q8, T2, Y6) используют FreeType для отрисовки обложек OID-книг. Семь моделей без GPL используют более компактный движок растровых шрифтов. Мы выбрали такое распределение, потому что лицензионная нагрузка на кодек ридера и роялти и лицензирование и соответствие прошивки уже значительна, и мы не хотели усугублять её строгими обязательствами copyleft на каждую ручку.

3. Компоненты под LGPL и обязательство перекомпоновки

Четыре компонента под LGPL находятся в нашем тестовом стенде и в инструменте для ПК, а не в самой читалке. Это:

  • glibc 2.31 (LGPL-2.1) — используется заводским тестовым стендом и ПК-инструментом сборки OTA.
  • libusb 1.0.24 (LGPL-2.1) — используется заводским тестовым стендом для доступа к USB-устройствам.
  • Qt 5.15 (LGPL-3.0) — используется инструментом авторинга OID-книг для дистрибьюторов.
  • libsodium 1.0.18 (ISC, разрешительная) — используется облачным инструментом сборки OTA.

Обязательство LGPL состоит в том, что пользователь должен иметь возможность перекомпоновать приложение с другой версией библиотеки. Для встроенной прошивки это выполняется одним из двух задокументированных способов:

  1. Динамическая компоновка: библиотека находится в отдельном общем объекте в файловой системе устройства. Пользователь может заменить этот объект.
  2. Предложение исходного кода: приложение скомпоновано статически, но пользователю предлагается полный соответствующий исходный код библиотеки.

Путь 2 — именно тот, который мы используем, потому что в ручке нет загрузчика общих объектов. Соответствующий исходный код размещён на странице бренда нашего сайта, со QR-кодом в печатном руководстве пользователя. Покупатель, заказывающий 12 000 штук для школьной программы, увидит в руководстве печатную страницу 38 со следующим текстом: «В данном устройстве используется программное обеспечение с открытым исходным кодом. Исходный код доступен по адресу your-distributor.example/open-source».

LGPL-3.0 также содержит пункт «anti-tivoization» — пользователь должен иметь возможность запускать модифицированную библиотеку на устройстве. Наша цепочка безопасной загрузки не допускает пользовательскую модификацию прошивки, поэтому мы рассматриваем это исключительно как документационное обязательство и указываем в EULA, что права на модификацию пользователем по LGPL-3.0 не распространяются на устройства с закрытой цепочкой загрузки. Эта позиция была проверена тремя внешними юридическими фирмами.

Совет покупателю: Если рынок вашего дистрибьютора запрещает LGPL (некоторые корейские государственные тендеры требуют этого), запросите опцию статической компоновки без LGPL. Мы можем поставить все 11 моделей без какого-либо компонента LGPL, пожертвовав графическим инструментом создания OID-книг в пользу интерфейса CLI.

4. FreeType, исключение FTL и влияние GPLv2

Четыре ручки для чтения, поставляемые с FreeType (L5, Q8, T2, Y6), используют её на двойных условиях GPLv2 + FreeType License (FTL). Исключение FTL уникально для FreeType: оно предоставляет право статически компоновать FreeType с приложением, не распространяемым под GPL, при условии, что:

  • Уведомление об авторских правах FreeType воспроизведено.
  • Тексты лицензий (GPLv2 и FTL) включены в комплект поставки устройства.
  • Пользователь может получить соответствующий исходный код FreeType (но не обязательно исходный код окружающего приложения).

Мы включаем оба текста лицензий непосредственно в устройство. В прошивке Y6 (версия 3.3.1) текст GPLv2 занимает 18 КБ, а текст FTL — 6 КБ; оба доступны через меню «О устройстве». «Предложение соответствующего исходного кода» размещено на нашей странице открытого исходного кода с отдельной ссылкой для скачивания для каждой модели.

Исключение FTL — это не обходной путь, а конкретное узкое разрешение. В 2024 году мы изучили это исключение с нашими внешними юристами и пришли к выводу, что оно не распространяется на GPLv3. Поэтому мы не используем в прошивке какие-либо компоненты под GPLv3, независимо от их технических достоинств.

Тонкий момент: любой производный продукт FreeType, который мы не модифицировали, не налагает новых обязательств, но если мы когда-либо форкнем FreeType для добавления частного глифа, сам форк будет под GPLv2. Мы этого не делали — наша сборка FreeType представляет собой upstream-релиз 2.13.2 без локальных патчей. Это задокументировано в нашем Оптимизация себестоимости комплектующих читающей ручки и прослеживается до SBOM.

5. Шаблон соответствия через «Меню О устройстве»

Каждая ручка для чтения отображает уведомление о лицензиях открытого исходного кода в меню «О устройстве». Шаблон единообразен для всех 11 моделей: удерживайте кнопку увеличения громкости в течение 5 секунд при загрузке — устройство переходит в диагностический экран, одним из пунктов которого является «Лицензии открытого исходного кода». Общий объём текста на устройстве составляет 47 КБ для Y6 (наиболее нагруженной) и 14 КБ для B1 (наименее нагруженной).

Модель Размер уведомления о лицензии Наличие FreeType Всего страниц лицензии
B1 14 KB Нет 6
B2 14 KB Нет 6
F8 14 KB Нет 6
K7 16 KB Нет 6
KF1 14 KB Нет 6
L5 32 KB Да 12
P2 11 KB Нет 5
Q6 16 KB Нет 6
Q8 38 KB Да 14
T2 40 KB Да 14
Y6 47 KB Да 16

Руководство пользователя повторяет список лицензий на страницах 36–52 для модели Y6, с чётким указанием на английском языке в начале раздела. Для неанглоязычных рынков предоставляется переведённая версия. В настоящее время мы поддерживаем 12 языков: английский, испанский, французский, немецкий, арабский, португальский, русский, японский, корейский, вьетнамский, тайский и индонезийский (Bahasa Indonesia).

6. Уведомления об открытом исходном коде в интернете и в печати

Уведомление на устройстве — это лишь половина схемы соответствия. Вторая половина — веб-страница и печатное руководство. Наша страница открытого исходного кода перечисляет каждый пакет в каждой сборке прошивки, с идентификатором лицензии SPDX, ссылкой на источник, контрольной суммой и, где применимо, ссылкой на соответствующий исходный код.

Страница генерируется скриптом, который запускается для каждого релиза прошивки. Скрипт формирует:

  • JSON-файл (машиночитаемый, подходит для автоматизированной проверки юридическим отделом).
  • HTML-страницу (удобную для чтения человеком, доступную через QR-код в руководстве).
  • PDF-файл (включён в приложение к печатному руководству, начиная со страницы 38).

QR-код ведёт на URL конкретной модели, например /opensource/y6. URL остаётся стабильным в течение всего срока жизни модели — мы не ломаем ссылки при выпуске новых прошивок, а добавляем новый релиз на страницу.

Мы храним каждый JSON-снимок SPDX в течение 84 месяцев, что соответствует сроку хранения данных о соответствии прошивок (см. Лицензия и соответствие прошивки читалки). Срок хранения охватывает самый длительный период запросов среди наших 47 стран экспорта.

Снимок соответствия открытого исходного кода, 2026 Q3
=========================================
Всего пакетов во всех 11 моделях       : 47
Типы лицензий                          : 5
Модели с GPL/FTL                       : 4 (L5, Q8, T2, Y6)
Модели только с LGPL                   : 0 (LGPL используется в инструментах)
Размер лицензии на устройстве (макс.)  : 47 KB (Y6)
Размер лицензии на устройстве (мин.)   : 11 KB (P2)
Языки страницы открытого исходного кода : 12
Срок хранения                          : 84 месяца
=========================================

7. Права на обратную разработку по LGPL-3.0 и DMCA

LGPL-3.0 предоставляет пользователю право на обратную разработку библиотеки в целях отладки. Наше EULA не распространяет это право на остальную часть прошивки — проприетарный прикладной уровень остаётся закрытым. Тем не менее мы соблюдаем узкое исключение: если покупатель сообщает об ошибке, которую мы не можем воспроизвести, мы по своему усмотрению принимаем отладочную сборку, подписанную нашим корневым ключом, которая открывает соответствующий модуль на одну сессию отладки.

Исключение DMCA Section 1201 для "законного использования общедоступной прикладной программы" не применяется к читалке, по нашему пониманию, поскольку устройство не является охраняемым авторским правом произведением в смысле Section 1201. Мы подтвердили эту позицию двумя внешними юридическими фирмами и фиксируем её в генеральном соглашении о поставке.

В ЕС Директива 2016 года о взломе (статья 6) создаёт аналогичное исключение для обеспечения совместимости. Мы соблюдаем это, предоставляя документированный межпроцессный протокол для модуля Bluetooth-сопряжения моделей K7, Q8, T2 и Y6.

8. Флаги сборки и изоляция лицензий в CI

Наш конвейер непрерывной интеграции (CI) использует три флага сборки для обеспечения изоляции лицензий:

  • -DLGPL_ISOLATION=1 — гарантирует, что все компоненты LGPL линкуются в отдельный статический архив, а не в основной двоичный блок прошивки.
  • -DFREETYPE_LINK_STATIC=1 — фиксирует статическую линковку FreeType для четырёх затронутых моделей.
  • -DOPENSSOURCE_FORMATTED=1 — форматирует уведомление о лицензии и формирует вывод в формате SPDX.

Эти флаги зафиксированы в конфигурации сборки и не могут быть переопределены разработчиком без письменного согласования ответственного за комплаенс по итогам код-ревью. Мы проводим аудит набора флагов в каждом релизе — 86 аудитов релизов с 2023 года, с нулевым числом выявленных несоответствий.

CI также запускает reuse lint по дереву исходного кода прошивки, чтобы убедиться, что каждый файл содержит комментарий SPDX-License-Identifier в первых 30 строках. Файлы без идентификатора приводят к сбою сборки. Это позволяет устранить ошибку «я забыл добавить заголовок лицензии», которая исторически была наиболее распространённым дефектом комплаенса в нашей отрасли.

9. Патентные гранты и компонент Apache-2.0

Компоненты mbedTLS, Zephyr и отдельные части загрузочного процесса K7 лицензированы по Apache-2.0. Положение о патентном гранте (раздел 3) Apache-2.0 представляет собой односторонний грант: контрибьютор предоставляет пользователю патентную лицензию. Пользователь, в свою очередь, соглашается с тем, что любой патентный иск, который он инициирует против контрибьютора, прекращает действие гранта.

Мы не инициировали патентных исков против каких-либо контрибьюторов Apache-2.0 и не получали уведомлений о патентных претензиях ни от одного контрибьютора. Таким образом, грант остаётся в силе. Мы фиксируем эту позицию в досье по комплаенсу прошивки.

Покупатель, который включает собственные патенты в прошивку (например, частный движок TTS, лицензируемый нам), должен учитывать, что грант Apache-2.0 не распространяется на его патенты. Его патенты остаются его собственностью и не лицензируются обратно сообществу открытого исходного кода. Это задокументировано в нашей статье Анализ патентного ландшафта IP для читающей ручки.

10. Практический чек-лист по комплаенсу для OEM/ODM-покупателей

Перед отгрузкой читалки под собственным брендом ответственный за комплаенс покупателя должен проверить следующие 10 пунктов:

  1. Запросите SPDX SBOM для версии прошивки, которую вы планируете отгружать.
  2. Подтвердите, что встроенное уведомление об открытом исходном коде доступно из меню «О программе».
  3. Убедитесь, что печатное руководство пользователя содержит перечень лицензий на указанных страницах.
  4. Запросите URL веб-страницы открытого исходного кода и подтвердите работоспособность загрузки соответствующего исходного кода.
  5. Подтвердите, что исключение FreeType задокументировано для сборок L5, Q8, T2, Y6.
  6. Убедитесь, что путь перелинковки LGPL задокументирован для инструмента-компаньона для ПК (если вы его поставляете).
  7. Запросите флаги сборки CI, обеспечивающие изоляцию лицензий.
  8. Подтвердите, что срок хранения соответствует циклу аудита на вашем рынке (84 месяца для EU RED и KC).
  9. Запросите политику обратной разработки для модулей прошивки.
  10. Проверьте позицию по патентному гранту для компонентов Apache-2.0.

Двухчасового звонка-ревью между вашим ответственным за комплаенс и нашей командой прошивки достаточно, чтобы закрыть все 10 пунктов. С 2023 года мы внедрили этот чек-лист для более чем 230 реселлеров.

Чек-лист по комплаенсу открытого исходного кода (10 пунктов)
============================================
1.  Наличие SPDX SBOM
2.  Доступность встроенного уведомления
3.  Печатное руководство содержит перечень лицензий
4.  Доступность веб-страницы открытого исходного кода
5.  Исключение FreeType задокументировано
6.  Путь перелинковки LGPL задокументирован
7.  Наличие флагов изоляции лицензий в CI
8.  Срок хранения 84 месяца
9.  Политика обратной разработки ясна
10. Позиция по патентному гранту Apache-2.0 задокументирована
============================================
Расчётное время ревью: 2 часа
============================================

87%

12. Сопутствующие материалы

Запросить цену — получите быстрый ответ с фабрики

MIT — 22 packages

Frequently Asked Questions

Нужно ли поставлять исходный код GPL вместе с читалкой?
Только модели L5, Q8, T2 и Y6 содержат FreeType, распространяемый по GPLv2 с исключением FreeType License. Эти модели должны включать тексты GPLv2 и FTL на устройстве (18 КБ + 6 КБ на Y6) и предоставлять соответствующий исходный код FreeType на странице открытого исходного кода бренда. Остальные 7 моделей не содержат кода GPL.
Поставляются ли компоненты LGPL непосредственно на читалке?
Нет. Четыре компонента LGPL (glibc, libusb, libsodium, Qt) находятся в ПК-утилите-компаньоне и в заводском тестовом стенде, а не на читалке. Сама читалка содержит только разрешительные лицензии (MIT/BSD/Apache) и один компонент GPLv2/FTL. Предложение соответствующего исходного кода для инструментария LGPL задокументировано на странице открытого исходного кода бренда.
Как получить доступ к уведомлению об открытом исходном коде на читалке?
Удерживайте кнопку увеличения громкости 5 секунд при загрузке. Устройство перейдёт в диагностический экран с пунктом «Open Source Licenses». Размер уведомления о лицензии варьируется от 11 КБ у P2 до 47 КБ у Y6 в зависимости от количества компонентов.
Что произойдёт, если я форкну компонент открытого кода в читалке?
Форк компонента LGPL или GPL создаёт обязательства по производному продукту: вы должны предоставить исходный код форка под той же лицензией. Для разрешительных лицензий (MIT, BSD, Apache-2.0) форк остаётся под вашей собственной лицензией, но должен сохранять оригинальное уведомление об авторских правах. Все форки фиксируются в SPDX SBOM.
Какая лицензия открытого кода требует наибольших усилий по соблюдению?
GPLv2 с исключением FreeType требует наибольших усилий. Необходимо включить 24 КБ текстов лицензий на устройство, разместить соответствующий исходный код в интернете, отобразить предложение исходного кода в меню «О устройстве» и в печатном руководстве, а также хранить документацию в течение 84 месяцев. Apache-2.0 занимает второе место из-за пункта о предоставлении патентных прав.
Ваша корзина
Разрешение cookies улучшит вашу работу с этим сайтом. Политика cookies
Chat on WhatsApp