martes, 22 de marzo de 2011

La GPL, Google, Bionic y Android

Desde hace unos días se viene discutiendo una cuestión que afecta a los "header files" o archivos cabecera del kernel de Linux, la licencia GPL y el uso que de los mismos hace Google para el desarrollo de Android.

Algunos han sacado conclusiones abolutamente, a mi juicio, desenfocadas, como quienes dicen que Google está robando el código de Linux

Incluso el diario El País se ha hecho eco de esta cuestión si bien el análisis carece de ciertos elementos y provoca confusión.
En mi opinión estamos ante una cuestión bastante compleja y es necesario hacer un recorrido por todos los elementos para tratar de alcanzar una opinión minimamente informada sobre la cuestión. Por supuesto que agradeceré cualquier comentario sobre este tema con las correcciones o matizaciones necesarias.

Los archivos de cabecera o header files

De acuerdo a la wikipedia, los "header files" o archivos de cabeceras son archivos que permiten a a los programadores separar ciertos elementos del código fuente de un programa en archivos reutilizables.

Estos archivos contendrían elementos comunes para el uso por varias otros programas. 
En términos muy simples sería como disponer de un diccionario de gramática a la hora de escribir una novela. Podemos recurrir al contenido de ese tercero para que se entienda la historia, pero no forma parte de esta. (El ejemplo es al nivel más básico, seguro que hay diferencias)

Cuando alguien compila algo para ser ejecutado en ese sistema puede acudir a esos archivos de cabecera para verificar que la compilación es coherente con las definciones que se contienen en el resto del sistema, sin tener que incluir en todo caso las mismas definiciones dentro de su propio código.

Lo que Google hace
Los "header files" del nucleo de Linux son modificados por Google mediante un proceso automatizado que realiza una limpieza del contenido.

Según la compañía este proceso lo que hace es retirar elementos de los "header files" que no son necesarios y provocarían inconsistencias o problemas de compilación con elementos que no son necesarios en el entorno de Android. Lo que tiene sentido, tal y como explican en el readme.txt
Y aquí viene una de las cosas extrañas, para mi, de todo esto.
Google alega que retira todo el material sujeto a derechos de los headers, dejando sólo material sin copyright.

Los headers modificados se publican bajo una licencia BSD junto con libc, no bajo la GPL como obligaría la cláusula vírica.

¿Puede Google hacer eso?

Pero no entiendo como es eso posible, si tenemos en cuenta la definición de programa de ordenador desde el punto de vista legal, tanto en la ley de Estados Unidos como en la española:
"A “computer program” is a set of statements or instructions to be used directly or indirectly in a computer in order to bring about a certain result"
 "A los efectos de la presente Ley se entenderá por programa de ordenador toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informático para realizar una función o una tarea o para obtener un resultado determinado, cualquiera que fuere su forma de expresión y fijación."
De acuerdo a estas definiciones es posible entender que estos archivos constituyen un programa de ordenador en los términos legales.
Pero es que además para la GPL v3 un programa es:
“The Program” refers to any copyrightable work licensed under this License.
 Y para la licencia  que no ocupa, la GPL v2, la definición es similar:
The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law
Ambas definiciones se remiten a la consideración lo que diga la legislación de propiedad intelectual, por lo que parece claro que las definiciones legales son las que marcan la interpretación que debe hacerse.
Si partimos de esa premisa, la modificación de los headers originales sujetos a la GPL seguirían resultando, a tenor de las definiciones, en programas de ordenador. Esto es, para poder modificar una obra con copyright sujeta a licencia se deben respetar las condiciones de esta.

Entiendo que en lógica aplicación del contenido de la GPL esos "headers" sólo podrían licenciarse bajo la GPL por aplicación de la cláusula vírica.
No sé que material con "copyright" puede quitar Google que haga que eso deje de ser un programa. Esta podría ser una de las claves, pero no veo por donde acercarse a esto.
¿A qué obliga la GPL?

En este caso hablamos de la GPL v2 y respecto de las modificaciones establece que:
You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: 
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. 
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
Esto significa que las modificaciones que vayan a ser distribuidas o publicadas, en lo que a estos efectos interesa,  que contengan en gran parte o deriven del programa original sean licenciadas con la misma licencia.
No que usen o enlacen con el header, sino que lo contengan o deriven de este.
Creo que lo que hace Google es precisamente eso, no sólo usar los headers sino modificarlos, aunque sea para mejorarlos.
La interpretación de Stallman

En este punto es interesante recoger lo dicho por Richard Stallman en el año 2003 sobre los headers, porque pudiera parecer que lo que he señalado se contradice, pero creo que no:
Someone recently made the claim that including a header file always makes a derivative work.
That's not the FSF's view. Our view is that just using structure  definitions, typedefs, enumeration constants, macros with simple   bodies, etc., is NOT enough to make a derivative work. It would take  a substantial amount of code (coming from inline functions or macros with substantial bodies) to do that.
Lo que dijo Stallman, asesorado por sus abogados, es que usar el contenido de un header no es hacer una obra derivada, ni tampoco que incluir un header siempre suponga hacer una obra derivada.

Y estoy plenamente de acuerdo.

Siguiendo con el ejemplo simple anterior, el incorporar el diccionario no es hacer una obra diferente y el usar la estructura gramatical propuesta por el diccionario en nuestra novela no es hacer una obra derivada.

Sin embargo Google no hace esto, lo que hace Google es modificar unos ficheros (que se consideran a efectos legales programas de ordenador) y a los ficheros resultantes les cambia la licencia por una BSD, lo que a mi juicio vulnera el contenido de la GPL de los ficheros originales como se ha expuesto.

¿Esto significa que todas las aplicaciones android deben ir con la GPL?

No, en absoluto, creo que afirmar eso es ir mucho más allá del contenido de la GPL.

Como se ha expuesto, usar las definiciones de los headers no supone modificarlos o incorporarlos a un programa en tales términos que obliguen al resultado de que todo lo creado deba ser GPL. No se puede considerar que utilizar unas expresiones concretas constituya una obra derivada.

Esto se hace con fines de interoperabilidad y "estadnarización" del lenguaje dentro de un entorno, pero en ningún caso es un problema de reutilización que suponga la obtención de una obra derivada.

De acuerdo a nuestra ley de propiedad intelectual, por ejemplo, una obra derivada es, artículo 11.5 LPI:

"Cualesquiera transformaciones de una obra literaria, artística o científica."

Y es evidente que usar los headers originales sin modificar para que otro programa compile no es una alteración de los mismos que resulte en una obra derivada.

Conclusiones.

A mi juicio sí que Google está haciendo algo aparentemente contrario a la GPL, cual es poner en ciruclación los headers modificados por ella misma con una licencia que no es la GPL.

Pero afirmar que todo lo que compila contra unos determinados headers es una obra derivada y por lo tanto debe ser licenciado como GPL no tiene mucho sentido.
Y tú, ¿qué opinas?
[Más información sobre este tema]: