# Licencias de componentes de terceros — Orion DB2 Studio

Orion DB2 Studio es un **producto comercial de pago**. Todos los componentes de
terceros que incluye tienen licencia que permite el uso comercial y la
redistribución. Este documento lo acredita componente por componente.

Última revisión: **17 de octubre de 2026**.

---

## Resumen

| Componente | Versión | Licencia | ¿Uso comercial? | ¿Redistribuible? | ¿Exige aviso? |
|---|---|---|---|---|---|
| JTOpen (IBM Toolbox for Java) | 21.0.7 | IBM Public License 1.0 | Sí | Sí | **Sí** |
| IKVM | 8.16.2 | Zlib | Sí | Sí | No, pero se incluye |
| Avalonia | 12.1.4 | MIT | Sí | Sí | **Sí** |
| Avalonia.Controls.DataGrid | 12.1.2 | MIT | Sí | Sí | **Sí** |
| AvaloniaEdit | 12.0.0 | MIT | Sí | Sí | **Sí** |
| TextMateSharp | 2.0.4 | MIT | Sí | Sí | **Sí** |
| CommunityToolkit.Mvvm | 8.4.2 | MIT | Sí | Sí | **Sí** |
| DiffPlex | 1.9.0 | Apache 2.0 | Sí | Sí | **Sí** |
| ClosedXML | 0.105.1 | MIT | Sí | Sí | **Sí** |
| PDFsharp + MigraDoc | 6.1.1 | MIT | Sí | Sí | **Sí** |
| QuestPDF | 2026.9.1 | Community (MIT con condición) | Sí, por debajo del límite | Sí | **Sí** |
| ScottPlot | 5.1.59 | MIT | Sí | Sí | **Sí** |
| MSAGL (AutomaticGraphLayout) | 1.1.12 | MIT | Sí | Sí | **Sí** |
| Microsoft.Data.Sqlite | 10.0.13 | MIT | Sí | Sí | **Sí** |
| System.CommandLine | 2.0.13 | MIT | Sí | Sí | **Sí** |
| Serilog | 4.4.0 | Apache 2.0 | Sí | Sí | **Sí** |
| Microsoft.Extensions.* | 10.0.13 | MIT | Sí | Sí | **Sí** |
| Shouldly (solo pruebas) | 4.3.0 | BSD-3-Clause | Sí | No se distribuye | — |
| xUnit (solo pruebas) | 2.9.3 | Apache 2.0 | Sí | No se distribuye | — |

**No hay ningún componente con licencia copyleft fuerte** (GPL, AGPL, LGPL).
Ninguno obliga a publicar el código fuente de Orion DB2 Studio.

---

## Detalle por componente

### JTOpen (IBM Toolbox for Java) — el más importante

- **Versión:** 21.0.7 (`net.sf.jt400:jt400` en Maven Central)
- **Licencia:** IBM Public License, versión 1.0
- **Sitio:** https://github.com/IBM/JTOpen
- **Copyright:** IBM Corporation

Es el driver JDBC con el que la aplicación habla con los *host servers* del
IBM i. Se compila a .NET con IKVM y se distribuye como `jt400.dll`.

**Qué exige la IBM Public License 1.0:**

1. Conservar los avisos de copyright y la propia licencia en las
   redistribuciones. → Se incluye `LICENCIAS_TERCEROS.txt` en el instalador y
   el texto aparece en la pantalla «Acerca de».
2. Si se distribuye en forma de objeto (que es nuestro caso), indicar que el
   código fuente está disponible y dónde. → Se indica el repositorio de GitHub.
3. El distribuidor asume la responsabilidad frente a terceros por su propio
   producto. → Está contemplado en las condiciones de venta.

**No exige** publicar el código de Orion DB2 Studio: la IPL 1.0 es de copyleft
débil y solo afecta a las modificaciones del propio JTOpen, que no hacemos.

> **Importante:** el archivo `jt400.jar` **no está en el repositorio**. Se
> descarga de Maven Central la primera vez que se compila (ver
> `Directory.Build.targets`). El binario que se distribuye es el `jt400.dll`
> que produce IKVM a partir de él.

### IKVM

- **Versión:** 8.16.2
- **Licencia:** Zlib
- **Sitio:** https://github.com/ikvmnet/ikvm
- **Copyright:** Jeroen Frijters y colaboradores

Compilador y runtime de Java sobre .NET. Es lo que permite que el cliente no
necesite instalar Java. La licencia Zlib es permisiva y no exige aviso en
binarios, pero se incluye igualmente.

Se distribuyen `IKVM.Runtime.dll`, `IKVM.Java.dll`, `IKVM.CoreLib.dll`,
`IKVM.ByteCode.dll` y la biblioteca nativa correspondiente a la plataforma
(`ikvm.dll`, `libikvm.so` o `libikvm.dylib`).

