Como a GPL funciona em idiomas como o Dart, compilados em outros idiomas?

11

O idioma Dart do Google não é suportado por nenhum navegador da Web que não seja uma compilação especial do Chromium conhecida como Dartium. Para usar o Dart para código de produção, é necessário executá-lo por meio de um compilador / tradutor Dart-> JavaScript e, em seguida, use o JavaScript gerado no aplicativo da web.

Como o JavaScript é uma linguagem interpretada, todos os que recebem o "binário" (também conhecido como arquivo .js) também receberam o código-fonte.

Agora, a Licença Pública Geral GNU v3.0 afirma que:

"O" código fonte "de uma obra significa a forma preferida da obra para fazer modificações nela."

O que implicaria que o código Dart original, além do código JavaScript, também deve ser fornecido ao usuário final. Isso significa que qualquer aplicativo da Web escrito em Dart também deve fornecer o código Dart original a todos os visitantes do site, mesmo que uma cópia do código fonte já tenha sido fornecida em um formato legível / gravável / modificável por humanos?

Peter-W
fonte
3
Eu realmente não chamaria o arquivo .js de "código-fonte", assim como js ofuscado é "código-fonte". Claro, ainda é interpretado, mas de maneira alguma é o código fonte. É mais como a saída HTML de um script PHP. No entanto, não tenho certeza de como funciona o licenciamento.
Ben Brocka
Quando você diz "Código de produção", você quer dizer "Produzido"? O uso interno não requer liberação do código-fonte. O código Dart que você está usando se baseia no código licenciado pela GPL (ou outro) de outra pessoa? Ou é todo o código original desenvolvido por você? A resposta realmente depende desses detalhes
Paul
1
Você não precisa fornecer o código fonte para os visitantes se executar um aplicativo GPL. Você só precisa fornecer o código-fonte se distribuir o aplicativo. (Se fosse AGPL'd então você tinha que fornecer fonte: gnu.org/licenses/why-affero-gpl.html )
JCasso
1
Supondo que o aplicativo esteja sendo executado em um servidor da Web voltado para o público, o código não está sendo "distribuído" para todos os visitantes? Mesmo que seja baixado apenas pelo navegador para um local temporário antes de ser executado.
23412 Peter-W
@ Peter-W, eu diria que o argumento é técnico e não é claro. O download do javascript pelo navegador é um tipo de detalhe de implementação; a maioria dos usuários não sabe que foram "distribuídos" qualquer coisa, enquanto a maioria dos usuários entenderia que obter um CD ou fazer o download de coisas é considerado "distribuição". Nesse caso, o mecanismo de implementação é uma distribuição (para o navegador e temporária), que torna todo o problema pouco claro para mim. EDIT : também, de certa forma, o código js é "bytecode" do ponto de vista de um codificador Dart, não é?
Andres F.

Respostas:

9

Sim, se o código estiver sob a GPL e você fornecer o JavaScript gerado, também deverá fornecer o código Dart original. Isso normalmente seria feito com um link para baixar o código-fonte do seu site, mas você também pode incorporá-lo em um comentário ou algo assim.

Eu acho que a maneira mais fácil de cumprir a GPL nesse caso é usar a opção d para distribuir a fonte

d) Transmitir o código do objeto oferecendo acesso a partir de um local designado (gratuitamente ou mediante pagamento) e oferecer acesso equivalente à Fonte Correspondente da mesma maneira através do mesmo local sem custo adicional. Você não precisa exigir que os destinatários copiem a fonte correspondente junto com o código do objeto. Se o local para copiar o código do objeto for um servidor de rede, a Fonte Correspondente poderá estar em um servidor diferente (operado por você ou por um terceiro) que ofereça suporte a instalações de cópia equivalentes, desde que você mantenha instruções claras ao lado do código do objeto dizendo onde encontre a fonte correspondente. Independentemente de qual servidor hospeda a fonte correspondente, você permanece obrigado a garantir que ela esteja disponível pelo tempo necessário para atender a esses requisitos.

