14 KiB
Licenza del core e compatibilità del repository
Data della verifica: 2026-09-02
Ticket: Valutare licenza del core e compatibilità legale del repository
Questa è un'analisi tecnica delle licenze e della provenienza osservabile nel repository, non consulenza legale. Prima della prima distribuzione pubblica o commerciale, un professionista qualificato nella giurisdizione di TYL Consulting e dei clienti deve validare confini dei lavori derivati, titolarità, brevetti, marchi, EULA e obblighi di redistribuzione.
Decisione proposta
Adottare Apache License 2.0 per la Community Edition e una licenza commerciale separata per l'Enterprise Edition. Apache-2.0 è preferibile a MIT per un prodotto enterprise perché contiene una concessione brevettuale esplicita con clausola di cessazione, disciplina i contributi, tutela i marchi e descrive esplicitamente come non derivati i lavori separabili o che si limitano a collegarsi alle interfacce. Rimane una licenza permissiva: consente uso commerciale, modifica e distribuzione proprietaria delle modifiche nel rispetto degli obblighi della licenza.
La pubblicazione non è ancora pronta. Due problemi devono essere risolti prima di applicare Apache-2.0 al repository:
yake==0.7.3è importato direttamente dal runtime Python e il fileLICENSEdell'artefatto ufficiale contiene AGPL-3.0, benché i metadati PyPI dichiarino in modo incoerente LGPL/GPL. Va sostituito con una dipendenza permissiva, rimosso, oppure coperto da una licenza commerciale verificata. L'isolamento va considerato solo dopo parere legale; nel codice attuale non c'è isolamento, ma un normaleimport yake.harness/tht/vendor/VENDORED.mddichiara Apache-2.0 perthoth_lsh.py, mentre l'artefatto upstreamthoth-dbmanager==0.7.4su PyPI contiene una licenza MIT e il relativo copyright. Occorre correggere la provenienza e conservare il testo MIT, oppure documentare formalmente una nuova licenza da parte di tutti i titolari effettivi.
MIT, Apache-2.0 e copyleft
| Tema | MIT | Apache-2.0 | GPLv3 / AGPLv3 |
|---|---|---|---|
| Uso commerciale e codice proprietario | Sì; obbligo essenziale di conservare copyright e licenza | Sì; consente termini diversi sulle modifiche, preservando gli obblighi Apache | Il codice coperto e le opere combinate distribuite devono rispettare il copyleft |
| Brevetti | Nessuna concessione brevettuale espressa nel testo | Concessione espressa sui claim necessariamente violati dal contributo; termina in caso di determinata causa brevettuale | GPLv3/AGPLv3 contengono condizioni brevettuali proprie |
| Redistribuzione | Conservare copyright e testo MIT nelle copie o porzioni sostanziali | Fornire la licenza, marcare i file modificati, conservare notice pertinenti e riprodurre NOTICE quando presente |
Fornire il Corresponding Source e non imporre ulteriori restrizioni incompatibili |
| Moduli proprietari | Consentiti; il testo non definisce il confine fra opere | Consentiti; la definizione esclude lavori separabili o che si limitano a collegarsi alle interfacce | Confine fattuale e giuridico. L'aggregazione di opere indipendenti è distinta da un programma combinato |
| Uso via rete | Nessun obbligo specifico | Nessun obbligo specifico | AGPLv3 §13 richiede offrire il Corresponding Source agli utenti remoti di una versione modificata |
| Contributi | Nessuna disciplina esplicita nel breve testo | §5: contributi intenzionalmente sottoposti sono Apache-2.0 salvo dichiarazione o accordo separato | Contributi al lavoro coperto devono poter essere distribuiti sotto la licenza applicabile |
| Marchi | Non disciplinati | §6 non concede diritti sui marchi salvo uso descrittivo e NOTICE |
Non sono automaticamente una licenza del marchio |
Fonti primarie: testo MIT dell'OSI, Apache License 2.0, GPLv3, AGPLv3 e FAQ GNU su plugin e aggregazione.
Perché non scegliere MIT
MIT renderebbe semplice l'adozione e il riuso proprietario, ma non dà a compratori e contributori la stessa chiarezza di Apache-2.0 sui brevetti, sui contributi e sui marchi. La brevità non compensa questa minore precisione per un prodotto venduto a IT department enterprise. MIT resta compatibile con l'obiettivo open-core, ma Apache-2.0 gestisce meglio il rischio del progetto.
Perché non scegliere copyleft per il core
Il copyleft aumenterebbe la reciprocità, ma rende più delicato il confine con l'Enterprise Edition e può creare una revisione legale più onerosa per i clienti. AGPL è inoltre poco allineata alla scelta commerciale già fissata: installazione interamente nel trust boundary del cliente e funzionalità Enterprise proprietarie. Se in futuro la priorità diventasse impedire fork proprietari del core, GPL/AGPL andrebbero valutate in una decisione distinta, non introdotte accidentalmente da una dipendenza.
Confine Community / Enterprise
Il confine raccomandato è tecnico oltre che contrattuale:
- Community Edition in repository pubblico, licenza Apache-2.0, workflow fondamentale completo e interfacce di estensione pubbliche;
- Enterprise Edition in repository, package e immagini separati, con EULA commerciale e SBOM autonomo;
- integrazione attraverso API/versioned contracts o process boundary. Anche se Apache-2.0 consente linking e opere separabili, questa separazione riduce errori di packaging e rende auditabile il perimetro venduto;
- una distribuzione Enterprise può aggregare componenti Community, ma deve continuare a fornire Apache-2.0 e tutti i notice della Community. L'EULA non deve revocare ai clienti i diritti Apache sui componenti Community;
- marchio e logo
ThothIIrichiedono una policy separata: la licenza del codice non deve essere usata come licenza del brand.
Il giudizio finale sul fatto che un plugin concreto sia un'opera indipendente o derivata dipende dalla sua implementazione e dalla legge applicabile: è un punto da sottoporre al legale quando esisterà il primo modulo Enterprise.
Inventario del repository
L'inventario deriva dai file tracciati nel commit ae053961, dai lockfile e, per i casi anomali,
dagli artefatti ufficiali dei registry. I metadati dei registry non sostituiscono i testi di licenza
inclusi nelle distribuzioni: l'incoerenza di YAKE lo dimostra.
Stato della licenza propria
- Non esistono
LICENSE,NOTICE,COPYING,AUTHORSoTHIRD_PARTY_NOTICESalla radice. - I manifest
backend/package.json,frontend/package.json,harness/package.json,docker/pi-runtime/package.json,tools/html-to-pptx/package.jsoneharness/pyproject.tomlnon dichiarano la licenza del progetto. - La cronologia Git contiene più identità (
mptyl,Marco Pancotti,User,Codex, Gitea Actions) e trailerCo-authored-bydi strumenti AI, ma nessunSigned-off-by. La dichiarazione del proprietario è che il codice appartiene interamente a TYL Consulting; prima del rilascio occorre collegare documentalmente gli alias al titolare e conservare i termini applicabili agli output generati.
JavaScript / TypeScript
Cinque lockfile npm sono presenti e nessun manifest dichiara la licenza del package ThothII.
| Superficie | Package bloccati | Risultato dei metadati nel lock |
|---|---|---|
| backend | 366 | MIT 296, ISC 27, Apache-2.0 19, BSD-3-Clause 16, BlueOak 4, senza campo 3, Unlicense 1 |
| runtime Pi | 140 | MIT 67, Apache-2.0 46, BSD-3-Clause 13, ISC 8, BlueOak 5, 0BSD 1 |
| frontend | 874 | prevalentemente MIT; inoltre OFL-1.1, CC-BY-4.0, Python-2.0, BSD, ISC e licenze alternative |
| harness (dev) | 1 | MIT |
| exporter PPTX | 22 | prevalentemente MIT; jszip offre l'alternativa MIT oppure GPL-3.0-or-later |
Elementi che richiedono notice o verifica esplicita:
@fontsource-variable/geist@5.2.9è OFL-1.1 e viene distribuito nel frontend; OFL richiede che copyright e licenza accompagnino ogni copia del font. Vedi OFL 1.1.dompurify@3.4.11offreMPL-2.0 OR Apache-2.0: documentare la scelta Apache-2.0.jszip@3.10.1offreMIT OR GPL-3.0-or-later: documentare la scelta MIT.khroma,buildcheck,cpu-featuresessh2non hanno il campolicensenei lock/registry esaminati: lo scanner di release deve leggere la licenza inclusa nei tarball, non assumere MIT.@earendil-works/pi-coding-agent@0.80.3, AG Grid Community, Fastify, Kysely e OpenID Client risultano MIT nei metadati ufficiali npm.
Fonti: lockfile locali e metadata del registry npm.
Python
harness/uv.lock blocca 85 package, incluso il workspace tht; i metadata ufficiali PyPI degli 84
package esterni riportano soprattutto MIT, Apache e BSD. Le eccezioni sono:
- YAKE 0.7.3: blocker. Il file
LICENSEnel source distribution ufficiale è AGPL-3.0 e offre separatamente una licenza commerciale. I metadata dichiarano inveceLGPLv3e classificano GPLv3. Il codice lo importa inharness/tht/session/store.py. Fonti: tag upstream v0.7.3 e release PyPI. psycopg2-binary==2.9.12: LGPLv3 con eccezioni specifiche nel fileLICENSEdell'artefatto.certifi==2026.7.22: MPL-2.0 per il bundle di CA modificato.tqdm==4.70.0: licenza composita con parti MPL-2.0 e MIT, non una semplice alternativa; preservare il suoLICENCE.fsspec==2026.7.0: il metadata PyPI è vuoto, ma il source distribution include BSD-3-Clause.
docs/requirements.lock contiene 31 dipendenze di build documentale; fra queste certifi e
pathspec riportano MPL-2.0. Sono build-time, ma vanno comunque incluse nella scansione del processo
di release se vengono ridistribuite in immagini o toolchain.
Go
tools/tht/go.mod ha 12 dipendenze dichiarate e il grafo scaricato contiene solo famiglie
permissive osservate nei testi root: Apache-2.0, MIT, BSD-2-Clause, BSD-3-Clause e ISC. Alcuni moduli
Apache includono anche NOTICE, che deve essere propagato nell'immagine/binario distribuito.
tools/dwh-auth/go.mod non dichiara dipendenze esterne. go.sum è presente solo per tools/tht.
Codice vendorizzato e asset
harness/tht/vendor/thoth_lsh.pyè copiato e modificato dathoth-dbmanager==0.7.4. L'artefatto PyPI ufficiale contiene MIT, mentre il repository lo marca Apache-2.0. È necessario risolvere la discrepanza e includere l'attribuzione corretta. Fonti: metadata PyPI eVENDORED.md.frontend/prototypes/database-management/assets/thoth-cosmic-archive.pngè documentato come output del tool ImageGen. Prima di pubblicarlo sotto Apache-2.0, conservare evidenza del contratto applicabile e della decisione del titolare di includerlo nella Community Edition.presentations/thothii-congresso.pptxè generato dalle sorgenti HTML/JSON locali e contiene PNG rasterizzati. L'HTML carica Fraunces e Manrope da Google Fonts: conservare le rispettive licenze font e decidere se la presentazione appartiene davvero al source release del prodotto.- Il solo font binario individuato nel bundle applicativo arriva da
@fontsource-variable/geisted è OFL-1.1. Non sono presenti altri font, PDF, archivi o WASM tracciati; è presente un PNG e un PPTX.
Immagini container e modelli
Il deploy usa immagini pin per Node, Python, Go, nginx-unprivileged, PostgreSQL, Qdrant e Ollama.
Il bootstrap scarica dinamicamente qwen3-embedding:0.6b. I lockfile applicativi non inventariano i
package OS delle immagini né la licenza dei pesi scaricati. Prima della distribuzione occorre
generare un SBOM per ogni immagine finale, archiviare i notice dei base image e acquisire la licenza
del modello esatto; il nome del modello senza digest non è una prova sufficiente.
Contributi e copyright
Per l'open-core proposto non è necessario acquisire il copyright di ogni contributore se l'Enterprise resta un'opera separata. Apache-2.0 §5 fornisce un default inbound=outbound, ma non è un trasferimento di titolarità.
Raccomandazione iniziale:
CONTRIBUTING.mdcon Apache-2.0 inbound=outbound e Developer Certificate of Origin;- sign-off obbligatorio e verifica automatica;
- CLA soltanto se TYL vuole in futuro dual-license gli stessi file Community, cambiare licenza unilateralmente o ottenere concessioni brevettuali/di relicensing ulteriori;
- registro di provenienza per codice, asset, modelli e dipendenze vendorizzate;
- policy marchio separata dalla licenza del codice.
Fonti primarie: Apache-2.0 §5, Developer Certificate of Origin e Apache Contributor Agreements.
Gate prima della pubblicazione
- Sostituire YAKE o ottenere e verificare una licenza commerciale compatibile con entrambe le edizioni; la sostituzione è preferibile perché YAKE serve soltanto a derivare il nome sessione.
- Risolvere la provenienza MIT/Apache di
thoth_lsh.pye correggereVENDORED.md. - Fissare per iscritto l'elenco di directory Community; spostare Enterprise in artefatti separati.
- Aggiungere
LICENSEApache-2.0, copyright TYL,NOTICE,THIRD_PARTY_NOTICESe campi SPDX nei manifest pubblicati. - Generare SBOM e license report dai lockfile e dalle immagini; fallire la release su licenze non ammesse, metadata mancanti o modelli senza licenza acquisita.
- Verificare titolarità degli alias Git e condizioni degli output AI; decidere se prototype e presentazione fanno parte del rilascio.
- Far validare da un legale: EULA Enterprise, separazione dei moduli, politica contributi/CLA, marchio, notice e dipendenze LGPL/MPL/OFL.
Con questi gate chiusi, Apache-2.0 offre il miglior equilibrio fra reputazione, adozione enterprise, chiarezza brevettuale e possibilità di vendere capacità superiori in moduli proprietari separati.