### Avalonia y complementos

- **Avalonia 12.1.4**, **Avalonia.Desktop**, **Avalonia.Themes.Fluent**,
  **Avalonia.Fonts.Inter**, **Avalonia.Controls.DataGrid 12.1.2**
- **Licencia:** MIT
- **Sitio:** https://github.com/AvaloniaUI/Avalonia

La fuente **Inter** que incluye `Avalonia.Fonts.Inter` está bajo
*SIL Open Font License 1.1*, que permite la redistribución incrustada.

### AvaloniaEdit y TextMateSharp

- **AvaloniaEdit 12.0.0** y **AvaloniaEdit.TextMate 12.0.0** — MIT
- **TextMateSharp 2.0.4** — MIT
- Basados en **AvalonEdit**, Copyright (c) Daniel Grunwald — MIT
- **Sitio:** https://github.com/AvaloniaUI/AvaloniaEdit

Editor de texto con resaltado de sintaxis. Las gramáticas de TextMate que
incluye TextMateSharp proceden de proyectos con licencia MIT.

### CommunityToolkit.Mvvm

- **Versión:** 8.4.2 — **Licencia:** MIT
- **Sitio:** https://github.com/CommunityToolkit/dotnet
- Copyright (c) .NET Foundation y colaboradores

### DiffPlex

- **Versión:** 1.9.0 — **Licencia:** Apache 2.0
- **Sitio:** https://github.com/mmanela/diffplex
- Copyright (c) Matthew Manela

Apache 2.0 exige conservar el aviso de copyright y el archivo `NOTICE` si
existe. Se cumple en `LICENCIAS_TERCEROS.txt`.

### ClosedXML

- **Versión:** 0.105.1 — **Licencia:** MIT
- **Sitio:** https://github.com/ClosedXML/ClosedXML

Genera los archivos `.xlsx`. Árbol de dependencias comprobado con
`dotnet list package --include-transitive` el 17/10/2026:

| Paquete transitivo | Versión | Licencia |
|---|---|---|
| ClosedXML.Parser | 2.0.0 | MIT |
| DocumentFormat.OpenXml | 3.1.1 | MIT |
| DocumentFormat.OpenXml.Framework | 3.1.1 | MIT |
| ExcelNumberFormat | 1.1.0 | MIT |
| RBush.Signed | 4.0.0 | MIT |
| SixLabors.Fonts | 1.0.0 | Apache 2.0 |

> **Nota sobre SixLabors.** *ImageSharp* cambió a la licencia Six Labors Split,
> que restringe el uso comercial. Se comprobó explícitamente que
> **ClosedXML 0.105.1 no arrastra ImageSharp**: solo `SixLabors.Fonts 1.0.0`,
> que sigue bajo Apache 2.0. Conviene repetir esta comprobación cada vez que se
> actualice ClosedXML.

### QuestPDF — la única licencia con condición

- **Versión:** 2026.9.1 — **Licencia:** QuestPDF Community License
- **Sitio:** https://www.questpdf.com/license/

Genera el informe en PDF del módulo de análisis de aplicación. Es el único
componente del producto cuya licencia **depende de quién lo use**, así que
conviene tenerlo claro:

- La **Community License** es gratuita, incluido el uso comercial y la
  redistribución, para empresas con una facturación anual **por debajo de un
  millón de dólares**. Por encima de esa cifra hay que comprar la licencia
  profesional o la empresarial.
- **Orion Software Consulting está por debajo de ese límite.** Si algún día deja
  de estarlo, hay que comprar la licencia de QuestPDF o cambiar el motor del
  informe; lo segundo es hacedero, porque el informe está detrás de una clase
  (`LibraryAnalysisPdfReport`) y nada más del producto conoce QuestPDF.
- La licencia **exige declararla en código** antes de generar el primer
  documento. Lo hace `QuestPdfSetup.Register()`, que llaman el arranque de la
  aplicación, el de la línea de mandatos y el propio informe.

El aviso va en «Acerca de» y en el instalador, como el del resto.

**Por qué QuestPDF y no PDFsharp**, que ya estaba: PDFsharp **no trae fuentes**
y hay que buscarlas en el equipo (`OrionFontResolver`), de modo que en un Linux
sin `fonts-liberation` el informe no sale. QuestPDF las lleva incrustadas —Lato,
con licencia OFL—, que es lo que permite prometer que el informe sale igual
desde la aplicación, desde la CLI y en un servidor sin escritorio. Los informes
antiguos siguen con PDFsharp: migrarlos no aporta nada hoy.

### ScottPlot

- **Versión:** 5.1.59 — **Licencia:** MIT
- **Sitio:** https://scottplot.net/

