Guia prático para a conformidade com licenças GPL, LGPL, MIT, BSD e Apache-2.0 no firmware das canetas de leitura, com lista de materiais de código aberto por modelo.

Publicado em: out 26, 2020 - 81 Visualizações

Caneta de Leitura Open Source e Licença GPL: Conformidade Prática para Dispositivos Incorporados

Público-alvo: Este artigo destina-se a responsáveis de conformidade OEM/ODM, engenheiros de firmware e proprietários de marcas em importadores, editoras e distribuidores de material educativo que têm de cumprir obrigações GPL/LGPL/MIT/BSD/Apache-2.0 numa caneta de leitura inteligente antes do envio.

O software de código aberto corre sob o código proprietário em cada caneta de leitura moderna. A nossa linha de 11 modelos — B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6 — é fornecida com uma lista embarcada de materiais de código aberto que totaliza 47 pacotes distintos em 8 compilações de firmware. A maioria é MIT, BSD ou Apache-2.0; alguns são LGPL; um é GPLv2. Nenhum é GPLv3.

Este artigo percorre as obrigações de licença que deve cumprir ao revender uma caneta de leitura, os flags de compilação que utilizamos para isolar componentes copyleft e a documentação que enviamos com cada contentor.

Conselho ao comprador: «Código aberto» não significa «isento de obrigações». Os componentes LGPL e GPL exigem que disponibilize o código-fonte correspondente, que envie os textos das licenças e (em alguns casos) que aceite a engenharia inversa para depuração. Inclua isso no seu orçamento de conformidade desde o início.

1. Porque é que o código aberto é importante numa caneta de leitura

O código de código aberto é utilizado por ser a forma de maior qualidade e menor custo de enviar um produto embarcado em 2026. As alternativas — escrever a sua própria stack TLS, o seu próprio sistema de ficheiros FAT, o seu próprio codec de áudio — acrescentariam 30 a 60 meses de engenharia ao projeto e não igualariam a postura de segurança de bibliotecas auditadas pela comunidade. Por isso, cada caneta de leitura moderna inclui componentes de código aberto e cada componente de código aberto tem uma licença.

As categorias de licenças relevantes para a nossa linha:

  • MIT e BSD-2/3-Clause: Permissiva, exige apenas o aviso de direitos de autor. Sem copyleft. Cobre FreeRTOS, LVGL, FatFs, OPUS e a maior parte da nossa stack gráfica.
  • Apache-2.0: Permissiva com concessão explícita de patentes. Cobre mbedTLS, Zephyr e partes do fluxo de arranque do K7.
  • LGPL-2.1 e LGPL-3.0: Copyleft fraco, exige que a biblioteca possa ser religada. Cobre a GNU C Library (glibc) apenas no nosso equipamento de teste baseado em Linux — não na própria caneta.
  • GPLv2 com exceção FreeType: Copyleft forte, mas com uma exceção especial da FreeType License (FTL) que permite a ligação estática em produtos comerciais. Cobre o FreeType em Y6, Q8, T2 e L5.
  • Domínio público: Sem obrigações. Cobre partes do analisador OID escrito por nós em 2018 e lançado sob CC0.

As cinco categorias geram cinco posturas de conformidade distintas. Uma abordagem ingénua que as trate como «código aberto = nada a fazer» está errada; uma abordagem ingénua que as trate como «GPL = catastrófico» também está errada. Cada uma tem uma resposta específica e documentada.

Componentes de código aberto no firmware da caneta de leitura
===============================================
Permissiva (MIT/BSD/Apache) : 41 pacotes
LGPL                         : 4 pacotes
GPLv2+exceção FTL            : 1 pacote
GPLv3                        : 0 pacotes
Domínio público (CC0)        : 1 pacote
===============================================
Total: 47 pacotes de código aberto
===============================================

2. Composição de código aberto por modelo

Nem todas as canetas de leitura utilizam o mesmo conjunto de pacotes de código aberto. A composição difere por modelo e por versão de firmware. Abaixo está o retrato da nossa frota do 3.º trimestre de 2026:

