Unix GC Remastered: 50 años de código, un solo recolector de basura
Un programador ha logrado que un recolector de basura (GC) conservador funcione en el Unix V1 de 1970, el sistema operativo original de Ken Thompson y Dennis Ritchie. El código, escrito en C moderno, se compila con el compilador original de Ritchie y gestiona memoria en máquinas con tan solo 8 KB de RAM.
Por qué importa
El Unix original no tenía gestión automática de memoria. Los programadores asignaban y liberaban memoria a mano, con bugs que hoy causarían vulnerabilidades de seguridad. Este experimento demuestra que incluso en los entornos más restrictivos —sin hardware de protección de memoria, sin llamadas al sistema avanzadas— un GC puede funcionar.
Pero lo relevante no es solo la hazaña técnica. Es la prueba de que los conceptos de gestión de recursos pueden aplicarse a cualquier escala. Si un recolector de basura cabe en 8 KB, la excusa de "mi proyecto es demasiado pequeño para eso" se desvanece.
Qué dice el contexto
- El Unix V1 original fue lanzado en 1970, antes de que existiera el lenguaje C estándar. El compilador usado es el de Ritchie de 1972, que no soporta tipos de datos modernos ni punteros genéricos.
- El GC implementado es un "conservative garbage collector" (Boehm-Demers-Weiser) adaptado: escanea la pila y el heap en busca de valores que parezcan punteros, sin necesidad de información de tipos.
- El sistema objetivo es un PDP-11/20 con 8 KB de RAM. El GC añade apenas 2 KB de código, dejando 6 KB para el programa y los datos.
- El autor, Mohand A. Chérir, documentó el proceso en su blog, incluyendo parches para el compilador y el kernel de Unix V1.
- El proyecto es completamente funcional: programas en C pueden asignar memoria con malloc() y olvidarse de free(), mientras el GC recupera bloques no utilizados.
Lo que puedes hacer
- Prueba el código fuente. El repositorio incluye instrucciones para emular un PDP-11 con SIMH y compilar el Unix V1 parcheado. Es una forma tangible de entender cómo funciona la memoria a bajo nivel.
- Reflexiona sobre tus propias herramientas. Si un GC cabe en 8 KB, ¿qué excusas tienes para no automatizar tareas repetitivas en tu flujo de trabajo? La simplicidad no es falta de sofisticación.
- Estudia el diseño del GC conservador. Entender cómo escanea la memoria sin metadatos te dará una perspectiva única sobre la gestión de recursos, aplicable incluso en lenguajes modernos como C o Rust.
En una frase
“
Un recolector de basura de 2 KB logra que el Unix de 1970 gestione su propia memoria, demostrando que la automatización de recursos no es cuestión de hardware, sino de ingenio.