Essencialmente, você faz isso ao incluir o arquivo JS na sua página

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->
Dirk Holsopple
fonte
2
Por favor, leia minha resposta. Observe as observações sobre a GPL que não exigem que a fonte original seja lançada, gerada apenas neste caso. Nesse caso, a GPL não exigiria que ele distribuísse, portanto o mecanismo de distribuição não importa. Como eu disse, outras licenças têm regras diferentes.
Paul
1
Eu acho que o GCC é um exemplo. Como o GCC é GPL e eu o uso para compilar um programa de "código fechado", isso exige que eu libere a fonte original? Eu acredito que o mesmo seria verdade para qualquer GPL "compilador"
Paul
3
Esta resposta está errada. Mesmo se o código Dart estiver licenciado sob a GPL, você não precisará fornecer o código-fonte Dart, a menos que distribua o aplicativo. A execução de um aplicativo GPL em um servidor não requer o fornecimento de código-fonte para esse aplicativo. É por isso que existe outra licença chamada AGPL . Para esse propósito específico.
JCasso
2
@JCasso, isso seria verdade se o código estivesse em execução no servidor, mas no caso de Dart, o código do objeto resultante é JavaScript, que é distribuído ao cliente na grande maioria dos casos. Obviamente, se você está fazendo algo realmente estranho como executar o JavaScript no servidor, isso não conta como distribuição.
Dirk Holsopple
3
@JCasso que se aplica apenas ao código do lado do servidor. Na mesma página: o JavaScript do Drupal, incluindo a cópia do jQuery incluída no Drupal, também está sob a GPL, portanto, qualquer Javascript que interaja com o JavaScript do Drupal no navegador também deve estar sob a GPL ou uma licença compatível com GPL.
Dirk Holsopple
2

Antes de tudo, estamos falando da GPL, não da AGPL.

Se você não distribuir um aplicativo com GPL, se você o executar em um servidor, não precisará fornecer o código-fonte . Existe AGPL para isso. GPL tem tudo a ver com distribuição.

Do Drupal FAQ:

Preciso fornecer o código do meu site para quem o visitar?

Não. A GPL não considera exibir um site como "distribuído", portanto, não é necessário que você compartilhe o código em execução no seu servidor.http: //drupal.org/licensing/faq/#q6

Observe que o Drupal é licenciado sob a GPL e contém arquivos js (muito).

Do GNU:

O objetivo da GNU Affero GPL é evitar um problema que afeta os desenvolvedores de programas gratuitos que são frequentemente usados ​​em servidores.

Suponha que você desenvolva e libere um programa gratuito sob a GNU GPL comum. Se o desenvolvedor D modifica o programa e o libera, a GPL também exige que ele distribua sua versão na GPL. Portanto, se você receber uma cópia da versão dele, poderá incorporar algumas ou todas as alterações dele à sua própria versão.

Mas suponha que o programa seja útil principalmente em servidores. Quando D modifica o programa, ele provavelmente pode executá-lo em seu próprio servidor e nunca liberar cópias. Então você nunca obteria uma cópia do código fonte da versão dele, portanto nunca teria a chance de incluir as alterações dele na sua versão. Você pode não gostar desse resultado.

O uso da GNU Affero GPL evita esse resultado. Se D executar sua versão em um servidor que todos possam usar, você também poderá usá-lo. Supondo que ele tenha seguido o requisito de licença para permitir que os usuários do servidor baixem o código-fonte da versão dele, você pode fazê-lo e incorporar as alterações dele na sua versão. (Se ele não o seguiu, seu advogado se queixará.) Fonte: http://www.gnu.org/licenses/why-affero-gpl.html

JCasso
fonte
2
Mas, como esse é o Dart, que é compilado em Javascript e, em seguida, executado como no cilent, isso se aplica?
Winston Ewert
1
A GPL é clara sobre isso. Se eu lhe der um cd do ubuntu, devo fornecer uma maneira de obter o código fonte. Se eu colocar o ubuntu.iso em um servidor de arquivos, também devo fornecer um link para download (ou algo parecido). Isso é chamado de distribuição. Se você distribuí-lo, precisará fornecer o código-fonte. Mas ter um aplicativo online (em um servidor) nunca é considerado "distribuição".
JCasso
3
o ponto é que o código é executado no navegador, não no servidor. Sua resposta é significativa apenas se estivermos olhando para o código que é executado no servidor. Mas nós não somos. Estamos analisando o código executado nos computadores clientes. Se o código foi executado no servidor, você está certo, não é distribuição. Mas como o código é baixado pelo navegador e executado, ele é distribuído e sua resposta é irreverente.
Winston Ewert
2
Na verdade, acho que importa muito qual CPU o processa. Se eu executar o seu código na minha CPU, por necessidade, você o distribuiu para mim. Para todos os efeitos, é exatamente o mesmo que baixar um programa e executá-lo. A questão foi discutida anteriormente: stackoverflow.com/questions/1239470/… , programmers.stackexchange.com/questions/62869/… .
Winston Ewert
2
Além disso, consulte a página AGPL à qual você vinculou. Ele discute explicitamente o código executado nos servidores, não o código executado nos clientes. Se o autor pensasse que a GPL não se aplicava ao código executado em javascript, ele teria mencionado isso em sua discussão.
Winston Ewert
1

