- A Mojang anunciou que vai remover completamente a ofuscação do Minecraft: Java Edition
- A ofuscação era uma prática de segurança comum na indústria de jogos, mas limitava a acessibilidade ao código e o desenvolvimento de mods
- Antes, nomes de classes, funções e variáveis eram todos ofuscados, o que tornava o desenvolvimento de mods e a depuração mais complexos; agora, serão fornecidas builds com os nomes originais do código
- A ofuscação desaparecerá a partir do primeiro snapshot após a atualização Mounts of Mayhem, e por algum tempo serão distribuídas versões ofuscadas e não ofuscadas em paralelo para manter a compatibilidade com as ferramentas existentes
- Com essa mudança, espera-se que o desenvolvimento de mods, a análise de código, a interpretação de logs de crash e a correção de bugs fiquem bem mais fáceis
História da ofuscação de código no Minecraft
- O Java Edition usa ofuscação para proteger o código-fonte desde os primeiros dias de lançamento
- Os nomes de classes, funções e variáveis dentro do código eram intencionalmente convertidos em strings sem significado e não eram expostos publicamente
- Por causa disso, os modders precisavam analisar manualmente o papel de cada parte do código
- Desde 2019, a Mojang vinha tentando amenizar isso ao publicar arquivos de mapeamento de ofuscação (obfuscation mappings)
- Era fornecida uma lista de mapeamento que ligava os nomes ofuscados aos nomes originais e significativos
- Isso ajudou os modders a entender melhor a estrutura do código, mas ainda existia uma etapa intermediária
Decisão de remover a ofuscação
- A Mojang decidiu remover a própria ofuscação, eliminando completamente a etapa intermediária
- A mudança será aplicada a partir do primeiro snapshot após o lançamento completo de “Mounts of Mayhem”
- Daqui para frente, todas as versões trarão por padrão código com os nomes originais de variáveis, campos, classes etc.
- Desenvolvedores e modders passarão a ter acesso e possibilidade de modificação mais diretos do código
- A medida é vista como uma forma de aumentar a abertura do Java Edition e reduzir as barreiras do ecossistema de mods
Etapa de transição para modders
- A Mojang preparou um período de transição levando em conta problemas de compatibilidade com ferramentas existentes
- A partir do próximo snapshot, também será distribuída uma versão experimental não ofuscada (experimental release)
- Os modders poderão testar previamente suas ferramentas e fluxos de trabalho com a nova estrutura de código
- Depois da migração completa, a versão ofuscada atual será descontinuada
- A primeira versão totalmente não ofuscada será o primeiro snapshot após o lançamento de Mounts of Mayhem
Objetivo da mudança
- A Mojang afirmou que “modding é parte central do Java Edition” e explicou que a ofuscação vinha atrapalhando esse crescimento
- Será possível criar, atualizar e depurar mods mais rapidamente, sem a necessidade de decifrar código complexo
- A melhoria na legibilidade dos logs de crash também deve acelerar a resolução de problemas
- Espera-se ainda simplificar a colaboração entre modders e o processo de aprendizado
Licença e diretrizes legais
- Essa mudança não afeta o EULA nem as Usage Guidelines
- Criadores de Minecraft e de mods ainda precisam seguir essas regras
- Cada arquivo jar incluirá um arquivo LICENSE com link direto para o EULA
- Mudanças futuras:
- Remoção das informações de mapeamento de ofuscação no arquivo de versão
.json
- Arquivos jar de cliente e servidor fornecidos sem ofuscação
- Inclusão de um novo arquivo LICENSE em cada jar
Próximos passos
- A Mojang descreveu a mudança como uma “transição para um futuro mais transparente” e pretende coletar ativamente o feedback da comunidade
- O fim da ofuscação é uma das mudanças mais abertas no ambiente de desenvolvimento da história do Minecraft Java Edition,
com expectativa de acelerar o crescimento do ecossistema de mods e ampliar seu valor educacional
1 comentários
Comentários do Hacker News
É impressionante que Minecraft tenha uma comunidade de mods tão forte e, ainda assim, os desenvolvedores tenham trabalhado decompilando binários Java ofuscados
A dedicação deles, evoluindo as ferramentas por mais de 10 anos enquanto repetiam o processo de desofuscação e reofuscação, é admirável
Foi marcante vê-lo alterando um caractere por vez olhando para o hexadecimal, como um hacker de Matrix
Mas Java sempre foi fácil de decompilar, então a verdadeira barreira não era a ofuscação, e sim a complexidade da estrutura orientada a objetos
Já não era mais necessário que a comunidade criasse tudo por conta própria como antes
Bastava conhecer a estrutura da VM e o conceito de despacho de objetos
A comunidade de modding do Minecraft no começo era realmente muito divertida, e foi uma das experiências de programação mais memoráveis que já tive
Mas foi surpreendente descobrir que a maior parte do ecossistema foi construída por engenharia reversa
Jogos como Minecraft, Roblox, Geometry Dash e Trackmania são casos de sucesso movidos pela força da comunidade
Se a engine for fechada ou difícil de desenvolver, é difícil crescer como o Vision Pro ou o metaverso tentaram fazer
É preciso que desenvolvedores hobbyistas e pequenos usuários consigam participar com facilidade para que a comunidade se forme
Mas no fim o mais importante é o próprio fato de ser um “bom jogo”
Quando a comunidade cresce, uma parte dela naturalmente começa a fazer mods
Por exemplo, Richard Burns Rally não foi pensado originalmente para modding, mas os fãs adicionaram carros, pistas e até funcionalidades online
Fenômeno parecido também aparece na engine voxel Luanti
Em 2006, já era possível iniciar instantaneamente milhares de jogos 3D multiplayer de graça, com destruição de construções e alteração de terreno
Na época isso era revolucionário, e essa acessibilidade simples acabou dominando o mercado infantil
Desde a versão alfa, a experiência single-player era excelente, e o equilíbrio entre sobrevivência e criatividade era perfeito
Já naquela época ele gerava milhões de dólares em receita
Quase ninguém quer usar um headset de VR caro
Unity, Unreal e Godot têm bom suporte a VR
O problema é que há poucos usuários em relação ao custo de desenvolvimento
Há muitas coisas a considerar, como acessibilidade, UX e prevenção de enjoo, então o desenvolvimento fica muito mais caro
Por exemplo, até exibir legendas em um ambiente 6DoF já é difícil
Os obfuscation mappings que a Mojang publicou em 2019 eram uma lista para desfazer os nomes ofuscados
Isso ajudou os modders a não precisarem mais adivinhar todo o código, mas fica a dúvida de por que só divulgaram metade
Fico curioso se um dia vão liberar o Minecraft Java Edition como open source no GitHub
Parece o tipo de jogo que continuaria vendendo em qualquer plataforma, como Skyrim
Os arquivos do jogo também podem ser baixados gratuitamente dos servidores da Microsoft, então não parece que abrir o código causaria prejuízo
Arquivo da página da época
Os assets artísticos continuariam protegidos por direitos autorais
Hoje em dia, eu prefiro trabalhar no Luanti
Dá para reproduzir quase a mesma experiência de Minecraft com mods, e também há mods de jogo como VoxeLibre
O código-fonte dos mods escritos em Lua também costuma estar aberto
Em especial, Zoonami é interessante por oferecer uma experiência parecida com Pokémon
Minecraft já é fácil de piratear, então abrir o código provavelmente causaria pouquíssimo prejuízo
A maioria mantém uma conta oficial para usar os servidores de autenticação da Mojang
É um projeto tão grande que até uma abertura de código com restrição a uso não comercial pareceria viável
A ofuscação agressiva do Proguard dificulta bastante entender o código, trocando nomes de classes por nomes complexos e até fazendo inlining
Nesse sentido, esta medida é um grande avanço
Ótima notícia! Isso abre novas possibilidades para a comunidade de modding de Minecraft
Os mappings criados pela comunidade tinham licença livre, mas os da Microsoft não
Isso talvez fosse uma espécie de armadilha
Se quisessem realmente facilitar ainda mais, o ideal seria publicar o código-fonte com uma licença que permitisse modding