Sobre 0 A.D. Código Abierto ¿Por qué? Razones Organización Código Reusabilidad Comparaciones Como empezar Publicado el: 10 Julio 2009 ¿Qué es 0 A.D.? 0 A.D. es un juego libre, multiplataforma, activamente desarrollado, en 3D, basado en hechos históricos, de estrategia en tiempo real. ¿Qué estáis haciendo? Migrando de un desarrollo de código cerrado a uno abierto: haciendo el código disponible bajo la licencia GPL y el contenido multimedia bajo CC-BY-SA, y animando a contribuidores a participar. Hemos estado trabajando con A.D. en nuestro tiempo libre hace años, y ahora queremos mostraros qué hemos logrado y hacer facilitar que la gente colabore. 0 A.D. es un proyecto complejo y misterioso. Se ha trabajado mucho, pero queda mucho que hacer. No estamos publicando algo jugable – tendréis que esperar mucho si eso es lo que esperáis. Hay bastantes características importantes aún no implementadas y errores por corregir. Lanzamos esto como proyecto en desarrollo pre-alpha, orientado a desarrolladores que puedan estar interesados en algo parecido, con la esperanza de compartir recursos con una comunidad que, si la cual no existiese, el desarrollo no seguiría en proceso. Esta es una etapa experimental, y no sabemos que funcionará mejor, así que estamos moviéndonos con cuidado y adaptarnos basándonos en la experiencia. Este documento describe nuestros planes actuales; ¡opiniones son bien recibidas! Contáctanos en los foros, o en #wfg en QuakeNet IRC. ¿Por qué interesarse? Creemos que es una buena oportunidad de proporcionar características únicas al juego. Quizá quieras ayudar a que el juego exista. Quizá quieras aprender la experiencia de trabajar en un proyecto de software complejo, o particularmente un juego. Hay un amplio rango de áreas envueltas: gráficos y audio, Inteligencia Artificial e Interfaz de Usuario, manejo de datos, programación del modo de juego, juego en red, y demás. Lo principal está hecho, y algo ya está muy estable, pero hay mucho que indagar en los detalles y trabajar en diversos componentes. Quizá quieras que el juego funcione mejor en tu plataforma preferida. Quizá quieras mostrarnos lo estúpidos que somos y como escribir código que esté mucho mejor. (¡No somos perfectos!) Quizá quieras usar partes de nuestro código o arte en tu propio proyecto. Quizá quieras utilizar nuestro juego para una clase de desarrollo de juegos práctica. O quizá tengas otras razones. ¿Por qué hacéis esto? Hemos estado trabajando de una forma u otra en el juego desde 2001. Llevamos un largo trayecto desde entonces, pero haciendo este tipo de juego es realmente difícil. Los miembros del equipo originales eran principalmente estudiantes, y ahora han avanzado en la vida y no pueden dedicar mucho tiempo al proyecto. Atraer nuevos desarrolladores es difícil y consume tiempo – poca gente tiene el tiempo y la habilidad de aprender a trabajar sobre nuestro actual código y hacer contribuciones significantes. Así que queremos hacer las barreras menores, haciendo mas sencillo a la gente que eche un vistazo a nuestro proyecto si le interesa, con la esperanza de que piensen que lo es. Además, tenemos algunas ideas, herramientas y código que creemos son bastante útiles y nos gustaría compartirlas. Deberíamos limpiarlas un poco y documentarlas para que sean mas útiles para otras personas, pero hacer el código disponible es la primera etapa. Y, particularmente en Linux, el código abierto simplifica muchas cosas en la distribución o depuración, haciendo las cosas mas sencillas para ambos. Hasta ahora, el acceso al proyecto ha sido limitado a los miembros 'oficiales' de nuestro grupo, aunque el intento siempre ha sido de producir un juego no-comercial y la membresía siempre ha sido bastante abierta. El concepto de código abierto no era interesante hace unos años, pero los tiempos han cambiado y ahora parece la manera natural de desarrollar nuestro proyecto. ¿Cómo será organizado el desarrollo? Como apertura de este proyecto, necesitamos respetar a la comunidad proviniendo toda información, comunicación y soporte posible, pudiéndoos beneficiar así del proyecto (esperando que contribuyáis y nos beneficiéis, por supuesto), balanzado junto nuestro deseo de que el juego sea completado a un alto estándar y algunas restricciones de nuestra pasada organización. En el pasado, todos los desarrolladores han sido parte del 'equipo' oficial: ahora cualquiera puede ingresar, teniendo una pequeña entrevista sobre IRC para conocerlos mejor, y si parece que tienen tiempo, energía y habilidad para contribuir con algún uso serán nombrados miembros. Vamos a mantener el núcleo del grupo de desarrolladores mediante métodos de comunicación privada – no queremos arriesgarnos a destruir el equipo que hemos logrado. Mantendremos el objetivo a una visión de diseño particular, y no queremos que varíe mucho de eso – preferimos no añadir (y tener que mantener) características que no sean parte de nuestro objetivo. Liberamos el arte y los datos de dos de las seis civilizaciones del juego, pero no aquellas que están incompletas, hasta que sean usables. Aparte de esas restricciones, estamos abriendo el acceso del servidor de control de fuente (Subversion), y el sistema de el sistema de documentación y seguimiento de problemas (Trac), y mudando nuestras discusiones técnicas a un foro abierto. Cualquiera puede descargar, compilar y usar la última versión del juego. Nuestro proceso inicial para las contribuciones será muy básico: Si haces alguna modificación, deberías hacer un parche y enviárnoslo, para que lo revisemos y quizá sugerir cambios o unirlo en SVN. El licenciamiento de las contribuciones es una pregunta abierta. Por un lado, aceptando código GPL aseguraría a los contribuidores que no vamos a usar de manera injusta su trabajo. Por otro lado nos gustaría mantener nuestras opciones de solo aceptar código licenciado bajo BSD, quizá para producir una edición especial enlazada con un sistema de detección de trampas para desalentar un 'hack' en los mapas multijugador el cual sería trivial de añadir a un juego de código abierto, o enlazar con sistemas propietarios de contenido digital para una distribución mas amplia. La solución ideal no está clara, so estamos interesados en discutirlo. ¿Cómo es el código? Hay aproximadamente 150.000 lineas de código C++ para el motor de juego, y otras 25.000 para las utilidades de edición. El 'scripting' del juego usará JavaScript. Hemos construido sobre librerías de bajo nivel (OpenGL, OpenAL, ENet <...>), no sobre un motor de juego existente (como OGRE). El código no es extremamente limpio, ni modular, ni bien escrito. Ha sido escrito por una gran variedad de programadores, y está lejos de una base "completa". Queremos continuar limpiando las cosas como parte del proceso normal de desarrollo. No estamos en contra de reescribir subsistemas enteros si esa es la manera mas eficaz de complacer nuestros requerimientos. Pero es muy solida en diversas áreas. ¿Qué código es reusable? La mayor parte de nuestro código es especifico al juego, y no muy útil fuera de él, pero algunas partes quizá sean interesantes a algunos desarrolladores trabajando en otros proyectos. Ejemplos: Librerías de bajo nivel que proveen soporte multiplataforma para el manejo de recursos (carga de archivos, texturas y sombras GL, <...>, utilidades de 'debug' (reporte de errores, rastreo de memoria), temporizadores, IO asíncronos, ... Conversor de modelos COLLADA con animación esquelética a un formato simple y amigable al juego. Sistemas de caché de binarios XML, para carga rápida de recursos. Herramientas de compilación automatizadas usando Amazon EC2. Aburrido código matemático para matrices, vectores, cuaterniones, etc. ¿Cómo se compara a otros juegos? Estamos bien informados sobre otros juegos RTS de código abierto. Glest ha llegado a un estado 'estable' y está basado en un mundo medieval/fantástico, con estilo de juego y gráficos menos complejos, pero con oponentes con IA (de lo que 0 A.D. carece actualmente). ORTS es un marco de desarrollo enfatizando la IA a un juego jugable. Sprint es otro motor de juego RTS que parece diseñado para un estilo de juego similar a Total Annihilation. 0 A.D. intenta diferenciarse proviniendo un nuevo estilo de juego, detallados gráficos y un precisa historia tras él. ¿Cómo empezar? Ojea la guía 'Getting Started' para encontrar mas información sobre el juego, foros de discusión, instrucciones para compilar y correr el juego, y enlaces para mas detalles.