- Mojang anunció que eliminará por completo la ofuscación en Minecraft: Java Edition
- La ofuscación era una práctica de seguridad común en la industria de los videojuegos, pero limitaba la accesibilidad del código y el desarrollo de mods
- Hasta ahora, los nombres de clases, funciones y variables estaban todos ofuscados, lo que hacía que el desarrollo de mods y la depuración fueran complejos; ahora se ofrecerán builds con los nombres originales del código
- La ofuscación desaparecerá desde la primera snapshot después de la actualización Mounts of Mayhem, y por un tiempo se distribuirán en paralelo versiones ofuscadas y no ofuscadas para mantener la compatibilidad con las herramientas existentes
- Se espera que este cambio facilite mucho más el desarrollo de mods, el análisis de código, la interpretación de logs de fallos y la corrección de bugs
Historia de la ofuscación en el código de Minecraft
- Java Edition ha usado ofuscación para proteger el código fuente desde sus primeros lanzamientos
- Los nombres de clases, funciones y variables dentro del código se convertían intencionalmente en cadenas sin significado y no se publicaban tal cual
- Por eso, los modders tenían que analizar manualmente el rol de cada parte del código
- Desde 2019, Mojang había intentado aliviar esto publicando archivos de mapeo de ofuscación (obfuscation mappings)
- Proporcionaban una lista de mapeo que vinculaba los nombres ofuscados con sus nombres originales con significado
- Gracias a eso, a los modders les resultaba más fácil entender la estructura del código, pero seguía existiendo un paso intermedio
La decisión de eliminar la ofuscación
- Mojang decidió eliminar la ofuscación en sí para quitar por completo ese paso intermedio
- Se aplicará desde la primera snapshot posterior al lanzamiento completo de “Mounts of Mayhem”
- En adelante, todas las versiones incluirán por defecto código con los nombres originales de variables, campos y clases
- Los desarrolladores y modders podrán acceder y modificar el código de forma directa
- Esto se interpreta como una medida para aumentar la apertura de Java Edition y reducir las barreras del ecosistema de mods
Etapa de transición para modders
- Mojang preparó una transición considerando los problemas de compatibilidad con las herramientas existentes
- Desde la próxima snapshot, también se distribuirá una versión experimental no ofuscada (experimental release)
- Los modders podrán probar con anticipación sus herramientas y flujos de trabajo con la nueva estructura del código
- Después de la transición completa, la versión ofuscada actual dejará de ofrecerse
- La primera versión totalmente no ofuscada será la primera snapshot después del lanzamiento de Mounts of Mayhem
Objetivo del cambio
- Mojang afirmó que “el modding es parte central de Java Edition” y explicó que la ofuscación frenaba su crecimiento
- Será posible crear, actualizar y depurar mods más rápido, sin pasar por procesos complejos de descifrado del código
- La mejor legibilidad de los logs de fallos también mejorará la velocidad para resolver problemas
- También se espera que se simplifiquen la colaboración entre modders y el proceso de aprendizaje
Licencias y lineamientos legales
- Este cambio no afecta el EULA ni las Usage Guidelines
- Los creadores de Minecraft y de mods deberán seguir cumpliendo esas reglas
- Cada archivo
jar incluirá un archivo LICENSE con enlace directo al EULA
- Cambios futuros:
- Se eliminará de la versión
.json la información de mapeo de ofuscación
- Tanto el cliente como el servidor se ofrecerán en archivos jar no ofuscados
- Cada
jar incluirá un nuevo archivo LICENSE
Próxima dirección
- Mojang describió esto como una “transición hacia un futuro más transparente” y planea recopilar activamente comentarios de la comunidad
- La eliminación de la ofuscación representa uno de los cambios más abiertos en el entorno de desarrollo en la historia de Minecraft Java Edition,
con la expectativa de acelerar el crecimiento del ecosistema de mods y ampliar su valor educativo
1 comentarios
Opiniones de Hacker News
Sorprende que Minecraft, siendo un juego con una comunidad de mods tan fuerte, haya tenido desarrolladores trabajando a partir de binarios Java descompilados y ofuscados
Es impresionante la dedicación de quienes pasaron más de 10 años quitando y reaplicando ofuscación mientras mejoraban las herramientas
Era impactante verlo cambiar caracteres uno por uno mirando hexadecimal, como un hacker de Matrix
Aunque Java siempre fue fácil de descompilar, así que la verdadera barrera no era la ofuscación sino la complejidad de la estructura orientada a objetos
Ya no hacía falta que la comunidad los creara por su cuenta como antes
Bastaba con conocer la estructura de la VM y el concepto de despacho de objetos
La comunidad temprana de modding de Minecraft era realmente divertida, y fue una de las experiencias de programación más memorables que he tenido
Pero me sorprendió enterarme de que la mayor parte del ecosistema se construyó mediante ingeniería inversa
Juegos como Minecraft, Roblox, Geometry Dash y Trackmania son casos de éxito impulsados por la fuerza de la comunidad
Si el motor es cerrado o desarrollar es difícil, cuesta mucho crecer, como pasó con Vision Pro o el metaverso
Tiene que ser fácil para desarrolladores aficionados y usuarios pequeños participar, para que se forme una comunidad
Pero al final lo importante es que el juego en sí sea bueno
Cuando la comunidad crece, una parte de ella naturalmente empieza a hacer mods
Por ejemplo, Richard Burns Rally no fue diseñado pensando en mods, pero los fans terminaron agregando autos, pistas e incluso funciones en línea
Algo similar pasa con el motor voxel Luanti
En 2006 podías ejecutar al instante miles de juegos multijugador 3D gratis, con destrucción de construcciones y deformación de terreno
Para la época era revolucionario, y esa accesibilidad tan simple fue lo que terminó haciéndolo dominar el mercado infantil
Desde la alfa ya ofrecía una experiencia de un jugador excelente, con un equilibrio perfecto entre supervivencia y creatividad
Ya en esa época generaba millones de dólares en ingresos
Casi nadie quiere ponerse un visor de VR caro
Unity, Unreal y Godot tienen buen soporte para VR
El problema es que hay pocos usuarios para el costo de desarrollo
Hay que considerar accesibilidad, UX, prevención del mareo y muchas otras cosas, así que desarrollar sale mucho más caro
Por ejemplo, incluso mostrar subtítulos en un entorno 6DoF ya es difícil
Los obfuscation mappings que Mojang publicó en 2019 eran listas para desofuscar nombres
Gracias a eso los modders ya no tenían que adivinar todo el código, pero queda la duda de por qué publicaron solo la mitad
Me pregunto si algún día publicarán Minecraft Java Edition como open source en GitHub
Parece de esos productos que seguirían vendiéndose en cualquier plataforma, como Skyrim
Los archivos del juego también se pueden descargar gratis desde servidores de Microsoft, así que no parece que abrir el código les causara pérdidas
Archivo de la página web de esa época
Los recursos artísticos seguirían protegidos por derechos de autor
Últimamente prefiero trabajar en Luanti
Puedes recrear con mods una experiencia casi igual a la de Minecraft, y también hay modos de juego como VoxeLibre
Además, el código fuente de la mayoría de los mods escritos en Lua también está disponible
En especial, Zoonami me parece interesante porque ofrece una experiencia tipo Pokémon
Minecraft ya es fácil de piratear, así que abrir el código probablemente no causaría mucho daño
La mayoría mantiene cuentas legítimas para usar los servidores de autenticación de Mojang
Incluso es tan grande que podrían volverlo open source imponiendo una condición de no uso comercial
La ofuscación agresiva de Proguard complica mucho entender el código porque cambia los nombres de las clases por otros enrevesados e incluso aplica inlining
En ese sentido, esta medida es un gran avance
¡Es una buena noticia! Se abren nuevas posibilidades para la comunidad de modding de Minecraft
Los mapeos creados por la comunidad tenían licencias libres, pero los de Microsoft no
Eso podría haber sido una especie de trampa
Si de verdad quisieran hacerlo más fácil, lo mejor sería publicar el código fuente con una licencia que permita mods