¿Cómo funciona la GPL con respecto a idiomas como Dart que se compilan en otros idiomas?

11

El lenguaje Dart de Google no es compatible con ningún navegador web que no sea una versión especial de Chromium conocida como Dartium. Para usar Dart para el código de producción, debe ejecutarlo a través de un compilador / traductor Dart-> JavaScript y luego usar el JavaScript generado en su aplicación web.

Debido a que JavaScript es un lenguaje interpretado, todos los que reciben el "binario" (Aka, el archivo .js) también han recibido el código fuente.

Ahora, la GNU General Public License v3.0 establece que:

"El" código fuente "de una obra significa la forma preferida de la obra para hacer modificaciones a la misma".

Lo que implicaría que el código Dart original además del código JavaScript también se debe proporcionar al usuario final. ¿Significa esto que las aplicaciones web escritas en Dart también deben proporcionar el código Dart original a todos los visitantes de su sitio web a pesar de que ya se haya proporcionado una copia del código fuente en forma legible / editable / modificable por el ser humano?

Peter-W
fuente
3
Realmente no llamaría al archivo .js el "código fuente" más de lo que js ofuscado es "código fuente". Claro, todavía se interpreta, pero de ninguna manera es el código fuente. Es más como la salida HTML de un script PHP. Sin embargo, no estoy seguro de cómo funciona en cuanto a licencias.
Ben Brocka
Cuando dice "Código de producción", ¿se refiere a "Productized"? El uso interno no requiere la liberación del código fuente. ¿El código Dart que está utilizando se basa en el código de licencia GPL (u otro) de otra persona? ¿O es todo este código original desarrollado por usted? La respuesta realmente depende de esos detalles
Paul
1
No tiene que proporcionar el código fuente a los visitantes si ejecuta una aplicación GPL. Solo tiene que proporcionar el código fuente si distribuye la aplicación. (Si fue AGPL'd, entonces tenía que proporcionar la fuente: gnu.org/licenses/why-affero-gpl.html )
JCasso
1
Suponiendo que la aplicación se ejecuta en un servidor web público, ¿no se "distribuye" el código a todos los visitantes? Incluso si el navegador solo lo descarga a una ubicación temporal antes de ejecutarlo.
Peter-W
@ Peter-W Yo diría que el argumento es técnico y no claro. Que el navegador descargue JavaScript es una especie de detalle de implementación; la mayoría de los usuarios no saben que se les ha "distribuido" nada, mientras que la mayoría de los usuarios entenderían que obtener un CD o descargar cosas cuenta como "distribución". En este caso, el mecanismo de implementación es una distribución (al navegador y temporal), lo que hace que todo el problema no esté claro para mí. EDITAR : también, en cierto modo, el código js es "bytecode" desde el punto de vista de un codificador Dart, ¿no?
Andres F.

Respuestas:

9

Sí, si el código está bajo la GPL y usted entrega el JavaScript generado, también debe proporcionar el código Dart original. Esto normalmente se haría con un enlace para descargar el código fuente de su sitio, pero también podría insertarlo en un comentario o algo así.

Creo que la forma más fácil de cumplir con la GPL en este caso es usar la opción d para distribuir la fuente

d) Transmita el código objeto ofreciendo acceso desde un lugar designado (gratis o con cargo), y ofrezca acceso equivalente a la Fuente correspondiente de la misma manera a través del mismo lugar sin cargo adicional. No es necesario que los destinatarios copien la fuente correspondiente junto con el código objeto. Si el lugar para copiar el código objeto es un servidor de red, la Fuente correspondiente puede estar en un servidor diferente (operado por usted o un tercero) que admita instalaciones de copia equivalentes, siempre que mantenga instrucciones claras al lado del código objeto que indique dónde encuentre la fuente correspondiente. Independientemente de qué servidor aloje la Fuente correspondiente, usted tiene la obligación de asegurarse de que esté disponible durante el tiempo que sea necesario para satisfacer estos requisitos.

