Eu também posso usar o modo de segurança para ter uma ideia das alterações que outras distribuições do Discourse fizeram:
Purism tem apenas alguns scripts de tema (que podem realmente fazer parte do Discourse oficial, já que o modo de segurança bloqueia todos os temas, eu acho) e uma peça interna (ou seja, parte do arquivo HTML, não um arquivo JS externo) de JavaScript, começando com const DELAY_TARGET=2e3,POLLING_INTERVAL=50,splashS…
Exercism tem o que parece ser o plugin discourse-spoiler-alert que foi adicionado posteriormente ao core, bem como o mesmo JS interno exato que Purism.
O fórum de Membros da FSF tem apenas o mesmo JS interno exato que os outros dois.
Discourse Meta (este fórum) parece ter muitas diferenças de JS
discourse-activity-pub
discourse-customer-flair-plugin (não consegui encontrar uma licença para este em lugar nenhum)
discourse-deprecation-collector
discourse-doc-categories
discourse-new-features-feeds (nenhuma licença encontrada para este também)
muitos outros scripts, incluindo alguns que nem sequer têm um link para um mapa de origem.
Então, parece que a maioria das distribuições de terceiros (com base na minha pequena amostra de 3) se mantém bem próxima do Discourse principal, mas isso faz parecer que esta distribuição contém plugins que não fariam parte da maioria das distribuições. Você sabe onde eu encontraria o código-fonte licenciado para todos eles? Eles estariam no repositório principal? Não consegui encontrá-los pesquisando por alguns desses nomes no repositório principal, mas é possível que eu tenha perdido.
Tentei procurar em todo o fórum por “discourse-new-features-feeds” (por exemplo) e não encontrei nada. Para algumas extensões, consegui encontrá-las no diretório de plugins, no GitHub ou aqui nos fóruns, mas para discourse-new-features-feeds e discourse-customer-flair-plugin, não consegui encontrar nada. Não verifiquei todos os scripts de plugin, então pode haver mais que eu não conseguiria encontrar.
Eu imagino que possa haver um motivo pelo qual, por exemplo, as personalizações da própria Meta não são públicas. Ou você não pesquisou o suficiente no repositório do Discourse
É possível que eles sejam um cliente Enterprise e tenham feito o Discourse personalizar especialmente o fórum deles.\nTambém, se você quiser usar o modo de segurança para ver personalizações do lado do cliente, isso não o desabilitaria em vez disso? Como você o habilitaria nesses sites em primeiro lugar?
Por curiosidade, fico imaginando qual é exatamente toda a lógica por trás disso. Você simplesmente não pode navegar na internet com as preocupações que você está levantando, correto?
Você está falando de “licença”. Mas sua própria licença para usar um fórum específico como um simples usuário seria diferente da licença para realmente rodar o software do fórum (=se alguém quiser configurar outro fórum com ele). Por que um usuário se importaria com o último? Por causa de alguns princípios aos quais ele quer aderir? Qualquer personalização não redistribuída seria “proprietária”, eu acho. O que levanta a questão de onde isso começa e termina.
Você pode desconfiar de javascript e do que ele pode permitir rodar no seu navegador (os riscos e possibilidades disso são frequentemente debatidos. Supostamente é limitado). Não tenho certeza se o Discourse pode rodar sem ele, no entanto. Ou rodar corretamente, pelo menos. Você sempre pode tentar. Existe a popular extensão de navegador “NoScript” para isso, por exemplo.
Ainda me pergunto sobre o raciocínio: é sobre código malicioso potencial? Nesse caso, não faria muito sentido para mim que você se sentisse melhor com uma licença que DIZ que um fórum roda uma versão não modificada. Ou é sobre o quê?
Geralmente, quero evitar executar software não livre. A principal razão é que acredito que devo ter controle sobre o software que roda no meu computador, e uma razão adicional é que não gosto da ideia de bugs que podem ser ilegais de corrigir. Também acho que seria bom se eu obtivesse meu software de um pequeno número de repositórios confiáveis, em vez de baixar software de centenas de sites independentes diferentes, sem supervisão ou responsabilidade de terceiros, então é importante para mim que eu seja livre para empacotar o software que uso para um repositório em que confio (embora isso seja bastante impraticável para JS servido pelo site com a tecnologia atual).
Não acho que deva ter controle sobre o software que roda nos computadores de outras pessoas, porque acredito que o operador do servidor deve ter esse controle, e não me parece que faria sentido que vários usuários tivessem controle total sobre o software.
Não, é relativamente fácil evitar executar software não livre na internet se você não usar programas que baixam e executam automaticamente código arbitrário de partes não confiáveis, ou se você modificar tais programas para não fazer isso (por exemplo, instalando o LibreJS no seu navegador).
Pelo que posso dizer, executar o software do fórum é necessário para usar a maioria das funções do fórum, embora a leitura de postagens funcione sem ele. Se eu quiser registrar uma conta e postar tópicos, parece que tenho que executar o software do fórum. A maioria das pessoas não percebe isso porque a maioria dos navegadores baixará e executará qualquer software que o site enviar, sem notificar o usuário.
Parte do software do fórum é executada no servidor, e então as instâncias do Discourse não necessariamente distribuirão esse software, o que significa que eu nem sempre receberei qualquer software não livre que a instância adicionou ao lado do servidor, então não tento evitar instâncias que fazem isso.
Observação sobre definições
Na minha opinião, software que nunca é distribuído é “proprietário” porque tem um único “dono” (o autor), mas também é “livre” porque todos os seus usuários (apenas um, o autor) são livres para fazer o que quiserem com ele. Bem, acho que você poderia dizer que as pessoas que interagem com um servidor são “usuários” do software naquele servidor, então talvez eu devesse usar uma palavra diferente de “usuários”, mas não tenho certeza de qual palavra usar em vez disso. Talvez eu seja tecnicamente um “usuário” do software rodando na rede telefônica ou no telefone de outra pessoa se eu ligar para alguém.
Sim, tenho o NoScript instalado, e quando bloqueio o software Discourse do lado do cliente, é claro que o Discourse não pode “rodar” sem ele, porque eu impedi o navegador de executar os scripts. O software do lado do servidor, que não roda no meu computador, não é impedido de rodar pelo NoScript. Neste estado, os tópicos e comentários servidos pelo software do servidor Discourse são visualizáveis, mas para registrar e postar parece que você precisa usar o software JavaScript do lado do cliente.
Em relação a malware, se um programa de software livre for malware, então alguém pode modificá-lo para não ser malware e, em seguida, distribuir essa versão modificada para usar em vez disso. Para JavaScript servido pelo site, isso é atualmente um tanto impraticável. Idealmente, haveria uma licença declarando diretamente que o software é software livre, para que mesmo que o software fosse modificado, ainda seria legal usá-lo como software livre. Como está, tenho que confiar que as distribuições que uso não “mentem” sobre qual versão do software estão usando (por exemplo, modificando o software do servidor Discourse para afirmar que um commit está sendo usado quando é outro).
Provavelmente fiz esta resposta um pouco longa, mas o cerne dela é que valorizo a liberdade do software e, portanto, quero evitar executar software não livre no meu computador.
Neste caso, “eles” é o Discourse Meta. Isso não faz parte do Discourse (a empresa)?
Sim, o que eu quis dizer foi: com o modo seguro, posso desabilitar os scripts das modificações e, em seguida, comparar qual software é enviado ao navegador em ambos os casos. A diferença são as modificações e os temas.
O modo seguro pode ser habilitado navegando para /safe-mode (por exemplo, http://meta.discourse.com/safe-mode) e selecionando as opções lá. Essa página não requer JavaScript, então o modo seguro pode ser habilitado enquanto se usa extensões como NoScript, LibreJS e/ou Haketilo para bloquear o JS ou definindo javascript.enabled como false nas configurações do navegador para navegadores baseados em Firefox.
Neste ponto, você pode comparar as tags de script em ambas as páginas para ver o que foi removido com o modo seguro. Eu usei um script como este:
script-diff.js
// SPDX-FileCopyrightText: 2024 Jacob K
//
// SPDX-License-Identifier: CC0-1.0
// na página com mais scripts
const scriptSrcArr = [];
for (script of document.scripts) {
if (script.src) {
scriptSrcArr.push(script.src);
} else {
scriptSrcArr.push(script.textContent);
}
}
console.log(scriptSrcArr)
// na página com menos scripts (Você precisará clicar com o botão direito na matriz e clicar em "Copiar Objeto" na primeira página)
scriptSrcArr = PASTE_OBJECT_FROM_OTHER_PAGE_HERE
for (script of document.scripts) {
if (!scriptSrcArr.includes(script.src)) {
console.info(script)
}
}
// Estou assumindo que os scripts na primeira página são um superconjunto dos scripts na segunda página
@Jagster (tentando uma resposta por meio de edição, conforme sugerido pelo Discourse (recurso de sugestões legal!))
Isso me faz pensar que o Discourse, como distribuído por meta.discourse.org, é software não livre, o que significaria que as afirmações de “Todo o código-fonte do Discourse é aberto e está livremente disponível ao público” e “Discourse é 100% gratuito, código aberto software de fórum.” (ambos de www.discourse.org) parecem enganosas, mesmo que tecnicamente seja verdade porque o software não é a mesma coisa que seus plugins. Me sinto meio que fui enganado para rodar software não livre
Acho que essa afirmação é realmente destinada a pessoas que pretendem hospedar instâncias do Discourse, não a participar das existentes.
Espero estar errado e que seja realmente o caso de eu não ter olhado o repositório com atenção suficiente.
Você deve ter essa sensação com muita frequência. Sem emoticons, porque isso foi apenas uma declaração sobre como a internet e os aplicativos funcionam.
Você acabou de dizer que personalizações são ruins e que, se a base for de código aberto, todos os complementos também devem ser gratuitos. Bem, acho que o WordPress usou isso, mas certamente não com wordpress.com, mas se você visitar meu site WordPress, há muito trabalho personalizado. Alguns são proprietários, alguns são abertos, alguns são personalizados e alguns são meus. E não nesta realidade duas coisas acontecerão:
todo o código do trabalho personalizado seria público
Eu diria a você ou a qualquer visitante se tenho ou não licença válida
Mas tenho dificuldade em entender por que Discourse, WordPress, Moodle etc. não seriam gratuitos se alguns adicionais não fossem gratuitos. Não entendo a lógica por trás desse pensamento.
Esse é definitivamente o ponto
Você não pode prever o que os hospedadores podem então adaptar para fazer.
De fato, além disso e, por exemplo, a critério do host, eles podem adicionar:
publicidade
assinaturas
E embora o “software” possa permanecer “gratuito para usar”, alguns recursos podem ser restritos e a publicidade só pode ser desativada para assinantes pagantes.
Nem todo mundo tem fundos ilimitados para executar uma instância do Discourse gratuitamente. Muitos sites precisam gerar receita para pagar suas contas.
Executar um Discourse nunca é “gratuito” em escala. O host tem que pagar pelos custos do nome de domínio, VPS e serviços de e-mail para listar os principais.
(… e não vamos entrar nos custos de desenvolvimento do Discourse em primeiro lugar!)
Administradores de seus próprios sites Discourse têm a liberdade de personalizar seus próprios fóruns. Plugins, temas, TCs nem sempre precisam ser de código aberto. O Discourse está bem com isso, pois existem maneiras de usar repositórios privados em vez de públicos para conectar essas personalizações.
Assim como qualquer um dos plugins, exceto em ocasiões muito, muito, muito raras (talvez até quase nunca!) essas personalizações serão pagas [1]. Portanto, nada é “não livre”: tudo é livre.
Meu ponto é que software de código aberto será gratuito. Plugins são gratuitos - é sua escolha usá-los. Assim como temas, TCs, etc. O que não é de código aberto, no entanto, pode ser pago, mas os administradores escolheram torná-lo gratuito para uso. Não há ninguém impedindo você se quiser fazer uma cópia de uma personalização de código fechado da melhor maneira possível e usá-la você mesmo.
O Discourse é gratuito, suas personalizações públicas [2] são gratuitas, suas personalizações privadas também são gratuitas para usar (Pelo menos em muitos lugares, mas
. Pagar ao proprietário pelo código-fonte é uma coisa diferente, no entanto.
Essencialmente, a menos que você mesmo crie um plugin/tema/TC e não o compartilhe, você sempre pode instalar personalizações gratuitamente. Ninguém está impedindo você.
Desculpe se isso soa rude ou seco, ou se estou andando em círculos e repetindo a mesma coisa.
Exceto por comissões pagas, que é sua própria escolha patrociná-lo. ↩︎
ou seja, aquelas listadas aqui no Meta ou no github publicamente ↩︎
Isso não é necessariamente verdade. Novamente: isso é sobre grátis como em liberdade, não em preço. Existem projetos de código aberto que têm licenças muito restritivas para serem consideradas software livre de acordo com a definição da FSF. Exemplos são MongoDB e ElasticSearch.
Rodar software livre não implica que você tenha controle sobre ele.
Então parece que você está misturando ‘confiável’ e ‘livre’. Quando um administrador de servidor compila o Discourse, o processo de compilação baixa todos os tipos de pacotes do NPM. Eles podem ser sempre confiáveis? (A história nos ensinou que não é o caso - exemplo e outro).
Você “acha” Um administrador de servidor pode fazer modificações sem alterar o hash do commit. E um plugin também pode injetar código Javascript.
Odeio ter que te dizer isso, mas isso é falso.
Isso não é sobre livre ou não livre ou código aberto ou código fechado, mas sobre confiança.
Se você visitar uma instância do Discourse, terá que confiar em
o(s) administrador(es) do servidor
todos com acesso de commit na organização do Discourse no github
todos com acesso de commit em repositórios de plugins
todos no github
toda a cadeia de software NPM
todos com acesso de commit em qualquer repositório NPM que esteja sendo usado
todos com controle sobre o software do seu navegador
a empresa que forneceu o certificado SSL e a cadeia de confiança
O que serão pelo menos algumas milhares de pessoas?
Plugins e componentes de tema podem ser encontrados em repositórios separados.
Nem todos os plugins são de código aberto (por exemplo, discourse-customer-flair-plugin não é, AFAIK). Então aí está. Você terá que parar de usar o Meta Brincadeira, claro. Meu ponto é que pode haver confiança suficiente sem que tudo seja de código aberto ou livre.
Só uma coisa, @JacobK1, você leu a licença do Discourse?
Citando alguns pontos que podem ser relevantes:
a GNU General Public
License é destinada a garantir sua liberdade de compartilhar e modificar software livre — para garantir que o software seja livre para todos os seus usuários.
Você pode modificar sua cópia ou cópias do Programa ou qualquer porção
dele, assim formando um trabalho baseado no Programa, e copiar e
distribuir tais modificações ou trabalho sob os termos da Seção 1
acima
Espero que isso tenha sido respondido acima e na citação acima desta.
Se entendi corretamente, tudo isso está principalmente ligado ao javascript. E é sobre o que é executado com javascript dentro do seu navegador, que é servido por cada instância do Discourse. Seria também principalmente sobre “confiança” e ter a capacidade de saber qual código está sendo executado (ser capaz de dar uma olhada nele). Correto?
Isso está bem acima da minha capacidade, mas você pode ter “controle” sobre isso? A menos que você estivesse enviando um commit que muda as coisas para todos, eu não acredito que você pudesse realmente “consertar” algo para si mesmo aqui, já que o que você chama de “software” que roda no seu computador é fornecido ao seu navegador pelo servidor toda vez.
Mesmo que cada fórum tivesse seu próprio código de código aberto publicado, com todas as modificações possíveis, você pode ter certeza de que é isso que eles estão realmente executando o tempo todo? Não é como se você pudesse baixar uma vez, verificar e compilar você mesmo do seu lado.
O que você realmente quer é:
Nenhum javascript (sem sorte com o Discourse nisso, que depende bastante dele) ou
Um cliente independente de código aberto realmente instalado no seu computador. Este último também precisaria não usar javascript, se tudo isso for possível com o Discourse, o que eu não sei. Então você seria capaz de modificar seu cliente e ter o controle sobre ele que você procura.
Seria um entendimento justo?
(PS: Também está acima da minha capacidade, mas se bem me lembro, nem 100% do código do Discourse é de código aberto. Agora, você realmente só se importa com o que roda do seu lado, não com tudo do lado do servidor)
Because I get the vast majority of my software using apt install instead of a web browser, and I trust my software distribution (Trisquel) to only distribute free software, this isn’t usually a concern.
Just to be clear, I am not saying customizations are necessarily bad, just that they may be bad if they are nonfree, so a way to be sure you avoid running nonfree software is to disable customizations.
To be clear, I am not trying to say Discourse is nonfree. It’s only this particular distribution of Discourse (Discourse Meta) that appears to include nonfree software.
I should have mentioned in my previous post that another reason I thought this distribution would be free is that the about page for Discourse says " There is only one version of Discourse – the awesome open source version.". This is, again, technically true because the plugins are not part of Discourse, but it felt misleading to me.
Discourse might not have control over third party distributions, but I would have expected Discourse instances hosted by Discourse to be free software if they are saying what they say on the about page. I might have also expected a license and/or framework that would effectively require derivatives to be free software, which there kind of is, since Discourse is GPL, but I guess it doesn’t cover plugins.
I think charging money for software or services is fine; usually the “free” in “free software” means “libre”, as in you are free to do what you want with it (copy, modify, etc.), after you get it. It does not necessarily mean that it is “free” as in “gratis” i.e. zero cost.
Strictly speaking, yes, there is no one stopping me, but it would be illegal, which seems bad. For private use this might work out, but generally public software repos and app stores don’t want to include code illegally, and some people who I might want to use the software may be uncomfortable running illegally copied code. I’m not sure I have the right approach; maybe I should just totally ignore copyright, but that seems like not the best option when it’s feasible to avoid illegal and nonfree software.
No worries! I don’t think you’re being rude, and I don’t yet feel like we’re going in circles.
What do you mean by this? If the software is free that means I can modify it; therefore I do have control over what it does.
I don’t think free is the same as trusted; perhaps I should have said “arbitrary” instead of “untrusted”, but my point was that most browsers will execute whatever code a webpage gives them, and since I often visit websites I have never visited before, many websites I visit are “untrusted”. For these websites, I have no reason to think they will not send nonfree software.
Regarding NPM, I consider it more trusted than an arbitrary website, but maybe not as trusted as my apt or guix repos. Though, trust is not one-dimensional; although I would not trust a new package on NPM just because it is on NPM, I would trust that when I download JQuery from NPM it really is JQuery. NPM may make mistakes that allow an attacker to replace JQuery, but NPM could take measures to avoid malware that would not be as realistic for site-served JavaScript (e.g. pre-publish automated/manual review, post-publish crowd-sourced review, automated checking that minified/obfuscated scripts match source code, rules against downloading and running arbitrary code at runtime). Importantly, when malware is found on NPM, there’s a third party (NPM, as opposed to the software developer) to report it to so it can be removed. This is not the case for site-served JavaScript - the only one who can remove it is the site operator.
Does that mean the listed commit hash would be incorrect if a server administrator made modifications and didn’t also change the listed commit hash? I thought updating software would change the commit hash automatically, and I (incorrectly?) assumed the listed commit hash would be updated automatically.
Would plugin-injected JavaScript be disabled with safe_mode=no_themes,no_unofficial_plugins?
So, would the only way to avoid nonfree software while using Discourse be to package a Discourse client as a browser extension or Haketilo package or something similar?
I’m not sure what you mean by that considering my original question is about software freedom, and not trust.
I disagree that everyone you listed has to be trusted.
The server administrators would not have to be trusted if you don’t run software served by them, for example if you get the Discourse client from GitHub and package it so it can be used with that server.
In many cases, people collaborating on software might read some of each others’ commits, so I don’t have to trust all authors individually.
So that would mean the Discourse Meta client is proprietary software, right? Though, it is possible to use safe mode to disable the plugin JS.
Maybe, but that’s not very helpful if I want to avoid nonfree software.
@NateDhaliwal
I have read the license in the Discourse git repo, but (because of the CLA) it does not necessarily apply to derivatives of Discourse outside of that repo. I would like to see a notice on every Discourse distribution that says which of the distributed software is libre. It would even (IMO) fit with the spirit of the GPL: “you must show them these terms so they know their rights”.
Yes, it is possible, to run JavaScript from a browser extension or proxy, such a Haketilo or GreaseMonkey, though this can be very impractical for some software, for example if it updates very often, as would be the case for software where data is baked into the JavaScript software. Haketilo also doesn’t have support for some kinds of scripts, for example scripts with a type of “module”.
Yes, I think your understanding is correct overall. Though packaging the JavaScript as a browser extension or for Haketilo or GreaseMonkey would effectively result in an independent installed client, even though it would be using JavaScript.
Tudo o que faz parte do produto principal que hospedamos (incluindo o Meta), com a exceção que notei acima, é gratuito e de código aberto.
Alguns plugins dependem de plataformas proprietárias para funcionar, mas isso não tem nada a ver com o fato de o Discourse ser de código aberto ou não.
Todas as instâncias do Discourse hospedadas pela CDCK ou por nós (sou co-fundador de uma empresa que hospeda o Discourse) estão executando um ou alguns plugins de código fechado para fornecer alguma funcionalidade específica do ambiente de hospedagem.
Acho que há muita confusão entre uma distribuição no bom e velho sentido (aqui está um repositório do github e sinta-se à vontade para fazer o que quiser) e uma distribuição no sentido mais moderno (aqui está um site e ele envia Javascript para o seu navegador). Além disso, há confusão entre o Discourse https://github.com/discourse/discourse e o Discourse e todos os seus plugins e componentes de tema de primeira e terceira parte adicionados pelos administradores do site.
É um hash de commit, então se modificações forem feitas após puxá-lo do repositório e antes de commitá-lo, então você já tem tal situação. Isso não precisa ser um ato malicioso, também acontecerá se os patches de segurança forem aplicados (o que geralmente é feito antes de commitá-los em um branch público). Agora, em geral, os patches de segurança não são do lado do cliente, mas podem introduzir algum código atualizado do lado do cliente.
Sim - pelo menos em teoria. Não tenho certeza de quão difícil é contornar isso (deliberadamente ou acidentalmente).
Existe um repositório separado com uma licença para os plugins que eu não encontrei anteriormente, como o discourse-customer-flair-plugin? O JavaScript servido ao navegador tem um link para um mapa de origem, mas nenhuma licença, pelo que posso dizer.
Minha compreensão de “código de hospedagem/infraestrutura” não incluiria JavaScript do lado do cliente; isso está correto?
Concordo. Acho que estou confuso sobre a que a palavra “Discourse” realmente se aplica.
Ah, ok, então acho que não haveria uma boa maneira de saber.
Bom ponto, alguém poderia tentar esconder uma falha como essa. Mas parece mais fácil mitigar esse problema auditando código de terceiros do que confiando em todas as pessoas que já modificaram o código upstream, embora provavelmente nenhuma abordagem seja totalmente prática.
Sim, embora seja possível que a maioria das atualizações possa ser tratada automaticamente.
Suponho que isso seja em grande parte verdade neste caso.
Só para você saber, @JacobK1: O Discourse está bem feito, não há necessidade de marcar alguém quando você cita essa pessoa. A citação em si já gerará uma notificação (também foi para criar subseções, admito )