Licença do ExtJS

{ May 17th, 2012 }


cmilfont

Autor: cmilfont

Há uma grande confusão e má interpretação da licença dual do ExtJS e de todos os produtos Sencha em geral, principalmente por causa da GPL3. Como voces deveriam saber, os produtos da Sencha são Open Source com uma licença comercial caso queira monetizar com as ferramentas.

Já discuti com diversas pessoas afirmando que se voce construir uma aplicação com ExtJS voce tem que distribuir o código fonte de sua aplicação, aí que está o grande engano.

Preciso Distribuir o Código Fonte de Minha Aplicação?

Não

Explique

ok, a licença é conhecida como viral, o que ela toca se torna Open Source e voce precisa deixar acessível.

Basicamente se algo depende de código com GPL3 esse algo se torna GPL3.

Agora uma Webapp com ExtJS não depende do ExtJS, sendo mais preciso o seu server-side  não depende da camada de apresentação se esta for feita toda no client-side como as abordagens Full Ajax utilizam. Por isso eu não uso e nunca utilizei em produção algo com a API de Direct do ExtJS, porque a fronteira dessa definição não é claro sob esse aspecto. O Direct força o seu server-side a se ajustar ao client-side quando deveria ser o contrário.

Até a versão 3 voce precisava renderizar o JSON para uma estrutura definida pelo ExtJS nos forçando a fazer coisas assim [como o Responder abaixo] e deixando a fronteira novamente ambígua.

module Sencha
class Wrapper
attr_accessor :data, :total
end
class Responder < ActionController::Responder
attr_reader :controller, :request, :format, :resource, :resources, :options
def initialize(controller, resources, options={})
super
@controller = controller
@request = @controller.request
@format = @controller.formats.first
@resource = resources.last
@resources = resources
@options = options
@only = options.delete(:only)
@include = options.delete(:include)
@methods = options.delete(:methods)
end
def to_format
to_sencha if @format == 'sencha'
super
end
def to_sencha
ActiveRecord::Base.include_root_in_json = false
total = 1
total = @resource.total_entries if @resource.respond_to?(:total_entries)
if(@resource.respond_to?(:errors) && @resource.try(:errors).size > 0)
model = @resource.class.name.camelize(:lower)
@errors = { :attributes => {}, :base => @resource.try(:errors)[:base]}
@resource.errors.each do |attr, msg|
@errors[:attributes]["#{attr}"] ||= []
@errors[:attributes]["#{attr}"] << msg
end
render :json => {:success => 'false', :message => "", :errors => @errors},
:status => :unprocessable_entity
#, :location => @resource
else
sencha = {
:data => @resource, :total => total, :success => true, :message => ""
}
@params = { :include => @include, :methods => @methods }
render :json => sencha.to_json( @params )
end
end
end
end
view raw sencha_responder.rb hosted with ❤ by GitHub

Hoje na versão 4x o Framework trabalha com JSON padrão e voce não precisa modificar o seu Responder para satisfazer o que seja.

Existem estratégias para voce contornar essa limitação ou comprar a licença comercial caso queira fechar modificações nas ferramentas sob a licença GPL3.

Mas Como a Sencha Ganha Dinheiro Então?

Treinamentos, consultorias e outros serviços já são o nicho de negócio principal, imagino. Mas…

Se voce construir uma customização ou novo componente sob a licença comercial, ninguém pode usar ou distribuir essa sua modificação, é aí que a licença comercial entra e é muito justo.

tl;dr

Resumindo, se voce usa ExtJS sob GPL3 voce tem que deixar todo o código que dependa dele sob a mesma licença, mas somente o código que dependa dele.

Categories: cearajs, Ext, sencha, Software Livre ~ ~ Trackback


Assine os comentários deste artigo.