Modelo RTOS Gráficos Sistema de ficheiros Criptografia Codec Fonte LGPL? GPL?
B1 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap Não Não
B2 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap Não Não
F8 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap Não Não
K7 Zephyr LVGL FatFs mbedTLS OPUS Bitmap No No
KF1 FreeRTOS LVGL FatFs mbedTLS OPUS Bitmap No No
L5 Zephyr LVGL FatFs mbedTLS OPUS FreeType No Yes
P2 FreeRTOS LVGL FatFs n/a n/a Bitmap No No
Q6 Zephyr LVGL FatFs mbedTLS OPUS Bitmap No No
Q8 Zephyr LVGL FatFs mbedTLS OPUS FreeType No Yes
T2 ThreadX LVGL FatFs mbedTLS OPUS FreeType Não Sim
Y6 Zephyr LVGL FatFs mbedTLS OPUS FreeType Não Sim

Os quatro modelos com GPL (L5, Q8, T2, Y6) utilizam FreeType para a renderização das capas dos livros OID. Os sete modelos sem GPL utilizam um motor de fontes bitmap mais pequeno. Escolhemos esta atribuição porque o Licenciamento e royalties do codec da caneta de leitura e o Licenciamento e conformidade do firmware já são significativos, e não queríamos agravá-los com uma forte obrigação de copyleft em todas as canetas.

3. Os componentes LGPL e a obrigação de relinkagem

Quatro componentes sob LGPL estão presentes no nosso dispositivo de teste e na ferramenta de PC complementar — não na caneta de leitura propriamente dita. Os componentes são:

  • glibc 2.31 (LGPL-2.1) — utilizado pelo harness de teste de fábrica e pelo compositor OTA para PC.
  • libusb 1.0.24 (LGPL-2.1) — utilizado pelo harness de teste de fábrica para acesso USB ao dispositivo.
  • Qt 5.15 (LGPL-3.0) — utilizado pela ferramenta de autoria de livros OID para distribuidores.
  • libsodium 1.0.18 (ISC, permissiva) — utilizado pelo compositor OTA do lado da cloud.

A obrigação LGPL é que o utilizador deve poder religar a aplicação contra uma versão diferente da biblioteca. Para firmware embebido, isto é satisfeito por uma de duas vias documentadas:

  1. Ligação dinâmica: a biblioteca está num objeto partilhado separado no sistema de ficheiros do dispositivo. O utilizador pode substituir o objeto.
  2. Disponibilização do código-fonte: a aplicação é ligada estaticamente, mas o código-fonte correspondente completo da biblioteca é disponibilizado ao utilizador.

Utilizamos a via 2 porque a caneta não tem carregador de objetos partilhados. O código-fonte correspondente é disponibilizado na página de marca do nosso website, com um QR code no manual do utilizador impresso. Um comprador que encomende 12.000 unidades para um programa escolar verá a página 38 do manual impresso com o seguinte texto: "Open-source software is used in this device. Source code is available at your-distributor.example/open-source."

A LGPL-3.0 acrescenta também a cláusula "anti-tivoization" — o utilizador deve poder executar uma biblioteca modificada no dispositivo. A nossa cadeia de secure-boot não permite firmware modificado pelo utilizador, pelo que tratamos isto apenas como uma obrigação documental e indicamos no EULA que os direitos de modificação pelo utilizador da LGPL-3.0 não são estendidos a dispositivos com cadeias de boot fechadas. Esta posição foi analisada por três escritórios de advocacia externos.

Dica para o comprador: Se o seu mercado de distribuição proibir LGPL (alguns concursos públicos coreanos proíbem), solicite a opção de ligação estática sem LGPL. Podemos entregar os 11 modelos sem qualquer componente LGPL, ao custo de reduzir a ferramenta de autoria de livros OID a uma interface CLI.

4. FreeType, a exceção FTL e o impacto da GPLv2

As quatro canetas de leitura que incluem FreeType (L5, Q8, T2, Y6) fazem-no sob os termos duais GPLv2 + FreeType License (FTL). A exceção FTL é exclusiva do FreeType: concede o direito de ligar estaticamente o FreeType numa aplicação não-GPL desde que:

  • O aviso de copyright do FreeType seja reproduzido.
  • Os textos das licenças (GPLv2 e FTL) sejam incluídos com o dispositivo.
  • O utilizador possa obter o código-fonte correspondente do FreeType (mas não necessariamente da aplicação envolvente).

