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
endHoje 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.
Posted in cearajs, Ext, sencha, Software Livre ~ 3 Comments