Skip to content

⚖️ 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

# Especificar path manualmente
.\generate_attributions.ps1 -VcpkgRoot "C:\vcpkg"

No hay paquetes instalados

# Instalar dependencias primero
vcpkg install

Licencias faltantes

Algunos paquetes no tienen metadata de licencia completa. En ese caso:

  1. Buscar manualmente en el repositorio del proyecto
  2. Añadir información al output file manualmente
  3. 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