Incluímos ambos os textos de licença no próprio dispositivo. No firmware do Y6 (versão 3.3.1) o texto GPLv2 ocupa 18 KB e o FTL ocupa 6 KB; ambos estão acessíveis através do menu About. A "oferta do código-fonte correspondente" está publicada na nossa página de open-source com uma ligação de download por modelo.

A exceção FTL não é uma solução de contorno — é uma permissão específica e estreita. Analisámos a exceção com o nosso aconselhamento jurídico externo em 2024 e concluímos que não se estende à GPLv3. Por isso, não utilizamos quaisquer componentes GPLv3 no firmware, independentemente do seu mérito técnico.

Uma armadilha subtil: qualquer derivado do FreeType que não tenhamos modificado não impõe novas obrigações, mas se alguma vez fizermos um fork do FreeType para adicionar um glifo privado, o fork é em si mesmo GPLv2. Nunca o fizemos — a nossa build do FreeType é a versão upstream 2.13.2 sem patches locais. Isto está documentado no nosso Engenharia de custo da lista de materiais da caneta de leitura e é rastreado até ao SBOM.

5. O padrão de conformidade do "menu About"

Todas as canetas de leitura expõem um aviso de licenças open-source no menu About. O padrão é consistente nos 11 modelos: premir o botão de aumento de volume durante 5 segundos durante o arranque faz o dispositivo entrar num ecrã de diagnóstico, onde uma das entradas é "Open Source Licenses". O total de texto no dispositivo soma 47 KB para o Y6 (o mais carregado) e 14 KB para o B1 (o mais leve).

Modelo Tamanho do aviso de licença FreeType presente Total de páginas de licença
B1 14 KB Não 6
B2 14 KB Não 6
F8 14 KB Não 6
K7 16 KB Não 6
KF1 14 KB Não 6
L5 32 KB Sim 12
P2 11 KB Não 5
Q6 16 KB Não 6
Q8 38 KB Sim 14
T2 40 KB Sim 14
Y6 47 KB Sim 16

O manual do utilizador repete a lista de licenças nas páginas 36–52 do Y6, com uma declaração clara em inglês no início da secção. Os mercados não anglófonos recebem uma versão traduzida. Suportamos atualmente 12 idiomas: inglês, espanhol, francês, alemão, árabe, português, russo, japonês, coreano, vietnamita, tailandês e bahasa indonésio.

6. Avisos de código aberto na web e em formato impresso

O aviso no dispositivo é apenas uma metade do padrão de conformidade. A outra metade é a página web e o manual impresso. A nossa página de código aberto lista cada pacote em cada build de firmware, com o identificador de licença SPDX, o URL de origem, o checksum e a ligação para o código-fonte correspondente, quando aplicável.

A página é gerada por um script que é executado em cada versão de firmware. O script produz:

  • Um ficheiro JSON (legível por máquina, adequado para análise automatizada pela equipa jurídica).
  • Uma página HTML (legível por humanos, acessível através da leitura do código QR no manual).
  • Um PDF (incluído como suplemento do manual impresso, a partir da página 38).

O código QR remete para um URL específico por modelo, como por exemplo /opensource/y6. O URL permanece estável durante todo o ciclo de vida do modelo — não quebramos as ligações quando lançamos novo firmware; adicionamos a nova versão à página.

Mantemos cada snapshot JSON do SPDX durante 84 meses, em conformidade com o nosso período de retenção de conformidade de firmware (ver Licença e Conformidade do Firmware da Caneta de Leitura). O período de retenção abrange o prazo máximo de inquérito entre os nossos 47 destinos de exportação.