Em geral, isso realmente depende da licença. No seu caso, o Dart é um mau exemplo, pois é BSD, e parece que o GNU 3.0 cobre o caso que você está falando. Como não advogado, interpretaria essa citação como "O código gerado não é coberto especificamente"

Dart Home Page Refere-se a isso: Licença BSD

Então você pergunta sobre a GPL é discutível

Também: Licença GNU 3.0

Existe alguma maneira de obter a GPL da saída obtida pelo uso do meu programa? Por exemplo, se meu programa for usado para desenvolver projetos de hardware, posso exigir que esses projetos sejam gratuitos? (#GPLOutput)

Em geral, isso é legalmente impossível; A lei de direitos autorais não dá a você nenhuma opinião sobre o uso que as pessoas produzem de seus dados usando o seu programa. Se o usuário usa o seu programa para inserir ou converter seus próprios dados, os direitos autorais da saída pertencem a ele, não a você. De maneira mais geral, quando um programa traduz sua entrada em alguma outra forma, o status de direitos autorais da saída herda o da entrada da qual foi gerado.

Portanto, a única maneira de dizer algo no uso da saída é se partes substanciais da saída forem copiadas (mais ou menos) do texto do seu programa. Por exemplo, parte da produção do Bison (veja acima) seria coberta pela GNU GPL, se não tivéssemos feito uma exceção neste caso específico.

Você pode artificialmente fazer com que um programa copie determinado texto em sua saída, mesmo se não houver motivo técnico para fazê-lo. Porém, se esse texto copiado não tiver um propósito prático, o usuário poderá simplesmente excluir esse texto da saída e usar apenas o restante. Então ele não teria que obedecer às condições de redistribuição do texto copiado.

Paulo
fonte
3
A questão não é sobre um compilador Dart que é GPL (o que seria irrelevante para a saída do programa (compilador)), mas sobre um programa Dart que é GPL.
2
@ Delnan Eu não li a pergunta da mesma forma que você. 1) Veja o meu primeiro link, Dart é BSD. 2) Se o programa Dara fosse GPL, ele não faria a pergunta. Eu li a pergunta como ele querendo saber se ele também precisava liberar seu código-fonte Dart. Você realmente leu minha resposta?
Paul
2
Bem, você parece ser o único que lê assim. Embora o OP não mencione explicitamente que o programa Dart em questão é GPL, nada sugere que ele assuma que o compilador Dart também é GPL, então não estou disposto a supor que ele fez tão pouca pesquisa.
Desculpe, então estique isso ... Então, se nem o programa Dart é GPL e o Dart é BSD (realmente, é, ou pelo menos o site diz que é), então qual é a questão? Se for apenas sobre "Eu tenho que distribuir A (GPL) quando eu quiser liberar B (não GPL)", então é uma pergunta duplicada
Paul
2
@ Paul Minha suposição, e a suposição de todos os outros, é que o programa Dart é de fato GPL'd.
0

A questão básica é:

A inclusão de javascript na página da web (por exemplo, referência por meio de uma tag de script) conta como "Transmitindo" o trabalho da GPL?

Nesse caso, você deve disponibilizar a fonte na forma preferida para modificar o código, caso contrário, não o faz. Nesse caso, a forma preferida é o código-fonte original do Dart usado para gerar o javascript.

Não consigo encontrar uma resposta explícita para essa pergunta no site da FSF, mas o ensaio de Stallman "A armadilha do Javascript" parece indicar que ele a considera transportadora e, como tal, você teria que disponibilizar o código-fonte original do Dart. Veja sua nota sobre a permissão de versões compactadas que não incluem o texto da licença, mas ainda são cobertas pela licença.

Consulte também esta FAQ sobre javascript e modelos para obter uma exceção que permitiria que os modelos usassem javascript GPLed sem serem GPLed.

A melhor maneira absoluta de saber se o que você deseja fazer é compatível com a licença é pedir ao detentor dos direitos autorais do código, porque somente eles têm o direito de fazer cumprir a licença. Eles podem ter interpretado a licença de maneira diferente e desejam adicionar uma exceção para tornar sua interpretação explícita.

Craig
fonte
Na verdade, essa não é a questão. Se você ler a pergunta com atenção, o OP assumirá que você seria obrigado a distribuir o javascript. Seus únicos outros nessa questão que questionaram essa interpretação. A questão é se ele também deve distribuir o código Dart.
Winston Ewert
@WinstonEwert Quando digo "código-fonte", quero dizer os arquivos de origem Dart originais usados ​​para gerar o javascript. Vou atualizar minha resposta para deixar isso claro.
29412 Craig