Articulo de referencia

Filosofía Unix

Ken Thompson y Dennis Ritchie , principales defensores de la filosofía Unix. La filosofía Unix , creada por Ken Thompson , es un conjunto de normas culturales y enfoques filosóf...

Ken Thompson y Dennis Ritchie , principales defensores de la filosofía Unix.

La filosofía Unix , creada por Ken Thompson , es un conjunto de normas culturales y enfoques filosóficos para el desarrollo de software minimalista y modular . Se basa en la experiencia de los principales desarrolladores del sistema operativo Unix . Los primeros desarrolladores de Unix fueron fundamentales para introducir los conceptos de modularidad y reutilización en la práctica de la ingeniería de software, dando origen al movimiento de las " 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 culturales para el desarrollo de software; estas normas llegaron a ser tan importantes e influyentes como la propia tecnología Unix, y se conocen como la "filosofía Unix".

La filosofía Unix hace hincapié en la creación de código simple, compacto, claro, modular y extensible que pueda ser mantenido y reutilizado fácilmente por desarrolladores distintos a sus creadores. La filosofía Unix favorece la componibilidad en contraposición al diseño monolítico .

Origen

En su artículo sobre Unix de 1974, Ritchie y Thompson citan las siguientes consideraciones de diseño: [ 1 ]

En 1978, Doug McIlroy documentó un conjunto de principios que resumían el "estilo característico" que había surgido entre los usuarios y desarrolladores del sistema Unix: [ 2 ] [ 3 ]

  1. Haz que cada programa haga bien una sola cosa. Para realizar una nueva tarea, empieza desde cero en lugar de complicar los programas antiguos añadiéndoles nuevas "funciones".
  2. Se espera que la salida de cada programa se convierta en la entrada de otro programa aún desconocido. No sature la salida con información superflua. Evite los formatos de entrada estrictamente binarios o en columnas. No insista en la entrada interactiva.
  3. Diseña y desarrolla software, incluso sistemas operativos, para probarlos cuanto antes, idealmente en cuestión de semanas. No dudes en descartar las partes defectuosas y reconstruirlas.
  4. Utilice herramientas en lugar de ayuda no especializada para aligerar una tarea de programación, incluso si tiene que desviarse del camino para construir las herramientas y prever que desechará algunas de ellas después de haber terminado de usarlas.

Más tarde, en 1994, Peter H. Salus la resumió con el nombre explícito de "La filosofía Unix" , atribuyéndola a McIlroy: [ 4 ] [ 3 ]

  • Escribe programas que hagan una sola cosa y la hagan bien.
  • Escribir programas que funcionen conjuntamente.
  • Escribe programas para manejar flujos de texto, ya que esa es una interfaz universal.

Regiones

El entorno de programación UNIX

En el prefacio del libro de 1984, The UNIX Programming Environment , Brian Kernighan y Rob Pike , ambos de Bell Labs , ofrecen una breve descripción del diseño de Unix y la filosofía de Unix: [ 5 ]

Rob Pike , coautor de El entorno de programación UNIX

Aunque el sistema UNIX introduce numerosos programas y técnicas innovadoras, ningún programa o idea por sí solo garantiza su éxito. Su eficacia reside, en cambio, en su enfoque de programación, en su filosofía de uso del ordenador. Si bien esta filosofía no puede resumirse en una sola frase, su esencia radica en la idea de que el poder de un sistema reside más en las relaciones entre los programas que en los programas mismos. Muchos programas UNIX realizan tareas bastante sencillas de forma aislada, pero, combinados con otros programas, se convierten en herramientas generales y útiles.

Los autores escriben además que su objetivo para este libro es "comunicar la filosofía de programación UNIX". [ 5 ]

Diseño de programas en el entorno UNIX

Brian Kernighan ha escrito extensamente sobre la filosofía de Unix.

En octubre de 1984, Brian Kernighan y Rob Pike publicaron un artículo titulado Diseño de programas en el entorno UNIX . En este artículo, critican la acumulación de opciones y características de programas que se encuentran en algunos sistemas Unix más nuevos, como 4.2BSD y System V , y explican la filosofía de Unix de las herramientas de software, cada una de las cuales realiza una función general: [ 6 ]

