Hace unos días hablando con
Chema Alonso me topé otra vez con uno de esos pequeños tesoros que la historia de la informática guarda en un cajón.
DONKEY.BAS. Cuatro mil quinientos
bytes de
BASIC que vienen de
1981 y que, sin embargo, dan para hablar de muchas cosas. De cómo se hacía software cuando un
PC tenía
16KB de
RAM, de una de las polémicas más divertidas de la historia de
Microsoft y, sobre todo, de algo que veo todos los días en mi trabajo, que es lo fácil que es hoy modernizar y desplegar cualquier aplicación gracias a la plataforma de
Cloudflare.
Por cierto, antes de entrar en materia con
DONKEY.BAS, os recuerdo que ya os publiqué un caso parecido con la migración del mítico
Arkanoid en el artículo titulado: "
Cómo migrar Arkanoid de C++ a TypeScript con OpenCode y desplegarlo en Workers de Cloudflare".
La historia: el juego que Bill Gates escribió... y por el que le pincharon durante años
DONKEY.BAS lo escribieron en
1981 Bill Gates y
Neil Konzen para demostrar las capacidades gráficas (el flamante modo
CGA) y de sonido (el mítico
PC speaker) del
IBM PC, junto con la potencia del intérprete de
BASIC que
Microsoft había desarrollado para
IBM. Venía incluido en las primeras versiones de
PC-DOS, así que millones de personas lo tuvieron delante.
¿El juego? Sencillísimo: conduces un coche por una carretera de dos carriles y solo puedes hacer una cosa,
cambiar de carril con la barra espaciadora para esquivar a los burros que van apareciendo. Si chocas,
¡BOOM! y punto para el burro. Si lo esquivas, "
Donkey loses!" y punto para ti. No hay más objetivo. No hay final.
Y aquí viene lo
"polémico".
Que uno de los fundadores de Microsoft hubiera firmado un juego tan primitivo —con gráficos que parpadeaban y una jugabilidad de quince segundos— se convirtió con los años en una especie de chiste recurrente en la industria.
Cuando salió el
Macintosh en
1984, desde el mundo
Apple se usó
DONKEY.BAS como ejemplo de lo tosco que era el software del bando
IBM/Microsoft frente a la elegancia gráfica del
Macintosh.
Bill Gates, lejos de esconderlo, siempre lo defendió con orgullo: era una
demo técnica de lo que se podía hacer, no una obra maestra del diseño de videojuegos.
Hay un detalle que a mí me encanta y que demuestra que las prisas de 1981 eran las mismas que las de hoy: si miráis el código original, en la pantalla de título pone Version 1.1O... con una letra "O mayúscula" en lugar de un cero - tal vez por no mostrar a los usuarios el famoso 0 de las tipografías de los ordenadores con la raya cruzada que los no técnicos quizá nunca entendieron -. Usas una O en lugar de un 0 con la raya cruzada, era igual que en algunas máquinas de escribir donde en lugar de usar el 1 se hacía con la "l" minúscula.
O quizá es un typo que lleva más de cuarenta años viajando por copias y copias del fichero. Quien diga que nunca ha subido a producción con una errata, que tire la primera piedra. El código fuente original que usé como referencia está perfectamente conservado aquí:
Merece la pena abrir el
.BAS y leer esos
GOTO, esos
POKE 106,0 y esos
SOUND 37+RND*200,4. Es arqueología pura, y para los amantes del
BASIC, un placer visual.
La migración: de GOTO y POKE a HTML5, Canvas y Web Audio
Lo bonito de un código tan pequeño es que se puede entender entero y replicar su lógica con fidelidad. El programa en
BASIC original hace, en esencia, esto:
- Pinta la carretera con dos líneas verticales y una línea central discontinua que se desplaza para dar sensación de avance:
- El coche solo tiene dos posiciones X. El truco de cambiar de carril es maravillosamente simple:
- `CX = 252 - CX` (línea 1730).
- El burro aparece en un carril al azar:
- `DX = 105 + 42*INT(RND*2)` (línea 1700).
- La colisión esta en la línea 1750 con IF que dispara el BOOM! y la animación de fragmentos volando a las esquinas en las líneas 2060-2200.
- `IF CX=DX AND Y+25>=CY` (línea 1750)
- Y el sonido, esos pitidos monofónicos del PC speaker, salen de las instrucciones `SOUND`.
Para esta prueba lo reescribí desde cero en
HTML5 + CSS + JavaScript puro (Vanilla JS), sin
frameworks ni motores de juego pesados, porque la gracia era mantener el espíritu minimalista del original:
- Gráficos: con la API de Canvas, respetando la resolución y la paleta CGA (negro, cian, magenta, blanco), pero con escalado nítido (`image-rendering: pixelated`) para que se vea bien en una pantalla 4K de hoy.
- Sonido: con la Web Audio API, generando ondas cuadradas para emular el PC speaker, un pitido corto al cambiar de carril y una ráfaga aleatoria de tonos para la explosión, calcada del `SOUND 37+RND*200,4`.
- Controles: barra espaciadora para cambiar de carril y Esc para salir, tal cual el original... y, ya puestos a modernizar, soporte táctil para jugar desde el móvil.
Comenté cada bloque del
JavaScript indicando qué línea del
BASIC original estaba replicando, porque me parecía la mejor forma de honrar el código de
Gates y
Konzen: no reinventarlo, sino traducirlo.
El despliegue: de cero a producción con Cloudflare Pages en minutos
Y aquí es donde, como
Account Executive en
Cloudflare, no puedo evitar ponerme un poco pesado, porque es justo lo que me enamoró de esta plataforma. Tenía tres ficheros (
`index.html`, `style.css`, `game.js`) y quería ponerlos en
internet, con
HTTPS, en una
red global y sin montar ni un solo servidor. Pues bien:
```bash
wrangler login
wrangler pages deploy .
```
Y ya está.
Literalmente.
Wrangler (el CLI de Cloudflare) subió los ficheros, creó el proyecto y me devolvió una
URL de producción servida desde más de 330 ciudades repartidas por el mundo. Sin aprovisionar máquinas, sin configurar un balanceador, sin pelearme con certificados
TLS. El juego de
Bill Gates de
1981 corriendo en la red perimetral más grande del planeta, gratis y en
edge.
Para quien prefiera no tocar la terminal,
Cloudflare Pages también permite el despliegue por
Direct Upload: arrastras la carpeta al panel y listo. O lo conectas a tu repositorio de
Git y cada
Push despliega solo, con
Preview Deployments por cada rama para revisar cambios antes de pasarlos a producción.
¿Y qué tiene esto que ver con modernizar de verdad?
DONKEY.BAS es un juguete, claro. Pero la historia que cuenta es exactamente la misma que vivo con empresas que arrastran aplicaciones de hace veinte o treinta años: hay un
core de lógica de negocio valioso atrapado en una tecnología que ya nadie quiere mantener, y el reto no es reescribirlo todo de golpe, sino modernizar la capa de entrega y de ejecución para llevarlo donde están hoy los usuarios.
Y ahí la propuesta de
Cloudflare es potentísima, porque no se queda en servir ficheros estáticos:
- Cloudflare Workers: ejecuta tu lógica de backend en JavaScript, TypeScript, Python o Rust (vía WebAssembly) directamente en el edge, con arranques en frío de milisegundos. Olvídate de pensar en servidores o en regiones; tu código corre cerca del usuario, donde esté.
- Cloudlfare Pages + Functions: para frontends modernos con su API integrada, sin coser dos plataformas distintas.
- Almacenamiento y estado en el edge: Workers KV, D1 (SQL), R2 (objetos, sin tarifas de salida) y Durable Objects para coordinación y estado en tiempo real. Tu aplicación heredada puede ir migrando piezas a estos servicios sin un Big Bang.
- Seguridad de serie: WAF, mitigación de DDoS, *bot management* y Zero Trust delante de todo. Modernizar también es poner la seguridad por delante, no como un parche posterior.
- IA en el edge con Workers AI y AI Gateway: por si a ese DONKEY.BAS del futuro queréis ponerle un rival que conduzca solo con IA.
La clave es que puedes hacerlo incremental. Pones
Cloudflare delante de tu aplicación actual, empiezas a mover funcionalidad a
Workers poco a poco (el patrón
strangler fig de toda la vida) y, sin pararlo todo, acabas con una arquitectura distribuida, segura y rápida. Igual que yo no reescribí la lógica de
DONKEY.BAS, sino que la trasladé a una plataforma moderna.
Conclusión: cuarenta años después, el burro sigue cruzando
Me hace especial ilusión que un trozo de código de
1981, escrito por dos genios con un
IBM PC y muchísimo ingenio, pueda estar hoy en producción en una red global sin tocar un servidor. Es la mejor metáfora que se me ocurre de para qué sirve todo esto:
La tecnología cambia, pero las buenas ideas —y los buenos cores de negocio— merecen viajar bien.
Si tenéis una aplicación heredada que os da miedo tocar, hablemos. A lo mejor vuestro "
DONKEY.BAS" particular está a un
`wrangler pages deploy` de tener una segunda vida. Y si solo queréis jugar y esquivar burros como en
1981, también os entiendo perfectamente.
Puedes jugar a DONKEY.BAS en Cloudflare aquí.
Que gane el mejor conductor.