⚖️ License Management¶
Gestión automática de licencias y atribuciones de dependencias de terceros para cumplimiento legal.
🎯 Propósito¶
Este sistema automatiza la generación de documentos de atribución legal para todas las dependencias de terceros usadas en AudioLab, asegurando compliance con licencias open-source.
📄 Scripts¶
generate_attributions.ps1 (Windows)¶
# Generación básica
.\generate_attributions.ps1
# Con opciones
.\generate_attributions.ps1 -OutputPath ".\dist\LICENSES.txt"
.\generate_attributions.ps1 -IncludeFullText
.\generate_attributions.ps1 -Verbose
generate_attributions.sh (Unix/macOS)¶
# Generación básica
./generate_attributions.sh
# Con opciones
./generate_attributions.sh --output ./dist/LICENSES.txt
./generate_attributions.sh --full-text
./generate_attributions.sh --verbose
⚙️ Cómo Funciona¶
┌─────────────────────────────────────────────────────┐
│ 1️⃣ DETECCIÓN DE DEPENDENCIAS │
│ │
│ Script lee: │
│ • vcpkg installed packages │
│ • Versiones instaladas │
│ • Metadata de cada paquete │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 2️⃣ EXTRACCIÓN DE LICENCIAS │
│ │
│ Para cada paquete: │
│ • Lee vcpkg.json del port │
│ • Busca archivos LICENSE │
│ • Extrae copyright info │
│ • Identifica tipo de licencia │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 3️⃣ GENERACIÓN DE DOCUMENTO │
│ │
│ Crea THIRD_PARTY_NOTICES.txt: │
│ • Header legal │
│ • Lista de dependencias │
│ • Licencia de cada una │
│ • (Opcional) Texto completo │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 4️⃣ VERIFICACIÓN │
│ │
│ Chequea: │
│ • Licencias problemáticas (GPL, AGPL) │
│ • Incompatibilidades │
│ • Warnings si hay issues │
└─────────────────────────────────────────────────────┘
📋 Formato del Output¶
THIRD_PARTY_NOTICES.txt¶
═══════════════════════════════════════════════════════════════════════
THIRD PARTY NOTICES
═══════════════════════════════════════════════════════════════════════
AudioLab uses third-party libraries or other resources that may be
distributed under licenses different than the AudioLab software.
───────────────────────────────────────────────────────────────────────
JUCE Framework
───────────────────────────────────────────────────────────────────────
Version: 7.0.9
License: GPL v3 / Commercial (dual-license)
Homepage: https://juce.com
Description: Cross-platform C++ framework for audio applications
Copyright: © 2022 Raw Material Software Limited
───────────────────────────────────────────────────────────────────────
fmt
───────────────────────────────────────────────────────────────────────
Version: 10.1.1
License: MIT
Homepage: https://fmt.dev
Description: Modern formatting library
Copyright: © 2012-2023 Victor Zverovich
───────────────────────────────────────────────────────────────────────
spdlog
───────────────────────────────────────────────────────────────────────
Version: 1.12.0
License: MIT
Homepage: https://github.com/gabime/spdlog
Description: Fast C++ logging library
...
═══════════════════════════════════════════════════════════════════════
END OF NOTICES
═══════════════════════════════════════════════════════════════════════
🔍 Verificación de Licencias¶
El script automáticamente identifica licencias que pueden requerir atención:
⚠️ Licencias Problemáticas¶
| Licencia | Problema | Solución |
|---|---|---|
| GPL-3.0 | Copyleft fuerte | Requiere que AudioLab sea GPL también |
| AGPL | Copyleft de red | Requiere publicar código incluso en SaaS |
| LGPL-3.0 | Copyleft limitado | OK si dynamic linking, problemas con static |
✅ Licencias Compatibles¶
- MIT: Totalmente permisiva
- Apache-2.0: Permisiva con protección de patentes
- BSD-3-Clause: Permisiva
- ISC: Permisiva simple
- Zlib: Permisiva para software
🚀 Workflow de Release¶
Pre-Release Checklist¶
# 1. Actualizar dependencias
vcpkg update
vcpkg upgrade
# 2. Generar atribuciones
.\generate_attributions.ps1
# 3. Revisar output
notepad THIRD_PARTY_NOTICES.txt
# 4. Verificar licencias problemáticas
# (El script lo hace automáticamente)
# 5. Incluir en distribución
copy THIRD_PARTY_NOTICES.txt dist\
Integración en Build¶
# CMakeLists.txt
add_custom_target(generate_licenses
COMMAND powershell -ExecutionPolicy Bypass -File
${CMAKE_SOURCE_DIR}/scripts/generate_attributions.ps1
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Generating third-party license notices"
)
add_dependencies(audiolab_plugin generate_licenses)
📦 Distribución¶
Incluir en Instalador¶
installer/
├─ AudioLab.msi
├─ LICENSE.txt # Licencia de AudioLab
├─ THIRD_PARTY_NOTICES.txt # Licencias de dependencias ← INCLUIR
└─ README.txt
Mostrar en Plugin¶
// AboutDialog.cpp
void AboutDialog::showThirdPartyNotices()
{
auto noticesFile = File::getCurrentWorkingDirectory()
.getChildFile("THIRD_PARTY_NOTICES.txt");
if (noticesFile.existsAsFile())
{
auto content = noticesFile.loadFileAsString();
showLicenseDialog(content);
}
}
🔧 Troubleshooting¶
vcpkg no encontrado¶
No hay paquetes instalados¶
Licencias faltantes¶
Algunos paquetes no tienen metadata de licencia completa. En ese caso:
- Buscar manualmente en el repositorio del proyecto
- Añadir información al output file manualmente
- Considerar contribuir fix al port de vcpkg
📚 Referencias Legales¶
Open Source Licenses¶
GPL Compatibility¶
Best Practices¶
🎯 Casos Especiales¶
JUCE (Dual-License)¶
JUCE tiene licencia dual: - GPL v3: Open source - Commercial: Para productos comerciales
Para AudioLab: Se requiere licencia comercial de JUCE si AudioLab es comercial.
Static vs Dynamic Linking¶
Algunas licencias (LGPL) tienen diferentes requisitos según el tipo de linking:
- Dynamic linking: Generalmente OK
- Static linking: Puede requerir publicar código
AudioLab strategy: Preferir dynamic linking para dependencias LGPL.
Última actualización: 2025-10-03
Ejecutar antes de cada release: ✅ CRÍTICO