Gran parte de la potencia del sistema operativo UNIX proviene de un estilo de diseño de programas que facilita su uso y, lo que es más importante, su combinación con otros programas. Este estilo se conoce como el uso de herramientas de software y depende más de cómo los programas se integran en el entorno de programación y cómo pueden utilizarse con otros programas que de su diseño interno. [...] Este estilo se basaba en el uso de herramientas : utilizar programas de forma individual o combinada para realizar una tarea, en lugar de hacerlo manualmente, mediante subsistemas monolíticos autosuficientes o programas específicos de un solo uso.

Los autores contrastan herramientas de Unix como cat con conjuntos de programas más amplios utilizados por otros sistemas. [ 6 ]

El diseño del comando ` cat` es típico de la mayoría de los programas UNIX: implementa una función simple pero general que puede usarse en muchas aplicaciones diferentes (incluidas muchas no previstas por el autor original). Otros comandos se utilizan para otras funciones. Por ejemplo, existen comandos separados para tareas del sistema de archivos, como renombrar archivos, eliminarlos o conocer su tamaño. Otros sistemas, en cambio, agrupan estas funciones en un único comando de "sistema de archivos" con una estructura interna y un lenguaje de comandos propios. (El programa de copia de archivos PIP [ 7 ] que se encuentra en sistemas operativos como CP/M o RSX-11 es un ejemplo). Este enfoque no es necesariamente mejor ni peor, pero sin duda va en contra de la filosofía UNIX.

Doug McIlroy sobre la programación en Unix

Doug McIlroy (izquierda) con Dennis Ritchie

McIlroy , entonces director del Centro de Investigación de Ciencias de la Computación de Bell Labs e inventor de la tubería Unix , [ 8 ] resumió la filosofía Unix de la siguiente manera: [ 3 ]

Esta es la filosofía de Unix: escribir programas que hagan una sola cosa y la hagan bien. Escribir programas que trabajen juntos. Escribir programas que manejen flujos de texto , porque esa es una interfaz universal.

Más allá de estas afirmaciones, también ha enfatizado la simplicidad y el minimalismo en la programación Unix: [ 3 ]

La noción de "complejidades intrincadas y hermosas" es casi un oxímoron. Los programadores de Unix compiten entre sí por el reconocimiento de "simplicidad y belleza"  , un punto implícito en estas reglas, pero que vale la pena dejar claro.

Por el contrario, McIlroy ha criticado el Linux moderno por tener un software inflado , comentando que "los admiradores devotos han alimentado las bondades de Linux hasta un estado desalentador de obesidad ". [ 9 ] Contrasta esto con el enfoque anterior adoptado en Bell Labs al desarrollar y revisar Research Unix : [ 10 ]

Todo era pequeño... y me da mucha pena por Linux cuando veo lo pequeño que es. [...] La página del manual , que antes sí que era una página de manual , ahora es un pequeño volumen con mil opciones... Solíamos sentarnos en la sala de Unix y decir: "¿Qué podemos quitar? ¿Por qué existe esta opción?". A menudo se debe a alguna deficiencia en el diseño básico  ; no se dio con el punto de diseño correcto. En lugar de añadir una opción, piensa en qué te obligó a añadirla.

Haz una sola cosa y hazla bien.

Como afirmó McIlroy, y como es generalmente aceptado en la comunidad Unix, siempre se ha esperado que los programas Unix sigan el concepto de DOTADIW, o "Haz una cosa y hazla bien". Si bien existen pocas fuentes sobre el acrónimo DOTADIW en Internet, se debate ampliamente durante el desarrollo y el empaquetado de nuevos sistemas operativos, especialmente en la comunidad Linux.

Patrick Volkerding , el líder del proyecto Slackware Linux , invocó este principio de diseño en una crítica a la arquitectura systemd , afirmando que "intentar controlar servicios, sockets, dispositivos, montajes, etc., todo dentro de un demonio va en contra del concepto Unix de hacer una cosa y hacerla bien". [ 11 ]

Las 17 reglas de Unix de Eric Raymond