Esencialmente haces esto cuando incluyes el archivo JS en tu página

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->
Dirk Holsopple
fuente
2
Por favor lee mi respuesta. Observe las observaciones sobre GPL que no requieren que se publique la fuente original, solo generada en este caso. En este caso, GPL no requeriría que distribuya, por lo que el mecanismo de distribución no importa. Como dije, otras licencias tienen reglas diferentes.
Paul
1
Creo que GCC es un ejemplo. Dado que GCC es GPL y lo uso para compilar un programa de "fuente cerrada", ¿eso requiere que libere la fuente original? Creo que lo mismo sería cierto para cualquier "compilador" de GPL
Paul
3
Esta respuesta es incorrecta. Incluso si el código Dart tiene licencia bajo GPL, no tiene que proporcionar el código fuente Dart a menos que distribuya la aplicación. La ejecución de una aplicación GPL en un servidor no requiere proporcionar el código fuente de esa aplicación. Es por eso que hay otra licencia llamada AGPL . Para ese propósito específico.
JCasso
2
@JCasso eso sería cierto si el código se estuviera ejecutando en el servidor, pero en el caso de Dart, el código objeto resultante es JavaScript, que se distribuye al cliente en la gran mayoría de los casos. Obviamente, si está haciendo algo realmente extraño como ejecutar JavaScript en el lado del servidor, entonces no cuenta como distribución.
Dirk Holsopple
3
@JCasso que solo se aplica al código del lado del servidor. Desde la misma página: el JavaScript de Drupal, incluida la copia de jQuery que se incluye con Drupal, también está bajo la GPL, por lo que cualquier JavaScript que interactúe con el JavaScript de Drupal en el navegador también debe estar bajo la licencia GPL o una licencia compatible con GPL.
Dirk Holsopple
2

En primer lugar, estamos hablando de GPL, no de AGPL.

Si no distribuye una GPL en la aplicación, si la ejecuta en un servidor, no tiene que proporcionar el código fuente . Hay AGPL para eso. GPL tiene que ver con la distribución.

De las preguntas frecuentes de Drupal:

¿Tengo que dar el código de mi sitio web a cualquiera que lo visite?

No. La GPL no considera ver un sitio web para contar como "distribución", por lo que no está obligado a compartir el código que se ejecuta en su servidor. Http://drupal.org/licensing/faq/#q6

Tenga en cuenta que Drupal tiene licencia bajo GPL y contiene archivos js (mucho).

De GNU:

El propósito de GNU Affero GPL es prevenir un problema que afecta a los desarrolladores de programas gratuitos que a menudo se usan en servidores.

Suponga que desarrolla y lanza un programa gratuito bajo la GNU GPL ordinaria. Si el desarrollador D modifica el programa y lo libera, la GPL también requiere que distribuya su versión bajo la GPL. Por lo tanto, si obtiene una copia de su versión, puede incorporar algunos o todos sus cambios en su propia versión.

Pero supongamos que el programa es principalmente útil en servidores. Cuando D modifica el programa, es muy probable que lo ejecute en su propio servidor y nunca publique copias. Entonces nunca obtendría una copia del código fuente de su versión, por lo que nunca tendría la oportunidad de incluir sus cambios en su versión. Puede que no te guste ese resultado.

El uso de GNU Affero GPL evita ese resultado. Si D ejecuta su versión en un servidor que todos pueden usar, usted también puede usarla. Suponiendo que haya seguido el requisito de licencia para permitir que los usuarios del servidor descarguen el código fuente de su versión, puede hacerlo y luego puede incorporar sus cambios en su versión. (Si no lo ha seguido, tiene su abogado quejándose de él). Fuente: http://www.gnu.org/licenses/why-affero-gpl.html

JCasso
fuente
2
Pero ya que esto es Dart, que se compila en Javascript y luego se ejecuta como en el archivo, ¿se aplica esto?
Winston Ewert
1
GPL es claro al respecto. Si le doy un CD de Ubuntu, debo proporcionarle una forma de obtener el código fuente. Si pongo ubuntu.iso en un servidor de archivos también debo proporcionar un enlace de descarga (o algo así). Esto se llama distribución. Si lo distribuye, debe proporcionar el código fuente. Pero tener una aplicación en línea (en un servidor) nunca se cuenta como "distribución".
JCasso
3
El punto es que el código se ejecuta en el navegador, no en el servidor. Su respuesta solo es significativa si estamos viendo código que se ejecuta en el servidor. Pero no lo somos. Estamos viendo el código que se ejecuta en las computadoras del cliente. Si el código se ejecutó en el servidor, estaría en lo cierto, no es distribución. Pero debido a que el código es descargado por el navegador y lo ejecuta, es distribución y su respuesta es irreverente.
Winston Ewert
2
En realidad, creo que importa mucho qué CPU lo procese. Si ejecuto su código en mi CPU, entonces, por necesidad, me ha distribuido su código. Para todos los efectos, es exactamente lo mismo que si descargara un programa y lo ejecutara. La pregunta se ha discutido antes: stackoverflow.com/questions/1239470/… , programmers.stackexchange.com/questions/62869/… .
Winston Ewert
2
Además, consulte la página AGPL a la que se ha vinculado. Explica explícitamente el código ejecutado en los servidores, no el código ejecutado en los clientes. Si el autor pensara que GPL no se aplicaba a su código ejecutado javascript, lo habría mencionado en su discusión.
Winston Ewert
1

