Unix es Tradición
29 de septiembre de 2022 • fjbalon
Se escribe mucho y se lee de la filosofía de Unix, la mayoría de los aquí presentes la conocemos: originada por Ken Thompson (véase De los Padres de Unix al nacimiento de las Grandes Casas), es su enfoque cultural y filosófico para el desarrollo de software de una forma minimalista y modular. No es sólo fruto de su pensamiento, es la experiencia de los principales desarrolladores del sistema operativo Unix. Los primeros desarrolladores de Unix fueron fundamento para llevar los conceptos de modularidad y reutilización a la práctica de la ingeniería de programas informáticos, lo que dio lugar a un movimiento de "herramientas de software". Con el tiempo, los principales desarrolladores de Unix (y de los programas que se ejecutaban en él) establecieron un conjunto de normas para el desarrollo de programas informáticos; estas normas llegaron a ser tan importantes e influyentes como la propia tecnología de Unix; ésto es la filosofía de Unix".
Como ya sabemos, la filosofía de Unix hace hincapié en la construcción de código simple, corto, claro, modular y extensible, que pueda ser fácilmente mantenido y reutilizado por otros desarrolladores. La filosofía de Unix favorece la componibilidad en oposición al diseño monolítico. Lo resumimos en las normas:
Que si bien diversos autores e intelectuales, como Eric S. Raymond, desarrollan más o menos, la estructura conceptual base es similar en todas. Es interesante, desde el punto de vista filosófico y doctrinal, al menos enumerar los principios que sirven de base para su desarrollo de la filosofía de Unix, como son el Principio de modularidad, Principio de claridad, Principio de composición, Principio de separación, Principio de simplicidad, Principio de parsimonia, Principio de transparencia, Principio de robustez, Principio de representación, Principio de mínima sorpresa, Principio de silencio, Principio de reparación, Principio de economía, Principio de generación, Principio de optimización, Principio de diversidad y Principio de extensibilidad. Tengo intención de extenderlos en algún artículo futuro.
Por su parte, Mike Gancarz, del equipo de X11, ofrece una visión más poética de la filosofía, que inicia con que lo pequeño, liviano y simple es la belleza, es lo hermoso, armónico y estético. Del hacer que cada programa haga una cosa bien y sea construido un prototipo lo antes posible. De la superioridad de la portabilidad sobre la eficiencia, de la primacía del texto y del almacenamiento de datos usando archivos de texto plano, del uso del aprovechamiento de software, de la primacía de scripts de shell para el aprovechamiento y la portabilidad, de evitar las interfaces de usuario cautivas, de hacer de cada programa un filtro. El enfoque, somo se ve, es más estético que funcional, casi.
La primera regla podemos entenderla como una exhortación de naturaleza minimalista, en la que todo lo que pueda ser borrado debe, de hecho, ser borrado. La función del programa debe ser la mínima exigida, sin añadidos que acabarían redundando en funciones similares con otros programas; es decir, los programas deben ser modulares, tener una sola función. El código debe ser autoexplicativo y servir como propia documentación, fácil de leer y con bajos niveles de abstracción. Un makefile (a nivel conceptual) debe estar presente para construir el software.
Si bien es cierto que diseñar software simple y elegante es mucho más difícil que dejar que características ad hoc o demasiado ambiciosas oscurezcan el código con el tiempo, es un precio a sufragar para lograr la fiabilidad y mantenibilidad. Además, el propio minimalismo y la pretensión de simplicidad resulta en objetivos razonables y alcanzables: las ideas ingeniosas son simples, el software ingenioso es simple. La simplicidad es el corazón de la filosofía Unix. Cuantas más líneas de código haya eliminado, más progreso habrá hecho. A medida que el número de líneas de código en su software se reduce, cuanto más experto se haya convertido, suck less. Un ejemplo perfecto de la aplicación de dicha filosofia en la actualidad es la filosofía y el manifiesto suckless.
Sin embargo, como vengo a defender aquí, Unix no es sólo una pila tecnológica o un conjunto de software, lo sabemos; pero tampoco es una filosofía de cómo hacer software. Unix contiene bienes internos a la técnica y a la filosofía, eso está claro; pero no sólo se enfoca en un hecho práctico (cómo hacer software), sino que habita gremialmente en su forma: belleza y dignidad del texto plano, del poder del programa compuesto de otros más pequeños, o sea modularización; de la calma que ofrece un sistema donde todo es un archivo, la hospitalidad y precisión de los manuales técnicos, etcétera...
El software propietario te ofrece una habitación amueblada, es cierto, pero con los muebles anclados al suelo. Puedes usarlo, claro, pero no puedes inspeccionar las paredes, repasar la fontanería y las tuberías -pipes-, no puedes aprender el oficio de los constructores ni, incluso, convertirte en el propietario que mantiene la habitación para otros huéspedes. Unix es el primero que revirtió la relación huésped-anfitrión: la tradición de Unix te hospeda, te da una shell, unos compiladores, editores, demonios, sistemas de archivos, protocolos e incluso una filosofía, pero precisamente por ser gremial te permite dar la vuelta a la costura, parchear, recompilar, configurar, documentar, componer, enseñar y mantener. Puede convertirte en uno de los anfitriones.
Como apuntaría el filósofo escocés Alasdair MacIntyre1, una tradición no es un montón de artefactos heredados, es un argumento y una práctica en curso, un cómo hacer las cosas y hacerlas; uno puede ser iniciado en la práctica, puede contribuir a la práctica incluso con alteraciones a lo que la tradición ha dispuesto; es un ente vivo.
Unix, de tal forma, parece más una civilización que un programa informático, un iniciado puede actuar como consumidor, en efecto; pero la hospitalidad de Unix te otorga un estatus aristocrático: puedes entrar, inspeccionar, aprender, alterar y ser propietario. Esta hospitalidad no la ofrece el software como mercancia o producto, es evidente. Finalizo citando a Eric S. Raymond:
1 Alasdair MacIntyre (1929 - 2025) defiende las tradiciones como prácticas vivas, encarnadas socialmente -no artefactos estáticos- sostenidos por comunidades de bienes internos, excelencias propias de la práctica generacional de las mismas. Así transmiten virtudes a través del aprendizaje y llevan en el tiempo un argumento continuo de estándares y propósitos.