Buena parte de la informática moderna descansa sobre una idea que Ken Thompson llevó a la práctica a finales de los años sesenta: un sistema potente no tiene por qué ser complicado si sus elementos más sencillos saben trabajar juntos. Esa idea dio forma a Unix, atravesó el lenguaje B, preparó el camino para C y reapareció décadas después en Go.
Thompson no seguía un único programa teórico. Construía herramientas para resolver problemas concretos: utilizar un ordenador pequeño de forma interactiva, escribir un sistema con muy poca memoria, procesar texto o compilar rápidamente programas grandes. La continuidad reside en su método: prefería mecanismos reducidos, comprensibles y combinables frente a arquitecturas que pretendieran anticiparlo todo.
La simplicidad no hacía rudimentarios sus proyectos. Desplazaba la complejidad: en vez de imponerla a cada componente, la organizaba en las relaciones entre ellos.
Recuperar lo que Multics había hecho posible
Kenneth Lane Thompson nació en Nueva Orleans en 1943. Estudió ingeniería eléctrica e informática en la Universidad de California en Berkeley, donde obtuvo sus títulos en 1965 y 1966. Después se incorporó a Bell Labs, un laboratorio que permitía investigar a largo plazo.
Allí participó en Multics, un sistema operativo de tiempo compartido desarrollado con el MIT y General Electric. Debía permitir que varias personas utilizaran un ordenador simultáneamente en un entorno interactivo. Su ambición era enorme, pero también lo eran su complejidad y su coste. Bell Labs abandonó el proyecto en 1969.
Thompson no quería reproducir Multics a menor escala. Quería conservar lo que hacía agradable programar en él: un sistema de archivos coherente, un terminal interactivo y la posibilidad de crear herramientas directamente. Un miniordenador PDP-7, mucho más limitado, le brindó la oportunidad.
Su juego de simulación espacial Space Travel actuó como detonante. Trasladarlo al PDP-7 lo llevó a construir las herramientas necesarias para usar realmente la máquina. En 1969 desarrolló un sistema de archivos, un intérprete de órdenes y las primeras funciones de lo que sería Unix. Dennis Ritchie se incorporó pronto al trabajo.
Cómo las limitaciones del PDP-7 favorecieron la simplicidad
El PDP-7 disponía de poca memoria y de un entorno de desarrollo elemental. Cada abstracción debía justificar su coste. Thompson eligió programas pequeños y especializados en lugar de una única herramienta cargada de funciones.
Esta organización produjo una propiedad decisiva: la salida de un programa podía convertirse en la entrada de otro. Una herramienta seleccionaba texto, otra lo ordenaba y una tercera lo contaba. La potencia ya no residía solo en cada orden, sino en la posibilidad de combinarlas.
Las tuberías dieron después una forma directa al principio. Doug McIlroy defendió la idea en Bell Labs; Thompson la implementó en Unix en 1973. El carácter | conectaba la salida de una orden con la entrada de la siguiente y convertía una línea de comandos en un pequeño programa compuesto por elementos reutilizables.
Esta filosofía sigue influyendo en los sistemas tipo Unix, las cadenas de tratamiento de datos y las herramientas de desarrollo. También creó el contexto en el que se hizo necesario un lenguaje más adecuado.
Del lenguaje B al nacimiento de C
Las primeras versiones de Unix estaban escritas en ensamblador y estrechamente ligadas al PDP-7, y después al PDP-11. Esa cercanía ofrecía control, pero dificultaba trasladar el sistema a otro procesador.
Thompson diseñó B, una adaptación de BCPL lo bastante pequeña para los ordenadores disponibles. Eliminaba parte del detalle del ensamblador sin abandonar un modelo mínimo. Thompson lo utilizó para herramientas de Unix y escribió el compilador de B en el propio B, técnica conocida como autoalojamiento.
B también mostró sus límites. Su modelo de datos, adaptado a máquinas organizadas en palabras de memoria, encajaba mal con los bytes direccionables del PDP-11. Dennis Ritchie transformó gradualmente el lenguaje: añadió tipos y mejoró la representación de datos hasta llegar a C a principios de los setenta.
La atribución debe ser precisa. Thompson creó B y contribuyó al contexto técnico en el que apareció C; Ritchie fue el principal diseñador de C. Juntos reescribieron la mayor parte de Unix en C. El sistema se volvió mucho más fácil de trasladar, y el lenguaje se difundió con él por universidades e industria.
La biografía de Dennis Ritchie continúa la historia desde el diseño de C, mientras que la historia de C sigue su adopción más allá de Unix.
De las expresiones regulares a las herramientas de programación
La influencia de Thompson supera el núcleo de Unix y el lenguaje B. Desarrolló el editor ed, cuyas órdenes contribuyeron a la cultura de herramientas Unix. Su trabajo sobre búsqueda de patrones también ayudó a difundir las expresiones regulares en la informática práctica.
Una expresión regular puede describir «una secuencia de cifras» sin enumerar todas las secuencias posibles. Hoy aparecen en editores, lenguajes, buscadores y herramientas de análisis de registros.
Thompson trabajó asimismo en Plan 9, un sistema experimental de Bell Labs que extendía ideas de Unix a un entorno distribuido. Con Rob Pike diseñó UTF-8 en 1992 para representar caracteres Unicode manteniendo la compatibilidad con el texto ASCII. UTF-8 acabaría convirtiéndose en la codificación dominante de la Web.
Estas contribuciones parecen distantes, pero responden a la misma pregunta: ¿cómo definir una representación lo bastante sencilla para funcionar en todas partes sin impedir usos más amplios?
Lo que revela «Reflections on Trusting Trust»
Thompson y Ritchie recibieron el Premio Turing en 1983 por Unix y su influencia. En la conferencia asociada, Reflections on Trusting Trust, Thompson describió un compilador alterado para insertar en secreto una puerta trasera al compilar un programa de inicio de sesión.
El compilador también podía reconocer su propio código fuente y reproducir la alteración en su sucesor. Inspeccionar la aplicación y el código fuente visible del compilador ya no bastaría para descubrir el ataque.
La demostración expuso un límite fundamental de la confianza: revisar el código fuente solo ofrece una garantía completa si también es fiable la cadena de herramientas que lo transforma. Las compilaciones reproducibles, la seguridad de la cadena de suministro y la verificación de compiladores prolongan este problema.
Por qué Thompson volvió a diseñar un lenguaje con Go
Thompson se incorporó a Google en 2006 y encontró otra escala de frustración: programas enormes, compilaciones lentas y concurrencia difícil de controlar. El hardware tenía varios núcleos y los servicios ocupaban muchas máquinas, mientras los lenguajes existentes imponían a menudo herramientas y abstracciones complejas.
En septiembre de 2007, Thompson, Rob Pike y Robert Griesemer empezaron a definir Go. Buscaron compilaciones rápidas, formato estándar, memoria automática y mecanismos de concurrencia integrados. Su sintaxis deliberadamente reducida debía mantener legible el código de equipos grandes.
Go no reproduce C ni sustituye Unix. Traslada un método a otro contexto. B debía caber en una máquina pequeña; Go debía ayudar a equipos que trabajaban en repositorios inmensos. En ambos casos, la simplicidad responde a un problema de escala.
Go se publicó como software libre en noviembre de 2009. Después evolucionó colectivamente y encontró un lugar destacado en servicios de red, herramientas de infraestructura y sistemas distribuidos, conectando la informática interactiva con la era del cloud.
Un legado basado en las relaciones entre herramientas
Unix sigue presente en Linux, macOS, los BSD, Android y gran parte de los servidores. C continúa siendo esencial y sirvió de base a muchos lenguajes, incluido el C++ de Bjarne Stroustrup. UTF-8 transporta textos en las escrituras del mundo y Go equipa programas de red y cloud.
Sin embargo, una lista de inventos ocultaría su vínculo. Thompson diseña componentes que hacen pocas cosas, pero cuyas interfaces permiten combinaciones imprevistas. No elimina la complejidad: evita encerrarla en un bloque imposible de entender o sustituir.
La contribución duradera de Ken Thompson es, por tanto, una forma de construir tanto como un conjunto de programas. Un sistema es más adaptable cuando sus piezas son inteligibles y más potente cuando pueden combinarse.
Cronología
- 1943: Kenneth Lane Thompson nace en Nueva Orleans.
- 1965–1966: obtiene sus títulos en la Universidad de California en Berkeley.
- 1966: entra en Bell Labs y participa en Multics.
- 1969: crea la primera versión de Unix en un PDP-7.
- 1969–1970: desarrolla B a partir de BCPL.
- 1973: se añaden las tuberías a Unix y el sistema se reescribe en C con Dennis Ritchie.
- Años 1970: desarrolla herramientas como
ed y difunde las expresiones regulares.
- 1983: comparte el Premio Turing con Ritchie y presenta Reflections on Trusting Trust.
- 1992: diseña UTF-8 con Rob Pike.
- 2006: se incorpora a Google.
- 2007: comienza a diseñar Go con Robert Griesemer y Rob Pike.
- 2009: Go se publica como proyecto de código abierto.
- Hoy: Unix, UTF-8 y Go prolongan su búsqueda de sistemas sencillos y combinables.
Preguntas frecuentes
¿Creó Ken Thompson Unix él solo?
Thompson escribió la primera versión en 1969 y dirigió su desarrollo inicial. Dennis Ritchie se sumó pronto y después participaron otros investigadores de Bell Labs. Unix nació de la iniciativa de Thompson y se convirtió en una obra colectiva.
¿En qué se diferenciaron las aportaciones de Thompson y Ritchie?
Thompson creó el primer Unix y B. Ritchie fue el principal diseñador de C y desempeñó un papel central al reescribir Unix en ese lenguaje. Sus aportaciones distintas hicieron conjuntamente que Unix fuera portable y C ampliamente útil.
¿Sigue utilizándose B?
No de forma habitual. Su importancia es histórica: es el antecesor directo de C y muestra cómo las limitaciones de los primeros miniordenadores orientaron el diseño de lenguajes de sistemas.
¿Inventó Thompson las tuberías de Unix?
Doug McIlroy formuló y defendió la conexión de programas mediante flujos. Thompson realizó la implementación decisiva en Unix en 1973. La innovación une la propuesta de McIlroy con la realización de Thompson.
¿Qué papel tuvo Thompson en la creación de Go?
Fue uno de sus tres diseñadores iniciales junto con Robert Griesemer y Rob Pike. Desde 2007 definieron juntos los objetivos y las primeras características; muchos colaboradores se incorporaron después.
¿Por qué sigue siendo importante su trabajo?
Los sistemas tipo Unix sostienen servidores, ordenadores y teléfonos. UTF-8 transporta la mayor parte del texto web, y Go se utiliza ampliamente en infraestructuras de red y cloud. Los tres hacen manejable la complejidad mediante componentes simples.