20 Responses to “Licença do ExtJS”

  1. 1
    Felipe Thomas

    Milfont, eu fiz meu site utilizando alguns componentes nativos Ext JS, implementei meu server-side com outra linguagem/framework, preciso comprar a licensa comercial? E se eu quiser vender sites utilizando componentes Ext JS?

  2. 2
    cmilfont

    Felipe, ExtJS é melhor para WebApps que requeiram um UX próximo ao Desktop, por diversos fatores. Eu não faria sites em ExtJS.
    Mas respondendo a sua pergunta, voce pode vender normalmente desde que o código seja distribuído, só não sei se algum cliente pagaria sabendo que pode pegar de graça :)

  3. 3
    Felipe Thomas

    Obg pela dica 😉

  4. 4
    Gustavo

    Bacana o artigo! ^^

    A dúvida do Felipe ainda não ficou claro pra mim :(

    Tenho o seguinte cenário: Estou desenvolvendo uma aplicação específica para uma empresa, que funcionará na intranet, e estou usando ExtJS + um framework PHP.

    Todo o codigo (Server e client) ficará no servidor da empresa. Como ficaria? Tenho q comprar a licença?

  5. 5
    Bruno Tavares

    Bom esclarecimento!

    Só queria corrigir com relação à receita, licenças ainda são a maior entrada, principalmente pelas vendas grandes com contratos OEM.

    Outro ponto importante, a licença comercial é dita incompatível com a GPL. Se você começa com GPL, vai ter que ir até o fim de GPL. Essa história de desenvolver GPL sem pagar por 3 meses de desenvolvimento, e depois comprar a comercial quando o app estiver em produção, não é aceito.

  6. 6
    cmilfont

    @Bruno Tavares
    Sobre a receita, por isso eu falei “imagino” : )

    Com certeza se voce começou com GPL3 o código já foi tocado pela licença, então pela própria natureza da GPL voce não tem como fechar, ponto importante que parece óbvio mas tem que ser citado.

  7. 7
    cmilfont

    @Gustavo

    Eu aconselho a comprar a licença nesse caso, mas é simples de saber o que tem que distribuir ou não: O seu código que depende do ExtJS [caso esteja usando GPL3], que só funcione por causa dele, tem que ser distribuído.

  8. 8
    Gustavo

    Certo, obrigado cmilfont !

  9. 9
    Silveira Neto

    Oi pessoal, minha pequena colaboração para a discussão.

    Uma coisa importante mas que é um pouco sutil e geralmente desapercebido nas discussões é que o copyleft* só é disparado quando há distribuição dos binários. Ou seja, você está criando uma aplicação que vai ser distribuída, por exemplo, usuários podem baixar o .exe ou comprar uma caixinha com seu software na prateleira. Para aplicações onde os usuários só interagem com seu software através de uma interface, o copyleft não é disparado. Existe a licença AGPL (GPL Affero) para quem quer um copyleft mais facilmente disparável.

    Usar um Software GPL dispara a licença GPL? Depende. Eu não conheço com detalhes como o ExtJS funciona. Se você tem que fazer algo parecido com subclasses de classes GPL, então sim. Eu perguntaria se é comum fazer ofuscação de códigos em Javascript com ExtJS, senão, você já está distribuindo os fontes.

    @Bruno Tavares e @cmilfont, uma vez GPL sempre GPL? Sim e não. 😛 Se João escreve o exemplo.js como GPL na versão 3.1415 então o exemplo.js 3.1415 será sempre GPL. Se na versão 3.1416 ele decidir trancar seu código, então tudo bem (desde que ele seja o único autor, copyright, ou que todos os outros autores/contribuidores concordem que João pode fazer isso). Se Pedro quiser fazer um fork da versão 3.1415 e lançar o exemplo_do_pedro.js versão 3.1416 como GPL, é um trabalho derivado e ele pode fazer isso (e terá que ser em GPL essa e toda versão subsequente). Ao contribuir para alguns projetos você tem que concordar com os termos de ceder seus direitos de autor a um terceiro e esse terceiro poderia fazer esssa des-GPL-ização no futuro. Foi o que aconteceu com o CUPS. Eu particularmente não gosto disso, mas não há nada aí que viole a licença.

    * A “viralidade” da GPL é um termo cunhado com uma conotação negativa em processos de FUD para descreditar o copyleft, que nada mais é do que “contaminar” com liberdade, um toque de midas. É importante notar que a simples inclusão de um software GPL no seu projeto não o torna GPL apesar de que é muito comum eu ouvir essa afirmação equivocada.

  10. 10
    cmilfont

    @Silveira, só um comentário sobre a distribuição.
    É natural “minificar” js o que torna praticamente obfuscado, então nesse caso há a necessidade de distribuir os originais também.

    Perfeito seus comentários, obrigado.

  11. 11
    Silveira Neto

    @cmilfont, bem colocado. Acho que isso é um consenso, minificar é ofuscar.

  12. 12
    Schopenhauer

    Obrigado pelo post cmilfont, ficou ótmo!

    Uma dúvida:
    * meu server gera e retorna algo +/- assim para o “TreeStore” montar o menu :

    return array (
    ‘children’ =>
    array (
    0 =>
    array (
    ‘text’ => ‘Home’,
    ‘expanded’ => true,
    ‘children’ =>
    array (
    0 =>
    array (
    ‘text’ => ‘Sair’,
    ‘xtypeName’ => ‘default-auth-logout’,
    ‘controllerNameExtjs’ => ‘DefaultAuth’,
    ‘leaf’ => true,
    ‘expanded’ => true,
    ),
    .
    .
    .

    Para vender minha app e usar o extjs 4 sob a licença GPL3, precisarei publicar o codido que gerou este arquivo ou apenas os controllers, models, stores, views e etc do extjs ?

  13. 13
    cmilfont

    @Schopenhauer

    Como eu falei no artigo, é sempre ambíguo isso, porque teoricamente o seu server-side segue um protocolo/formato sob a licença GPL3, portanto o código que depender dele tem que ser publicado também. Dependendo do acomplamento do seu código, vai ter que liberar muita coisa server-side.
    Mas como eu falei, é sempre complicado inferir uma fronteira nisso, por vias das dúvidas eu sempre crio uma camada fina para isolar o código do ExtJS do meu server-side. No caro so Rails por exemplo tinha um Responder [código no POST] específico para isso.

  14. 14
    Fábio Mattes

    Só pra complementar. Nas próprias palavras de Bruce Perens autor de definição de Open Source:

    “Open Source é um software que o da uma lista de nove direitos:

    1º – Distribuição Livre

    O primeiro direito é Reditribuição Livre. Este livre não significa “sem preço”. Ele significa liberdade que você tem para redistribuir livremente seu software para outra pessoa. E na verdade ser grátis é um efeito colateral. Você pode ou não cobrar pela REDISTRIBUIÇÃO.

    2º – Código Fonte disponível

    Ele deve ir com o código fonte para que qualquer pessoa possa manter o programa. Se alguém for de um PC para um Mac por exemplo, ele possa mudar o software.

    3º – Trabalhos derivados permitidos

    Trabalhos derivados tem que ser possíveis se alguém precise melhorar o programa e ele pode redistribuir o resultado.

    4º – Integridade do autor do código fonte

    Existe uma condição quanto a integridade do código fonte do autor que diz que o autor pode manter sua honra e se você fizer quaisquer mudança você pode ter que mudar o nome do programa ou marcar sua mudança bem claramente para que sua mudança não reflita no autor.

    5º – Não há discriminação contra pessoas ou grupos

    Não existe discriminação contra pessoas ou grupos. O exemplo que costumo usar é que você não pode fazer uma clinica de aborto ou ativista anti-aborto parar de usar o seu software.

    6º – Sem discriminação contra áreas de atuação

    Não existe discriminação contra áreas de atuação. Isso significa que o software pode ser usado em um negócio da mesma forma que numa escola.

    7º – Distribuição da Licença

    A licença deve poder ser distribuída. Em outras palavras, eu tenho que poder dar esta licença a alguém e essa licença então deve funcionar mesmo se alguém der ela a uma terceira pessoa.

    8º – A licença não pode ser específica a um produto

    Em outras palavras, se eu redistribuir meu software em um sistema red hat a licença não pode dizer que você não pode distribuir ele num sistem Suse ou Debian.

    9º – A licença não pode contaminar outro software

    Então, se você distribuir ele em um cd com outro programa não quer dizer que o outro programa deva ser livre, de outra forma você não pode distribuir meu software.”

    Palavras do autor. Ao meu ver se o software está sob a licença Open Source então eu posso cobrar se eu quiser pelo meu software independente se ele usa um framework de terceiros que está sob a mesma licença, pois, eu não estou modificando o framework e nem vendendo o framework, o framework não passa de uma ferramenta de trabalho ou seja, se fosse o caso então, eu não poderia distribuir meus softwares em java só porque eu uso uma IDE como o Eclipse que é livre e também é uma ferramenta de trabalho, ou seja só porque é livre não quer dizer necessariamente grátis.

  15. 15
    Igor Silvério Costa

    Entao posso usar a Ext com licença open source em um projeto que esteja rodando em um servidor web que forneça JSON para a camada cliente feita com Ext, desde que eu ofereça os meus JS para quem me pedir eles, mesmo que o meu projeto seja comercial? Isso tb vale para após iOS nativas feitas com Sencha Touch?

    Obrigado por esse artigo, foi o melhor que encontrei até agora.

  16. 16
    cmilfont

    Igor Silvério Costa, desde que você distribua os fontes do código que depende do ExtJS, voce pode usar tranquilamente.

  17. 17
    Carlos

    Estou desenvolvendo um site para a prefeitura de minha cidade no qual vou disponibilizar uma serviço para a população, não será um software comercializado, é necessário pagar por uma licença do EXTJS?

  18. 18
    Paulo Leandro

    Seguinte galera, eu já desenvolvi uma aplicação comercial a qual eu vou vender. A minha dúvida é a seguinte:
    1- eu usei aquela versão free da biblioteca para os grids e alguns outros componentes
    2- o meu código vai ter que ser divulgado para todo mundo
    3- vai funcionar mesmo eu tendo desenvolvido em uma versao gratis 2.0
    4- caso não tenha problema, eu terei que pegar uma licença e se for qual é esta licença.

    É galera eu gostei bastante de desenvolver Ext com DOtnet e as paginas ficaram com uma qualidade muito boa.
    peço ajuda para matar estar questões.

    obrigado.

  19. 19
    Vicente Bruno

    Boa Tarde, alguem tem o link do Sensha Ext js gratuito, e se possivel gostaria de algum material, video aula, pra mim aprender também, desde ja obrigado.

  20. 20
    Lucas Quadro

    O site da sencha deixa claro, que se o software utiliza um software sob a licença GPL ele precisa ser GPL também:

    “When a software program calls code that is licensed under the GPLv3, then that software program becomes a derived work of the GPL’d code and hence subject to the GPLv3 copyright license. If the software program is then “conveyed” to a user, the GPLv3 requires that the source code to that software program also be “conveyed.” “Conveyance” for a web application is triggered when a user outside the legal entity that created the application uses the application.”

    E eles entendem como modificação:

    Modify Ext JavaScript, Java or CSS source file
    Extend Ext class or override any Ext functions or methods
    Modifying an Ext API

    https://www.sencha.com/legal/open-source-faq/

Leave a Reply