En su libro El arte de la programación Unix, publicado por primera vez en 2003, [ 12 ] Eric S. Raymond (defensor del código abierto y programador) resume la filosofía de Unix como " Mantenlo simple, estúpido ". [ 13 ] Proporciona una serie de reglas de diseño: [ 3 ]

  • Construir programas modulares
  • Escribir programas legibles
  • Utilice composición
  • Mecanismos separados de las políticas
  • Escribe programas sencillos
  • Escribir pequeños programas
  • Escribir programas transparentes
  • Escribir programas robustos
  • Complique los datos cuando sea necesario, no el programa.
  • Partir del conocimiento que esperan los usuarios potenciales
  • Evite la salida innecesaria
  • Escribe programas que fallen de una manera que sea fácil de diagnosticar.
  • Valorar el tiempo del desarrollador por encima del tiempo de la máquina.
  • Escribe programas abstractos que generen código en lugar de escribirlo manualmente.
  • Prototipar el software antes de pulirlo.
  • Redactar programas flexibles y abiertos.
  • Hacer que el programa y los protocolos sean extensibles.

Mike Gancarz: La filosofía UNIX

En 1994, Mike Gancarz , miembro del Grupo de Ingeniería Unix (UEG) de Digital Equipment Corporation , publicó *The UNIX Philosophy*, basado en su propio desarrollo de la adaptación de Unix ( Ultrix ) en DEC durante la década de 1980 y en conversaciones con sus colegas. También es miembro del equipo de desarrollo del Sistema X Window y autor de * Ultrix Window Manager * (uwm).

El libro se centra en la adaptación de UNIX a diferentes ordenadores durante las guerras de Unix de la década de 1980 y describe su filosofía de que la portabilidad debería ser más importante que la eficiencia del uso de interfaces no estándar para dispositivos de hardware y gráficos.

Los nueve "principios" básicos que él afirma que son importantes son:

  1. Lo pequeño es hermoso.
  2. Haz que cada programa haga bien una sola cosa.
  3. Construye un prototipo lo antes posible.
  4. Prioriza la portabilidad sobre la eficiencia.
  5. Almacenar datos en archivos de texto plano .
  6. Aprovecha el software a tu favor.
  7. Utilice scripts de shell para aumentar el apalancamiento y la portabilidad.
  8. Evite las interfaces de usuario cautivas.
  9. Convierta cada programa en un filtro .

"Lo peor es mejor"

Richard P. Gabriel sugiere que una ventaja clave de Unix fue que incorporaba una filosofía de diseño que él denominó "lo peor es mejor", en la que la simplicidad tanto de la interfaz como de la implementación es más importante que cualquier otro atributo del sistema, incluyendo la corrección, la consistencia y la completitud. Gabriel argumenta que este estilo de diseño tiene ventajas evolutivas clave, aunque cuestiona la calidad de algunos resultados.

Por ejemplo, en sus inicios, Unix utilizaba un núcleo monolítico (lo que significa que los procesos de usuario ejecutaban las llamadas al sistema del núcleo directamente en la pila de usuario). Si se enviaba una señal a un proceso mientras este se encontraba bloqueado en una operación de E/S de larga duración en el núcleo, el manejo de la situación resultaba incierto. El manejador de señales no podía ejecutarse cuando el proceso estaba en modo núcleo, con datos confidenciales del núcleo en la pila.

Crítica

En un artículo de 1981 titulado "La verdad sobre Unix: la interfaz de usuario es horrible " [ 14 ] publicado en Datamation , Don Norman criticó la filosofía de diseño de Unix por su falta de atención a la interfaz de usuario. Escribiendo desde su formación en ciencias cognitivas y desde la perspectiva de la filosofía de ingeniería cognitiva vigente en ese momento , [ 15 ] se centró en cómo los usuarios finales comprenden y forman un modelo cognitivo personal de los sistemas , o, en el caso de Unix, no logran comprenderlos, con el resultado de que los errores desastrosos (como perder una hora de trabajo) son demasiado fáciles.

En el podcast On the Metal, el desarrollador de videojuegos Jonathan Blow criticó la filosofía UNIX por considerarla obsoleta. [ 16 ] Argumentó que la integración de herramientas modulares da como resultado programas muy ineficientes. Afirma que la filosofía UNIX adolece de problemas similares a los de los microservicios : sin una supervisión general, las grandes arquitecturas terminan siendo ineficaces e ineficientes.