Snapshot de Conformidade de Código Aberto, 3.º trimestre de 2026
=========================================
Total de pacotes nos 11 modelos    : 47
Tipos de licença                   : 5
Modelos com GPL/FTL                : 4 (L5, Q8, T2, Y6)
Modelos apenas com LGPL            : 0 (a LGPL está nas ferramentas)
Tamanho da licença no dispositivo (máximo) : 47 KB (Y6)
Tamanho da licença no dispositivo (mínimo) : 11 KB (P2)
Idiomas da página de código aberto : 12
Período de retenção                : 84 meses
=========================================

7. Direitos de engenharia inversa ao abrigo da LGPL-3.0 e do DMCA

A LGPL-3.0 concede ao utilizador o direito de aplicar engenharia inversa na biblioteca para fins de depuração. O nosso EULA não estende este direito ao resto do firmware — a camada de aplicação proprietária permanece fechada. Contudo, honramos uma exceção restrita: se um comprador reportar um bug que não conseguimos reproduzir, iremos, ao nosso critério, aceitar uma build de relatório de bug assinada pela nossa chave raiz que abre o módulo relevante para uma sessão de depuração.

A isenção da Secção 1201 do DMCA relativa à "utilização lícita de um programa de aplicação geralmente disponível" não se aplica a uma caneta de leitura, na nossa interpretação, porque o dispositivo não constitui uma obra protegida por direitos de autor no sentido da Secção 1201. Confirmámos esta posição com dois escritórios de advocacia externos e documentámo-la no contrato-mestre de fornecimento.

Na UE, a Diretiva de Hacking de 2016 (Artigo 6.º) cria uma exceção semelhante para a interoperabilidade. Honramos esta diretiva disponibilizando um protocolo inter-processos documentado para o módulo de emparelhamento Bluetooth dos modelos K7, Q8, T2 e Y6.

8. Flags de compilação e isolamento de licenças na CI

O nosso pipeline de integração contínua (CI) utiliza três flags de compilação para impor o isolamento de licenças:

  • -DLGPL_ISOLATION=1 — garante que todos os componentes LGPL são ligados num arquivo estático separado, e não no blob principal do firmware.
  • -DFREETYPE_LINK_STATIC=1 — fixa o FreeType em ligação estática para os quatro modelos afetados.
  • -DOPENSSOURCE_FORMATTED=1 — formata o aviso de licença e emite a saída SPDX.

Estas flags estão verificadas na configuração de compilação e não podem ser substituídas por um programador sem uma aprovação documentada por revisão de código do responsável de conformidade. Auditamos o conjunto de flags em cada versão — 86 auditorias de versão desde 2023, com zero não conformidades.

A CI também executa o reuse lint sobre a árvore de origem do firmware para verificar que cada ficheiro contém um comentário SPDX-License-Identifier nas primeiras 30 linhas. Os ficheiros sem identificador reprovam a compilação. Isto apanha o erro «esqueci-me de adicionar o cabeçalho da licença», que tem sido historicamente o incumprimento mais comum no nosso setor.

9. Concessões de patentes e o componente Apache-2.0

O mbedTLS, o Zephyr e partes selecionadas do fluxo de arranque do K7 são licenciados sob Apache-2.0. A cláusula de concessão de patentes (Secção 3) da Apache-2.0 é uma concessão unilateral: o contribuidor concede ao utilizador uma licença de patente. Por sua vez, o utilizador concorda que qualquer litigação de patentes que inicie contra o contribuidor termina a concessão.

Não iniciámos qualquer litigação de patentes contra contribuidores Apache-2.0, nem recebemos quaisquer notificações de reivindicação de patentes de qualquer contribuidor. A concessão está, portanto, inalterada. Documentamos esta posição no dossiê de conformidade do firmware.

Um comprador que inclua as suas próprias patentes no firmware (por exemplo, um motor TTS privado que nos licencia) deve estar ciente de que a concessão Apache-2.0 não se estende às suas patentes. As suas patentes permanecem sua propriedade e não são licenciadas à comunidade open source. Isto está documentado no nosso artigo Reading Pen Patent IP Landscape.

10. Lista de verificação prática de conformidade para compradores OEM/ODM

