¿Puedo minificar Javascript que requiere aviso de copyright?

37

Supongo que esta es una pregunta legal, pero se relaciona con el software. Estoy a punto de incluir un complemento JS en un proyecto. Los comentarios incluyen:

  • Las redistribuciones del código fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y el siguiente descargo de responsabilidad. * Las redistribuciones en forma binaria deben reproducir el aviso de copyright anterior, esta lista de condiciones y el siguiente descargo de responsabilidad en la documentación y / u otros materiales proporcionados con la distribución.
  1. ¿Está usando esto en mi sitio web "redistribución"?
  2. Si minimizo esto para conservar el ancho de banda, supongo que eliminará todos los comentarios. Si la respuesta al # 1 es sí, ¿eso no implica que legalmente no puedo minificarlo?

(Eso apestaría, ya que planeaba minimizar automáticamente todos los JS como parte del proceso de implementación).

Nathan Long
fuente
¿Va a ser del lado del servidor o del lado del cliente? El lado del cliente es la distribución, el lado del servidor no (como regla general).
David Thornley
3
@DavidThornley: estoy de acuerdo con tu punto, pero no puedo pensar en una buena razón por la que minificarías JS del lado del servidor de todos modos.
Chris Dolan

Respuestas:

34

La mayoría del software de minificación tiene algún método para dejar un comentario in situ para este propósito exacto.

Por ejemplo, de la documentación de YUI Compressor :

  + C-style comments starting with /*! are preserved. This is useful with
    comments containing copyright/license information. For example:

    /*!
     * TERMS OF USE - EASING EQUATIONS
     * Open source under the BSD License.
     * Copyright 2001 Robert Penner All rights reserved.
     */

    becomes:

    /*
     * TERMS OF USE - EASING EQUATIONS
     * Open source under the BSD License.
     * Copyright 2001 Robert Penner All rights reserved.
     */

Google Closure Compiler conservará cualquier bloque JavaDoc que tenga @licensela @preserveetiqueta o la etiqueta :

Con @license:

    /* 
     * TERMS OF USE - EASING EQUATIONS
     * @license Open source under the BSD License.
     * Copyright 2001 Robert Penner All rights reserved.
     */

    becomes:

    /* 
      TERMS OF USE - EASING EQUATIONS
      Open source under the BSD License.
      Copyright 2001 Robert Penner All rights reserved.
     */

Con @preserve:

    /* @preserve
     * TERMS OF USE - EASING EQUATIONS
     * Open source under the BSD License.
     * Copyright 2001 Robert Penner All rights reserved.
     */

    becomes:

    /* 
      TERMS OF USE - EASING EQUATIONS
      Open source under the BSD License.
      Copyright 2001 Robert Penner All rights reserved.
     */
Orbling
fuente
¡Qué bien, es bueno saberlo!
Nathan Long
@Nathan Long: este es el enfoque recomendado por las personas que hacen los minimizadores.
Orbling
23

Con una advertencia. Tendría que poner el aviso en otra parte del sitio. Generalmente bajo una página de Términos y Condiciones o Avisos. Puede hacer esto simplemente agregando lo siguiente a la parte superior de cada pieza de JS que haya minimizado (o simplemente en la parte superior del archivo JS único):

/** Notice 
  *
  * This file contains works from many authors under various (but compatible)
  * licenses. Please visit http://example.com/notices for more information.
  *
 **/
Josh K
fuente
4

En realidad, ¿por qué no preservar el aviso como parte del paso de minificación en sí?

La forma más simple sería extraer primero el aviso (manualmente) y guardarlo en algún lugar. Luego, su secuencia de comandos de minificación solo puede minificar el JS y luego concatenar el aviso inalterado.

Espero que sea lo suficientemente pequeño, por supuesto ... si es grande, entonces la respuesta de Josh K probablemente sea mejor.

Matthieu M.
fuente
El problema se convierte automáticamente en detectar el aviso al construir. Otro punto que mencionó es que los avisos pueden ser bastante grandes y costosos para volver a descargar.
Josh K
@ Josh K: dije extraer manualmente el aviso. En cuanto a los avisos grandes, creo que también lo cubrí, en cuyo caso estoy de acuerdo en que es mejor separarlo.
Matthieu M.
Específicamente, estaba pensando en el complemento jQuery Easing. si observa la fuente, hay casi la mitad de líneas de términos y condiciones que de código: gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js Entonces, en este caso, si puedo ' t eliminar el aviso, ese es un gran problema para la minificación.
Nathan Long
3

Según mi lectura de las licencias, creo que para estar totalmente seguro, debe incluir el texto completo de la licencia con cualquier distribución del software o sus trabajos derivados (incluido JS minified). De las principales licencias de código abierto:

GPLv3:

Puede transmitir copias literales del código fuente del Programa a medida que lo recibe, en cualquier medio, siempre que ... entregue a todos los destinatarios una copia de esta Licencia junto con el Programa. ...

Puede transmitir un trabajo basado en el Programa ... en forma de código fuente bajo los términos de [la sección anterior].

Licencia MIT:

El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.

Licencias BSD:

Las redistribuciones del código fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y el siguiente descargo de responsabilidad.

Sin embargo, parece que este enfoque no está siendo adoptado por la mayoría de las personas. Incluso el Bootstrap minificado oficial de Twitter solo contiene un pequeño aviso de derechos de autor, por lo que violaría la licencia MIT si se lo entregara a sus usuarios.

Brian Gordon
fuente