Open Source para Closed Source

Publicado às 23/05/2026 14:30 • #programming

Lá para 2016 e 2017, eu contribuía para o DragonProxy, Nukkit e para o Pokkit, e foi nessa época que eu acabei tendo um fascínio com a ideia de "open source", onde qualquer um um pode ajudar a desenvolver e estudar o projeto, assim todos sairiam ganhando.

Então, quando eu criei a Loritta em 2017, eu decidi deixa-lá open source e, para acompanhar, em 2019 deixei os plugins do SparklyPower open source também. O "marketing" que eu fazia era que, com os projetos sendo open sources, qualquer pessoa poderia melhorar a Loritta e o SparklyPower.

Mas depois de quase 10 anos nesse ramo de manter os projetos open source, eu percebi que talvez fosse a hora de deixá-los closed source, pois...

  • Muitas pessoas querem fazer self-hosting não para não depender de mim, e sim para competir diretamente contra os meus serviços.
    • Self-hosting é ótimo, eu mesmo faço self-hosting de várias ferramentas, como Grafana, VictoriaMetrics, Plausible... e alguns destes produtos possuem até SaaS pelos criadores para financiar o projeto.
    • Mas eu não hospedo o Plausible para competir contra os criadores do Plausible, eu hospedo pois eu tenho os recursos para hospedar eu mesmo, mas não tenho interesse de oferecer hospedagem do Plausible para outras pessoas. Se o Plausible fosse pago, eu provavelmente teria feito minha própria versão.
    • No caso da Loritta, muitas pessoas queriam self-hostear para competir contra a Loritta com uma branding diferente. E para o SparklyPower nem existe isso de self-hostear pois os plugins não são SaaS, você só estaria usando os plugins do SparklyPower no seu servidor de graça mesmo.
  • Fazer self-hosting da Loritta e do SparklyPower é complicado pois são projetos grandes que não foram feitos para self-hosting. São projetos com várias "moving parts", com partes que eu desenvolvi especificamente para o use case que precisa ser atendido. Os plugins do SparklyPower por exemplo dependem do SparklyPaper, a fork que eu fiz do Paper, então não era nem algo que é fácil para o end user usar.
  • Por causa da dificuldade de self-hosting, apenas amigos próximos acabavam contribuindo para a Loritta e para o SparklyPower.
  • Vários projetos SaaS que monetizam com open source vão pelo caminho do "open core", onde deixam uma parte do projeto open source com partes premium privadas atrás de paywall, ou vão pelo lado do "source available", onde o código-fonte tem restrições para evitar competição de terceiros. Para o caso da Loritta e do SparklyPower, open core não se encaixa. A Loritta até poderia ter partes open core, mas o SparklyPower não se encaixa de maneira alguma. E source available não tira o fato que alguém malicioso poderia quebrar a licença do jeito que ela bem entender.
  • Uma finalidade de deixar um projeto open source é porque você quer que o projeto tenha adesão para que você possa converter clientes para uma modalidade paga do seu projeto, por exemplo: O OpenCode é uma harness para LLMs open source e gratuita, mas você pode pagar pelo OpenCode Zen que são planos pagos com modelos LLMs SoTA. O OpenCode é open source pois é a "porta de entrada" para os modelos pagos, então quanto mais pessoas usando o OpenCode, mais chance dessas pessoas acabarem convertendo para os planos pagos. A Loritta não tem isso, pois se você hospedar a Loritta, você já teria todas as funções premium para você.
  • Outra finalidade de deixar um porjeto open source é porque você quer que muitas pessoas usem o seu projeto para depois vender serviços de suporte e consultoria, que é o que o SQLite faz. A Loritta até poderia se aplicar neste modelo, e o SparklyPower eu teria que vender serviços de consultoria para servidores que competem com o SparklyPower, o que meio que seria um conflito de interesse.
  • Dar ideias fáceis de ser implementadas para possíveis contribuidores é difícil, pois a maioria os problemas simples você mesmo consegue fazer sem pedir para outra pessoa, e problemas complexos são difíceis demais para alguém novato fazer, como também você estaria vazando o roadmap de novas funções que você quer implementar no projeto.
  • Qualquer coisa nova que eu faço aparece publicamente, então nada que eu faço (como eventos) é uma surpresa, pois qualquer um pode ver o código-fonte do projeto e descobrir qual é a coisa nova. Como também você recebe críticas sobre o código que, normalmente, não são nada relevantes.
    • Para ter uma ideia, já recebi críticas no passado por ter chamado o nome do plugin de scoreboard do SparklyPower de "SparklyAlphysScoreboard" (sendo Alphys uma referência a Undertale)... mas que coisa tosca para se criticar?!
  • Mesmo com o código aberto, muitas pessoas preferem ser ignorantes e acusar a Loritta de fazer coisas que ela não faz, como, por exemplo, "a Loritta me roubou!", ou "a Loritta salva todas as suas mensagens enviadas!" sendo que era só ver a implementação do código para descobrir o que ela faz. Se já me acusam com isso mesmo com o código sendo aberto, então mudaria nada deixar ele fechado.
  • Uma das coisas que eu gostava de open source é que as pessoas podem estudar o seu código para aprender, pois eu fiz a mesma coisa com outros projetos como por exemplo, a Mantaro. Mas nenhum dos bots que vejo que são descaradamente inspirados na Loritta são open source, então não é uma atitude recíproca das pessoas que usam a Loritta como referência.
  • Uma das maiores críticas que fazem é o rug pull de deixar open source no começo e depois trocar para source available ou closed source, assim abusando das vantagens de projetos open sources... mas para a Loritta e o SparklyPower eu praticamente não tive vantagens de deixar open source considerando que a grande parte do código da Loritta e do SparklyPower foi feito por mim, então não é como se eu tivesse abusado da "boa vontade" do espírito open source, e nenhum dos dois projetos usou "o projeto é open source!" como um motivo para usá-los.
  • Enquanto existem outros bots open source no Discord, quase nenhum do tamanho da Loritta é open source (a única exceção é o YAGPDB), e até onde eu sei não tem nenhum outro servidor de Minecraft do tamanho do SparklyPower que deixa os plugins open source.
  • Falam que ter um projeto open source de sucesso no GitHub é bom para o currículo... mas para que eu preciso de projetos no currículo se eu trabalho para mim mesmo?!

