Incompatibilitats de llicència

La compatibilitat de llicències és rellevant en contexts on s’integren, en programes nous, components diferents que ja existeixen i es distribueixen sota llicències diferents. És evident que si tots els components d’una aplicació es distribueixen sota la mateixa llicència, llavors no hi haurà cap incompatibilitat.

Què és la incompatibilitat

Dues llicències són incompatibles quan els termes d’una entren en conflicte amb l’altra. Per exemple, una llicència que digui que es pot modificar el codi (una llicència lliure) és incompatible amb una que digui que no es pot modificar (una llicència propietària). Per això, no es pot barrejar i redistribuir components lliures i propietaris; seria una infracció d’ambdues llicències. Llavors un programa és “compatible” amb un altre si es poden barrejar i distribuir els seus codis junts sense infringir les llicències d’un i de l’altre.

Llicències permissives

Algunes llicències no suposen molts problemes per a decidir si són compatibles amb unes altres. Les llicències “permissives” en particular, com la nova BSD o la MIT, permeten realitzar qualsevol acció amb el codi corresponent (còpia, modificació, redistribució) i només imposen la restricció de mantenir els avisos d’autoria i el disclaimer. Per tant, es pot barrejar o integrar codi BSD amb gairebé qualsevol altre programa que respecti aquestes obligacions, sense infringir cap de les dues llicències. El resultat de la barreja s’haurà de distribuir sota una llicència compatible amb les dues, normalment la més restrictiva de les dues llicències en joc (la GPL, per exemple, o la MPL).

Per exemple:

  • BSD+BSD = BSD o una llicència compatible amb BSD (es pot barrejar dos codis sota BSD i distribuir-los sota una llicència més restrictiva, com la GPL)
  • MIT+MPL = MPL
  • BSD+GPL = GPL
  • BSD+Apache = Apache o una llicència compatible amb Apache

Etc.

Llicències copyleft

Altres llicències, les llicències copyleft en particular, suposen més dificultats. Una condició essencial de la GPL per a la redistribució del codi original o obres derivades (vegeu Treballar amb programari pre­existent: les obres derivades) és la de “no agregar més restriccions” que les incloses en la mateixa llicència. Qualsevol llicència que tingui “més restriccions” serà incompatible; i no es tracta solament de restriccions sobre l’exercici dels drets d’autor i les llibertats enumerades per la FSF (Free Software Foundation). Inclou també restriccions sobre el dret aplicable o la jurisdicció competent (la CPL imposa la de Nova York, la MPL la de Califòrnia), sobre la manera de distribuir les obres derivades (la QPL), l’abast de les llicències de patents (Apache 2.0, MPL, CDDL), obligacions quant a documentació (XFree86), publicitat (BSD original, Apache 1.0), obligacions addicionals per a la provisió del codi font (Affero), i un llarg etcètera.

Afortunadament, la FSF manté un llistat de llicències que segons ella són compatibles i incompatibles, el qual ens facilita la tasca. Noteu que no tothom està d’acord amb la interpretació de la FSF, per exemple en relació amb la llicència Apache 2.0 que molts consideren compatible amb la GPL.

Altres llicències

Per altres llicències, la qüestió pot ser més complicada. La MPL i altres llicències del mateix “tipus” amb copyleft suau, com la LGPL i la CDDL, permeten agregar el codi original a d’altres programes, sota llicències distintes, i distribuir el “tot” (una “obra major” segons la terminologia de la MPL) sota una llicència diferent, fins i tot propietària. Per exemple, es pot distribuir llibreries sota la LGPL juntament amb (i utilitzats per) programari Apache o MPL. No obstant això, el programari original i modificacions del mateix s’ha de distribuir sota la seva pròpia llicència; és una forma de copyleft per al codi original però no per a les obres “associades”.

Una altra qüestió és determinar si dos programes són compatibles en el cas que es comuniquin per enllaços (d’una forma o altra) en comptes de barrejar-se en el moment de la compilació. Àdhuc si no es permetessin barrejar o integrar programes amb diferents llicències (GPL i CDDL, per exemple), potser es podrien enllaçar. Això pot fer-se de diferents formes; per exemple, inserint una API entre un programa i l’altre o creant enllaços dinàmics que s’activin en “run time”. La posició de la FSF relativa als enllaços a programari sota GPL és estricta (tot i que l’esborrany de la versió 3 de la GPL tracta d’aclarir el tema): es tractarà d’una obra derivada i per tant s’haurà de distribuir sota GPL. Segons aquesta visió, solament es pot enllaçar programari compatible amb GPL amb programes sota aquesta llicència (i el resultat es distribuirà sota la GPL). Notem que no tot el món està d’acord amb aquesta interpretació, la qual quedarà pendent d’aclarir en el seu moment davant dels tribunals.

Per evitar alguns problemes d’aquest tipus, alguns projectes agreguen una condició o excepció a la llicència. La llicència GPL sobre Classpath, per exemple, té una excepció que permet enllaçar programari amb qualsevol altre programa, de manera similar a la LGPL.

Finalment, notem també que això és un problema que ocorre a l’hora de redistribuir programari lliure: cap llicència imposa restriccions a l’hora de copiar i modificar programes internament. Per tant, sempre que no hagi cap redistribució, una persona (o empresa) podrà integrar programes amb llicències “incompatibles” per a crear una aplicació personal.

Com que l’arquitectura i les tecnologies de cada programa poden variar, s’haurà de fer un estudi detallat de cada cas per a determinar les compatibilitats i evitar infraccions potencials.

Avís legal