ScummVM (Scumm Virtual Machine, máquina virtual de Scumm en español) es un programa informático que permite ejecutar las aventuras gráficas creadas originalmente para el motor SCUMM de LucasArts. ScummVM también soporta una variedad de juegos que no utilizan el motor SCUMM, realizados por compañías como Revolution Software o Adventure Soft.
Como su nombre indica, ScummVM ejecuta los juegos a través de una máquina virtual, usando solamente sus archivos de datos, de manera que reemplaza los ejecutables con los que el juego fue originalmente lanzado. Esto permite ejecutar los juegos en sistemas para los cuales nunca fueron diseñados, como por ejemplo pocketPCs, PalmOS, Nintendo DS, PSP, Linux, Xbox o teléfonos celulares.
ScummVM se encuentra bajo la licencia GNU GPL por lo que es software libre.
DesarrolloLa máquina virtual o emulador de ScummVM, es un proyecto que por muchos de sus colaboradores ha sido descrito como una experiencia de aprendizaje y fascinación, no solo debido a que deben aprender nuevas técnicas de programación e ingeniería inversa para poder colaborar en el mismo, sino también porque deben estudiar de los programadores que ellos están intentando emular (los de LucasArts) e imaginarse las formas en que sus metodologías y técnicas originales pueden ser mejoradas.
La ScummVM comenzó principalmente a ser desarrollada en lenguaje C, encapsulado dentro de unas pocas clases de C++, pero luego al madurar el proyecto y al unirse nuevos programadores que trajeron nuevas perspectivas al mismo (como James Brown), el proyecto se migró a C++. Esta migración se llevó a cabo básicamente porque querían agregar soporte al programa de diversas plataformas y juegos nuevos, y la herencia de objetos de C++ permitía que el código fuese más fácilmente entendido por otros desarrolladores. Aunque C++ fue el lenguaje escogido para su implementación, el uso de otros lenguajes durante su desarrollo fue crucial, por ejemplo Perl fue usado varias veces para llevar a cabo prototipos y probar varias funcionalidades; también se procedieron a usar herramientas escritas en otros lenguajes como Delphi, desarrolladas por personas cercanas al proyecto, cuya única funcionalidad era recolectar información del funcionamiento interno de la Scumm para que, en conjunto con la información obtenida del desensamblador, permitieran realizar las labores de ingeniería inversa a la misma.
De igual forma, código perteneciente a otros proyectos de software libre fue utilizado para la elaboración de la ScummVM, como por ejemplo la librería Simple DirectMedia Layer (SDL), el motor avanzado de escalas e interpolación 2x (Kreed's 2xSaI), el códec Ogg Vorbis y la librería de decodificación de audio MAD, principalmente para proveer compresión de audio con la idea de hacer más portables los mismos y puedan ser ejecutados en dispositivos móviles como las iPAQ o teléfonos celulares.
Otra cosa importante es que la Scumm original de LucasArts posee aproximadamente 8 versiones cada una de las cuales tiene sus propios caprichos, modificaciones, singularidades y en ocasiones fue modificada para sólo un juego. Cada juego posee un intérprete diferente de la Scumm, por lo que uno de los problemas con los que se encontró la ScummVM fue cómo soportar estas múltiples versiones del intérprete en un único árbol de código fuente.
Estructura de decisión del proyectoEl proyecto ScummVM tiene propiedades de una meritocracia, es decir mientras más logros tenga una persona, más peso tiene su opinión. Por ejemplo alguien que ha escrito dos librerías y mantiene un port (versión específica para una plataforma) tiene una opinión de más peso que alguien que nunca ha codificado una línea de código y se limita a reportar errores.
En el proyecto no existe una autoridad que controle los procesos que se están desarrollando ni planifique de manera estricta lo que va a suceder. El liderazgo y la toma de decisiones posee las características de un dictador benevolente descentralizado en un ambiente de bazar, según afirma Max Horn alias fingolfin (uno de los dictadores benevolentes del proyecto), donde todo el trabajo se divide en subequipos que deciden cómo hacer las cosas a su manera, pero algunas veces se les indica como quisieran los líderes del proyecto que se hicieran las cosas o qué no les gusta de algo. Los nuevos parches enviados son revisados y forzados a cumplir las pautas de codificación del proyecto antes de aceptarlos.
En cuanto a la comunicación entre los desarrolladores del proyecto, su principal método es el canal de IRC #scummvm en irc.freenode.net, donde discuten todo el trabajo que se está llevando a cabo. Sin embargo, para las decisiones importantes envían un borrador de propuesta al tópico -devel, y probablemente se crea un wiki para la propuesta, y entonces todas las partes interesadas llevan a cabo comentarios y dan su opiniones. Un ejemplo de esto es cuando se propuso cambiar de CVS a SVN: recolectaron argumentos entre los desarrolladores en pro y en contra de ambos, para tomar posteriormente una decisión con respecto a cuál usarían.