A experiência foi bem diferente com o Butterscotch, onde eu publiquei o projeto esperando nada em troca (baseando nas minhas experiências passadas) mas depois de algumas semanas já tinham pessoas que estavam gasp contribuem para o projeto. E foi aí que eu percebi o que realmente faz valer a pena um projeto ser open source.

O Butterscotch é um caso diferente, ele é essencialmente um emulador que roda jogos do GameMaker: Studio, então saber o que implementar é muito mais fácil já que normalmente se resume a "veja as funções não implementadas e faça".

Para mim é estranho isso após eu ter deixado a Loritta e o SparklyPower open source por tanto tempo, especialmente porque você vê no Reddit e no Hacker News muitas pessoas falando como é bom ter um projeto SaaS open source... mas quanto mais você pensa, você percebe que a maioria dos SaaS que eram open source acabam migrando para source available, closed source, ou fazem delayed distribution para o plano grátis. Os que não viraram são SaaS que possuem fontes de rendas diferentes, como o OpenCode (onde o harness não é o produto), ONCE (onde você só recebe o código após comprar o produto), Docker (onde a monetização vem do Docker Desktop e de CI/CD e compliances), entre outros. E é claro, você também percebe que a maioria dos SaaS não são open source.

É claro que, depois que você deixa algo open source, não dá para "desopensourcear" o que já estão lá fora, mas a questão é mais sinalizar que, daqui pra frente, o projeto não é mais open source. Eu ainda acredito no espírito open source, e essa mudança não significa que a Loritta e o SparklyPower não podem voltar a serem open source no futuro.


Muitas pessoas me perguntam se é possível fazer um bot para o Discord apenas usando um celular... então eu descobri uma maneira de rodar bots feitos em várias linguagens, como JavaScript, Python, Java, entre outros, tudo pelo seu celular!

Perfeito se você quer fazer o seu bot do jeito que bots são feitos pelo computador, como também você não precisa gastar dinheiro para manter o seu bot online... exceto o gasto com energia para deixar o seu celular ligado né rsrs.