En general, realmente depende de la licencia. En su caso, Dart es un mal ejemplo, ya que es BSD, y parece que GNU 3.0 cubre el caso del que está hablando. Como no abogado, interpretaría esa cita como "El código generado no está cubierto específicamente"

Dart Home Page Se refiere a esto: Licencia BSD

Entonces tu pregunta sobre GPL es discutible

También: Licencia GNU 3.0

¿Hay alguna forma en que pueda GPL la salida que la gente obtiene del uso de mi programa? Por ejemplo, si mi programa se usa para desarrollar diseños de hardware, ¿puedo exigir que estos diseños sean gratuitos? (#GPLOutput)

En general esto es legalmente imposible; la ley de derechos de autor no le permite opinar sobre el uso de los resultados que las personas obtienen de sus datos utilizando su programa. Si el usuario usa su programa para ingresar o convertir sus propios datos, los derechos de autor en la salida le pertenecen a él, no a usted. En términos más generales, cuando un programa traduce su entrada a otra forma, el estado de copyright de la salida hereda el de la entrada desde la que se generó.

Entonces, la única forma en que puede opinar sobre el uso de la salida es si partes sustanciales de la salida se copian (más o menos) del texto en su programa. Por ejemplo, parte de la salida de Bison (ver arriba) estaría cubierta por la GNU GPL, si no hubiéramos hecho una excepción en este caso específico.

Podría hacer artificialmente que un programa copie cierto texto en su salida, incluso si no hay una razón técnica para hacerlo. Pero si ese texto copiado no tiene ningún propósito práctico, el usuario podría simplemente eliminar ese texto de la salida y usar solo el resto. Entonces no tendría que obedecer las condiciones de redistribución del texto copiado.

Pablo
fuente
3
La pregunta no se trata de un compilador Dart que es GPL (que por cierto sería irrelevante para la salida del programa (compilador)), sino de un programa Dart que es GPL.
2
@delnan No leí la pregunta igual que tú. 1) Ver mi primer enlace, Dart es BSD. 2) Si el programa Dara fuera GPL, él no haría la pregunta. Leí la pregunta como si quisiera saber si tenía que liberar también su código fuente Dart. ¿De verdad leíste mi respuesta?
Paul
2
Bueno, parece ser el único que lo leyó así. Si bien OP no menciona explícitamente que el programa Dart en cuestión es GPL, nada sugiere que asuma que el compilador Dart tampoco es GPL, por lo que no estoy dispuesto a asumir que hizo tan poca investigación.
Lo siento, así que extiende esto ... Entonces, si ni el programa Dart es GPL y el Dart es BSD (realmente, lo es, o al menos el sitio dice que es), entonces ¿cuál es la pregunta? Si se trata solo de "¿Tengo que distribuir A (GPL) cuando quiero lanzar B (no GPL)", entonces es una pregunta duplicada
Paul
2
@Paul Mi suposición, y la suposición de todos los demás, es que el programa Dart es de hecho GPL.
0

La pregunta básica es:

¿Incluir javascript en la página web (por ejemplo, hacer referencia a través de una etiqueta de script) cuenta como "Transmitir" el trabajo GPL?

Si lo hace, debe hacer que la fuente esté disponible en la forma preferida para modificar el código, de lo contrario, no lo hará. En este caso, la forma preferida es el código fuente original de Dart utilizado para generar el javascript.

No puedo encontrar una respuesta explícita a esta pregunta en el sitio de la FSF, pero el ensayo de Stallman "The Javascript Trap" parece indicar que lo considera Transmitir y, como tal, tendrías que poner a disposición el código fuente original de Dart. Consulte su nota sobre permitir versiones minimizadas que no incluyen el texto de la licencia pero que aún están cubiertas por la licencia.

Consulte también estas preguntas frecuentes sobre JavaScript y plantillas para ver una excepción que permitiría que las plantillas utilicen JavaScript GPL sin ser GPL.

La mejor manera de saber si lo que quiere hacer es cumplir con la licencia es preguntarle al titular de los derechos de autor del código, porque solo ellos tienen el derecho de hacer cumplir la licencia. Es posible que hayan interpretado la licencia de manera diferente y estén dispuestos a agregar una excepción para que su interpretación sea explícita.

Craig
fuente
En realidad, esa no es la pregunta. Si lee la pregunta detenidamente, el OP supone que se le solicitará que distribuya el javascript. Solo otros en esta pregunta han cuestionado esa interpretación. La pregunta es si también debe distribuir el código Dart.
Winston Ewert
@ WinstonEwert Cuando digo "código fuente" me refiero a los archivos fuente originales de Dart utilizados para generar el javascript. Actualizaré mi respuesta para aclarar esto.
Craig