Dibuja las gráficas del informe. Se eligió porque **dibuja sin interfaz**: se
apoya en SkiaSharp, que no necesita ventana ni servidor gráfico, así que el
mismo informe sale desde `orion-db2` y en un Linux sin escritorio. Las gráficas
de la pantalla se dibujan con controles de Avalonia, y las dos leen los colores
del mismo sitio (`AnalysisPalette`) para que coincidan.

### MSAGL — AutomaticGraphLayout

- **Versión:** 1.1.12 — **Licencia:** MIT
- **Sitio:** https://github.com/microsoft/automatic-graph-layout
- **Copyright:** Microsoft Corporation

Calcula dónde va cada nodo del diagrama y por dónde pasa cada flecha: reparto
por capas, minimización de cruces y ruteo. **Solo eso.** Dibujar es cosa del
producto —un control propio de Avalonia en la pantalla y un generador de SVG
para los documentos—, y por eso no se usa su paquete de dibujo
(`AutomaticGraphLayout.Drawing`, `GraphViewerGDI`), que arrastraría una pila
gráfica y no respetaría el tema claro u oscuro de la aplicación.

Ningún tipo de MSAGL sale del proyecto `OrionDb2Studio.AppAnalysis`.

### Microsoft.Data.Sqlite

- **Versión:** 10.0.13 — **Licencia:** MIT
- **Sitio:** https://learn.microsoft.com/dotnet/standard/data/sqlite/

Es el repositorio local del análisis de aplicación (D-111). Trae
`SQLitePCLRaw`, también MIT, con el motor de SQLite incrustado; **SQLite es de
dominio público**. No hay servidor que instalar ni servicio que arrancar: la
base es un archivo que el usuario puede borrar.

### System.CommandLine

- **Versión:** 2.0.13 — **Licencia:** MIT
- **Sitio:** https://github.com/dotnet/command-line-api

### Serilog

- **Serilog 4.4.0**, **Serilog.Sinks.File 7.0.0**,
  **Serilog.Sinks.Console 6.0.0**, **Serilog.Extensions.Logging 10.0.0**
- **Licencia:** Apache 2.0
- **Sitio:** https://serilog.net

### Microsoft.Extensions.*

- **DependencyInjection**, **Logging** y sus abstracciones, versión 10.0.13
- **Licencia:** MIT — Copyright (c) .NET Foundation

### .NET 10

- **Licencia:** MIT
- El runtime se distribuye incrustado en la publicación *self-contained*, lo
  cual permite expresamente la licencia de .NET.

---

## Componentes solo de desarrollo (no se distribuyen)

| Componente | Versión | Licencia |
|---|---|---|
| xUnit | 2.9.3 | Apache 2.0 |
| xunit.runner.visualstudio | 3.1.5 | Apache 2.0 |
| Microsoft.NET.Test.Sdk | 18.11.0 | MIT |
| Shouldly | 4.3.0 | BSD-3-Clause |
| coverlet.collector | 6.0.4 | MIT |

### Por qué Shouldly y no FluentAssertions

`CLAUDE.md` pedía verificar la licencia de FluentAssertions antes de usarla.
**FluentAssertions cambió a una licencia comercial a partir de la versión 8**:
su uso en un producto de pago exige comprar una licencia por desarrollador.
Aunque solo se usa en las pruebas y no se distribuye, se prefirió evitar la
dependencia legal.

**Se eligió Shouldly 4.3.0**, con licencia BSD-3-Clause, que es libre para
cualquier uso. La decisión está anotada también en `BITACORA.md`.

---

## Qué hay que incluir en el instalador

1. **`LICENCIAS_TERCEROS.txt`** en la carpeta de instalación, con el texto
   íntegro de:
   - IBM Public License 1.0 (JTOpen)
   - Licencia MIT (plantilla + lista de componentes que la usan)
   - Licencia Apache 2.0 (plantilla + lista de componentes que la usan)
   - Licencia Zlib (IKVM)
   - SIL Open Font License 1.1 (fuente Inter)

2. **Pantalla «Acerca de»** con el resumen de avisos. Ya está implementada en
   `AboutViewModel.ThirdPartyNotices`.

3. **Mención en el EULA** de que el producto incorpora componentes de terceros
   y de que sus licencias prevalecen sobre la del producto en lo que a ellos
   respecta.

---

## Procedimiento de revisión

Antes de cada versión mayor:

1. `dotnet list package --include-transitive` sobre la solución.
2. Comprobar que ningún paquete nuevo tiene licencia copyleft fuerte ni
   restricciones comerciales.
3. Prestar atención especial a los paquetes que cambian de licencia entre
   versiones (le pasó a FluentAssertions y a SixLabors.ImageSharp).
4. Actualizar este documento y `AboutViewModel.ThirdPartyNotices`.