Enquanto o vídeo mostra eu rodando um bot feito usando o discord.js pelo Termux, nada impede de você rodar bots feitos em Python, Java, ou em outras linguagens. Basta instalar o pacote necessário da linguagem no Termux, copiar os arquivos da linguagem e rodar!


Muitas pessoas querem um sistema música na Loritta para que possam escutar músicas no Discord sem que precisem adicionar outro bot... mas hoje em dia existem várias limitações e problemas que impedem a Loritta de ter um sistema de música.


Slash Commands: Muitos amam, enquanto outros odeiam e preferem comandos por texto... Mas será que as pessoas que odeiam slash commands são pessoas que usam o Discord para Android?



Se você quer crescer e melhorar o seu bot para o Discord, então você veio ao vídeo certo! Venha ver e aprender os segredos e dicas sobre criação de bots com o Criador da Loritta!

Não se esqueçam de ativar as legendas do YouTube! Enquanto o áudio está em inglês, eu legendei todo o vídeo em português, então não se preocupe se você não sabe inglês. :)

Obrigado a iara e ao resto da equipe do top.gg por terem me convidado ao Bot Developer Panel deles. :3


Aceitar imagens de estranhos não é fácil, você precisa tomar algumas providências antes de editar ela para que o seu bot não trave por falta de memória!

O vídeo foi gravado ao vivo no meu canal na Twitch (https://twitch.tv/mrpowergamerbr) para estreiar o novo ESCRITÓRIO DA FIRMA, me siga lá para acompanhar outras lives (se acabar tendo novas, né rsrs).

Se deseja ver como foi a live de hoje: https://youtu.be/o3MHhjL4rNw


Uma entrevista que o Dune fez comigo, respondendo perguntas sobre a Loritta, o que eu faço da vida, e a resposta da pergunta mais interessante de todas... Da onde será que surgiu o meu nickname?


Meu Banner para o Discord

Publicado às 02/07/2021 23:00 • #discord #programming

Em 07/06/2021 eu decidi que eu iria fazer um banner para usar no Discord, graças a datamining do cliente e como algumas pessoas da equipe do Discord já estavam usando a funcionalidade, eu já conseguia ver a resolução e como os banners ficariam nos perfis da pessoa, então ideias já começaram a serem boladas na minha cabeça para fazer um banner incrível!

Para criar a animação, em vez de eu usar After Effects ou até mesmo o Photoshop, eu decidi programar a animação em Kotlin, ou seja, cada frame é gerada usando a API de gráficos do Java! Enquanto eu nunca usei o After Effects, eu já tinha tentado usar o MAGIX Vegas para fazer o banner do SparklyPower antes, e os motivos para eu ter decidido fazer usando programação foram porque...

  • Você não tem um controle bom pela ferramenta de Track Motion no Vegas, se você mexe um pouquinho no mouse ele já mexe muito devido ao tamanho do canvas.
  • As configurações de easing de Track Motion, enquanto existem, não permitem muita customização exceto na "suavidade" dela.
  • O Vegas joga fora a qualidade das suas imagens por algum motivo, mesmo que a imagem tenha o mesmo tamanho do canvas que você deseja! O único jeito seria aumentando o tamanho da imagem antes de usar no Vegas, mas isso dá muito mais trabalho.

Então eu decidi fazer programaticamente mesmo, pelo ou menos se eu falar que um pixel deve ser de tal jeito, ele REALMENTE vai ser de tal jeito!



https://pbs.twimg.com/media/EiAqhIyWAAAgf-A?format=jpg&name=small

Eu gastei horas fazendo algo praticamente inútil.

Eu estava pensando em implementar uma VM que executa jogos feitos com o GameMaker: Studio 1. (Sabia que o ".exe" de jogos feitos pelo GM:S é uma VM? Igual como Java funciona, ele executa bytecode. E é por isso que eu consegui fazer o Droidtale, um port não oficial do Undertale para o Android)

O objetivo era conseguir rodar Undertale (e outros jogos feitos pelo GM:S) em uma VM feita em Kotlin, sendo possível portar a VM para outras plataformas (e assim portando os jogos também).