Véase también

Notas

  1. Dennis Ritchie ; Ken Thompson (1974), "El sistema de tiempo compartido UNIX" (PDF) , Communications of the ACM , 17 (7): 365–375 , doi : 10.1145/361011.361061 , S2CID 53235982 
  2. MD McIlroy ; EN Pinson; BA Tague (8 de julio de 1978). "Sistema de tiempo compartido Unix: Prólogo" . The Bell System Technical Journal . Bell Laboratories: 1902–1903 .
  3. 1 2 3 4 5 Eric S. Raymond (2004). "Fundamentos de la filosofía Unix" . El arte de la programación Unix . Addison-Wesley Professional (publicado el 23 de septiembre de 2003). ISBN 0-13-142901-9. Consultado el 1 de noviembre de 2016 .
  4. Peter H. Salus (1994). Un cuarto de siglo de UNIX . Addison-Wesley . págs. 52–53 . ISBN  978-0-20-154777-1.
  5. 1 2 Kernighan, Brian W. Pike, Rob. El entorno de programación UNIX. 1984. viii
  6. 1 2 Rob Pike; Brian W. Kernighan (octubre de 1984). "Diseño de programas en el entorno UNIX" (PDF) . Revista técnica de AT&T Bell Laboratories . 63 (8). parte 2. Recuperado el 15 de diciembre de 2022 .
  7. "Manual del sistema operativo CP/M" (PDF) . 1983.
  8. Dennis Ritchie (1984), "La evolución del sistema de tiempo compartido UNIX" (PDF) , AT&T Bell Laboratories Technical Journal , 63 (8): 1577–1593 , doi : 10.1002/j.1538-7305.1984.tb00054.x
  9. Douglas McIlroy. "Discurso en la ceremonia de entrega del Premio Japón a Dennis Ritchie, 19 de mayo de 2011, Murray Hill, NJ" (PDF) . Consultado el 19 de junio de 2014 .
  10. Bill McGonigle. "Ancestros de Linux : cómo empezó la diversión (2005)" . Consultado el 19 de junio de 2014 . 
  11. "Entrevista con Patrick Volkerding de Slackware" . linuxquestions.org . 7 de junio de 2012. Consultado el 24 de octubre de 2015 .
  12. Raymond, Eric (19 de septiembre de 2003). El arte de la programación Unix . Addison-Wesley. ISBN 0-13-142901-9. Consultado el 09-02-2009 .
  13. Raymond, Eric (19 de septiembre de 2003). «La filosofía de Unix en una lección» . El arte de la programación en Unix . Addison-Wesley. ISBN 0-13-142901-9. Consultado el 09-02-2009 .
  14. Norman, Don (1981). "La verdad sobre Unix: la interfaz de usuario es horrible" (PDF) . Datamation . Vol. 27, n.º 12.  
  15. "Una historia oral de Unix" . Historia de la ciencia de la Universidad de Princeton .
  16. "En el podcast de metal: Jonathan Blow" .

Referencias

  • El entorno de programación Unix archivado el 21/10/2011 en la Wayback Machine por Brian Kernighan y Rob Pike , 1984
  • Diseño de programas en el entorno UNIX : el artículo de Pike y Kernighan que precedió al libro.
  • Notas sobre programación en C , Rob Pike, 21 de septiembre de 1989
  • Un cuarto de siglo de Unix , Peter H. Salus, Addison-Wesley, 31 de mayo de 1994 ( ISBN) 0-201-54777-5)
  • Filosofía archivada el 12 de mayo de 2008 en Wayback Machine — de The Art of Unix Programming , Eric S. Raymond, Addison-Wesley, 17 de septiembre de 2003 ( ISBN)  0-13-142901-9)
  • Informe final del proyecto de diseño del núcleo Multics, realizado por MD Schroeder, DD Clark, JH Saltzer y DH Wells, 1977.
  • La filosofía UNIX , Mike Gancarz, ISBN 1-55558-123-4
  • Fundamentos de la filosofía Unix – por Catb.org
  • La filosofía de Unix: una breve introducción – por el Proyecto de Información de Linux (LINFO)
  • Por qué la filosofía Unix sigue siendo importante
  • Un puesto de comida rápida adopta la "filosofía UNIX".