Antes de enviar uma caneta de leitura de marca própria, o responsável de conformidade do comprador deve validar estes 10 pontos:

  1. Solicitar o SPDX SBOM para a versão de firmware que pretende enviar.
  2. Confirmar que o aviso open source no dispositivo está acessível a partir do menu Sobre.
  3. Verificar que o manual do utilizador impresso inclui a lista de licenças nas páginas documentadas.
  4. Pedir o URL da página open source web e confirmar que o download do código-fonte correspondente funciona.
  5. Confirmar que a exceção FreeType está documentada para as compilações L5, Q8, T2, Y6.
  6. Verificar que o caminho de relink LGPL está documentado para a ferramenta PC companion (se a fornecer).
  7. Solicitar as flags de compilação da CI que impõem o isolamento de licenças.
  8. Confirmar que o período de retenção corresponde ao ciclo de auditoria do seu mercado (84 meses para EU RED e KC).
  9. Solicitar a política de engenharia inversa para os módulos de firmware.
  10. Verificar a posição da concessão de patentes para os componentes Apache-2.0.

Uma chamada de revisão de 2 horas entre o seu responsável de conformidade e a nossa equipa de firmware é suficiente para validar todos os 10 pontos. Onboardámos mais de 230 revendedores com esta lista de verificação desde 2023.

Lista de Verificação de Conformidade Open Source (10 pontos)
============================================
1.  SPDX SBOM presente
2.  Aviso no dispositivo acessível
3.  Manual impresso com lista de licenças
4.  Página open source web acessível
5.  Exceção FreeType documentada
6.  Caminho de relink LGPL documentado
7.  Flags de isolamento de licenças na CI presentes
8.  Período de retenção de 84 meses
9.  Política de engenharia inversa clara
10. Posição da concessão de patentes Apache-2.0 documentada
============================================
Tempo estimado de revisão: 2 horas
============================================

87%

12. Leituras relacionadas

Solicite um Orçamento — Obtenha uma Resposta Rápida da Fábrica

MIT — 22 packages

Frequently Asked Questions

Um leitor de leitura tem de fornecer o código-fonte GPL?
Apenas os modelos L5, Q8, T2 e Y6 incluem o FreeType, que é GPLv2 com a exceção da licença FreeType. Estes modelos têm de incluir e os textos GPLv2 e FTL no dispositivo (18 KB + 6 KB no Y6) e disponibilizar o código-fonte correspondente do FreeType na página de open source da marca. Os restantes 7 modelos não enviam qualquer código GPL.
Os componentes LGPL são enviados no próprio leitor de leitura?
Não. Os quatro componentes LGPL (glibc, libusb, libsodium, Qt) encontram-se na ferramenta companion PC e no harness de teste de fábrica, não no leitor. O leitor apenas inclui componentes permissivos (MIT/BSD/Apache) e um componente GPLv2/FTL. Documentamos a oferta de código-fonte correspondente para as ferramentas LGPL na página de open source da marca.
Como se acede ao aviso de open source no leitor de leitura?
Mantenha premido o botão de aumentar o volume durante 5 segundos durante o arranque. O dispositivo entra num ecrã de diagnóstico com uma entrada 'Open Source Licenses'. O tamanho do aviso de licença varia entre 11 KB no P2 e 47 KB no Y6, consoante o número de componentes.
O que acontece se eu criar um fork de um componente Open source no leitor de leitura?
Criar um fork de um componente LGPL ou GPL gera obrigações de obra derivada: tem de disponibilizar o código-fonte do fork sob a mesma licença. Para licenças permissivas (MIT, BSD, Apache-2.0), o fork permanece sob a sua própria licença, mas tem de manter o aviso de copyright original. Documentamos todos os forks no SPDX SBOM.
Que licença open source exige o maior esforço de conformidade?
A GPLv2 com a exceção FreeType é a que exige maior esforço. Requer a inclusão de 24 KB de textos de licença no dispositivo, a publicação do código-fonte correspondente na web, a apresentação de uma oferta de código-fonte no menu About e no manual impresso, e a conservação da documentação durante 84 meses. A Apache-2.0 é a segunda que exige maior esforço, devido à sua cláusula de concessão de patentes.
O seu carrinho
A sua experiência neste site será melhorada ao permitir cookies. Política de Cookies
Chat on WhatsApp