Unix: un sistema operativo sienta nuevos estándares
El desarrollo de Unix se cuenta sin lugar a dudas entre los grandes hitos de la historia de la informática. El sistema operativo introdujo conceptos fundamentales de la tecnología de la información como la estructura jerárquica de los sistemas de archivos, pero también sirvió como punto de partida para el desarrollo de otros sistemas, como los sistemas operativos propietarios de Apple macOs y iOS o el proyecto open source Linux, que a su vez ha dado pie al desarrollo de otros sistemas como Ubuntu, Debian o Android, el sistema operativo para dispositivos móviles. ¿Cómo se convirtió Unix en una de las aplicaciones más influyentes de la administración informática y por qué el equipo que lo desarrolló tuvo que plasmar sus primeras ideas en notas y pizarras?
Historia de Unix: todo comienza en Multics
Corría 1965 cuando un equipo de trabajo compuesto por empleados del MIT (Massachusetts Institute of Technology), de la General Electric y de los Laboratorios Bell (Bell Labs) de AT&T –desde 2016 incluida en el departamento de investigación y desarrollo de Nokia– presentó su idea de un nuevo sistema operativo en la Fall Joint Computer Conference (FJCC) en Las Vegas, EE.UU. Bautizado como Multiplexed Information and Computing Service (Multics), con este nuevo SO se perseguían unos principios completamente nuevos, dando especial relevancia al concepto del time sharing (tiempo compartido). Multics debía convertirse, así, en uno de los primeros sistemas que permitieran a varios usuarios trabajar simultáneamente en un ordenador. Esto sería posible compartiendo el tiempo de procesamiento de la CPU.
Para llevarlo a cabo, este grupo de trabajo necesitaba un ordenador que cumpliera una serie de requisitos. Por un lado, debía ostentar un juego de instrucciones bien estructurado que permitiera utilizar el lenguaje de programación PL/I de IBM para su desarrollo, tal como se había previsto; por el otro, debía soportar el futuro uso multiusuario y trabajar de forma asíncrona para que las pérdidas de rendimiento en la gestión de la memoria se mantuvieran lo más bajas posible. Esto llevó al equipo a decantarse por el GE-635 y más tarde por el GE-645 de General Electric. El desarrollo se llevó a cabo en el sistema multiusuario CTSS, que ya estaba operativo y había sido lanzado por el MIT a comienzos de la década de los sesenta. Sin embargo, los retrasos en el desarrollo del compilador PL/I, las estrecheces económicas, algunas diferencias internas y la presión creciente desde el exterior llevaron finalmente a los Laboratorios Bell a retirarse del proyecto en 1969.
Multics se convierte en Unix
Desarrollado en el MIT, cuando en 1970 el consorcio Honeywell International Inc compra la compañía General Electric, Multics pasa a distribuirse comercialmente en máquinas Honeywell-6180 hasta 1986. Pero a Ken Thompson, que en aquel momento era uno de los informáticos de los escindidos Laboratorios Bell, no le abandonaba la idea de un sistema multiusuario, de modo que, junto a Dennis Ritchie y un modesto equipo de AT&T, comienza a planificar un sistema propio basado en los principios de Multics. La búsqueda del equipamiento, sin embargo, se reveló al principio bastante difícil. Al oponerse los Laboratorios Bell a la compra del modelo de ordenador adecuado, los desarrolladores no tuvieron más remedio que anotar sus ideas y los avances en su sistema de archivos a papel y lápiz.
Finalmente, el proyecto consiguió un miniordenador PDP-7 de la empresa Digital Equipment Corporation (DEC). Con el tamaño de “solo” un armario ropero, este sistema informático funcionaba con el sistema operativo GECOS (General Electric Comprehensive Operating System), que a partir de entonces funcionó como plataforma de desarrollo. De su trabajo enseguida nacieron herramientas de software de tanto valor como un intérprete de comandos (sh), un editor (ed) y el sistema de archivos que ya existía en papel, aunque al principio aún en ensamblador, un lenguaje de programación simplificado. Como, a diferencia de Multics, el nuevo sistema operativo solo permitía el acceso a dos usuarios ejecutando un proceso cada uno al mismo tiempo, el equipo se inspiró en aquel para bautizarlo como Unics –la limitación de la longitud de los nombres en GECOS hizo el resto, convirtiéndose finalmente en Unix.
Unix obtiene su propio lenguaje de programación
Tras escribir Unix y otros programas elementales con el lenguaje ensamblador, el equipo de los Laboratorios Bell se dispuso a sustituir este lenguaje por una variante menos compleja. Sin embargo, la idea de desarrollar un compilador para el lenguaje IBM vigente se descartó al poco tiempo y, en lugar de ello, se comenzó a trabajar en un lenguaje nuevo muy orientado a PL/I, el lenguaje de Multics, y a BCPL (Basic Combined Programming Language) desarrollado en el MIT. Esto lleva a Ritchie y a su equipo a reescribir algunas de las herramientas de sistema en este lenguaje imperativo hasta que en 1970 obtienen un nuevo PDP-11 que les obliga a realizar otro giro de perspectiva: la nueva arquitectura de sistema no estaba, como la del PDP-7 y el lenguaje de programación B, orientada a palabras, sino a bytes.
Durante los dos años siguientes, los Laboratorios Bell desarrollaron el lenguaje C, que se convertiría en un memorable sucesor cuya sintaxis, entre otras cualidades, se haya presente en diversos lenguajes de programación modernos como la extensión C++, Java, JavaScript, PHP o Perl. Cuando en 1973 el lenguaje alcanzó la madurez suficiente, los desarrolladores comenzaron a escribir el núcleo completo de Unix en C, publicando el resultado a mediados de 1970. Como en aquel momento AT&T no podía comercializar software en su calidad de monopolista del sector de las telecomunicaciones bajo control estatal, la empresa puso Unix (entretanto en su versión 6 y funcionando como sistema multiusuario que permitía varios procesos en paralelo) a disposición de las universidades interesadas de forma gratuita junto a un compilador en C que permitía usar el sistema en casi todas las plataformas.
Poco exigente y open source: Unix conquista a los programadores
Con la concesión del software Unix a instituciones educativas comienza la marcha triunfal del nuevo sistema operativo, aunque al principio como un juguete para el gremio informático. Los procesos de trabajo cotidianos que se ejecutaban en los ordenadores mainframes de IBM y en máquinas PDP seguían basándose en los sistemas nativos RSX-11, RT-11 o IST, pero para los desarrolladores el valor del código fuente del kernel y de las diversas aplicaciones no residía solamente en su efecto didáctico. Las escasas exigencias de hardware y la comodidad de Unix invitaban a experimentar y a seguir desarrollando, siendo en la Universidad de California en Berkeley, donde Thompson había estudiado, el lugar en el que esto tuvo más resonancia. El hecho de que Thompson obtuviera una cátedra como profesor invitado en el recién creado departamento de informática en 1976 también desempeñó un papel decisivo.
Fue entonces cuando dos antiguos estudiantes de la Berkeley, Bill Joy y Chuck Haley, mejoraron, entre otras cosas, el sistema Pascal desarrollado por Thompson y programaron con ex, el predecesor de vi (que aún hoy forma parte de las instalaciones estándar de los sistemas similares a Unix), un editor de texto completamente nuevo. En 1977 y bajo la supervisión de Joy, aparece una variante modificada de Unix que contenía todas las mejoras y los cambios que se habían llevado a cabo hasta el momento: la Berkeley Software Distribution (BSD), como se llamó esta variante, que más adelante introduciría el protocolo de red TCP/IP en la familia Unix y por primera vez se correspondía con los principios de un sistema operativo libre (gracias a su propia licencia BSD), está considerada desde entonces como una de las variaciones más importantes de Unix.
Los años 80: comercialización y “guerras Unix”
En los años siguientes siguen apareciendo otras variaciones del sistema operativo, aunque el factor financiero comienza también a crecer en relevancia. Así, en 1979, Microsoft adquiere una licencia Unix V7 con el fin, entre otras cosas, de desarrollar portabilidades para procesadores Intel y Motorola. Solo un año después la compañía publica el software Xenix, que se esperaba que se convirtiera en el sistema operativo estándar para PC, pero que presentaba altos requisitos de hardware. Finalmente, Microsoft cedió su desarrollo al fabricante de software SCO (Santa Cruz Operation) para poder concentrarse en OS/2 y el desarrollo de MS-DOS.
Recién fundada su propia empresa, Sun Microsystems, Bill Joy se suma a la competición en 1982 con SunOs, un sistema propietario basado en BSD que se convertiría en el predecesor de Solaris y que estaba pensado específicamente para utilizarse en servidores y estaciones de trabajo.
Pero la verdadera guerra por el favor de los seguidores de Unix tuvo lugar entre AT&T, que entretanto ya había conseguido el permiso para comercializarlo, y la Universidad de Berkeley, que con BSD y el apoyo de un gran número de programadores, contaba con la ventaja de aportar innovaciones de gran valor. AT&T intentó primero conquistar el mercado con System III (1981) y, en especial, con el optimizado System V (1983), ambos basados en Unix V7, mientras que Berkeley publicó en paralelo 4.2BSD, para el cual se emitieron más de mil licencias en 18 meses. Con ello demostró superar en popularidad a System V, el cual, además de ser de pago, no contenía el Fast File System (FFS) ni soportaba redes (gracias al TCP/IP integrado) como sí hacía la variante de Berkeley.
Con el cuarto lanzamiento de System V en 1988, AT&T añade estas y otras características de BSD, de Xenix y de SunOs, lo que llevó a muchos usuarios a cambiar de bando.
Unix entra en el entorno de servidor gracias al pingüino
Mientras que los diversos sistemas Unix se disputaban el favor de la comunidad, Apple y Microsoft se enzarzaron en una competición dentro del sector del ordenador personal y más adelante también del entorno de servidor. Al tiempo que Microsoft se hacía con la carrera por el PC doméstico, con Linux aparece en 1991 un sistema basado en principios Unix que en los próximos años conquistaría el universo de los servidores. Con el paquete que formaban el software libre GNU y un kernel también de licencia libre, su desarrollador, Linus Torvalds, lograba dos cosas: cumplir su sueño de crear un sistema operativo open source capaz de competir con los demás y tocar la fibra sensible de su tiempo.
Numerosas variaciones Unix-Linux como Debian, CentOS, Red Hat o Ubuntu, también denominados derivados, se utilizan aún hoy como software de sistema para todo tipo de servidores. Ubuntu en especial goza de una creciente popularidad en los PC domésticos. Sin embargo, Linux no es ni mucho menos el único sucesor que hoy sigue teniendo relevancia en el universo informático: desde MacOS X1 10.0 y Mac OS X Server 1.0, el sistema operativo de Apple utiliza Darwin como plataforma, una variante de BSD. Precisamente, la variante Unix de la Berkeley cuenta con numerosos derivados como FreeBSD, OpenBSD o NetBSD.
Con iOS, que comparte la misma base de sistema que macOS, y Android, basado en el kernel de Linux, los dos sistemas operativos para terminales móviles más extendidos se cuentan también entre los miembros de la familia Unix.
¿Qué es Unix?
Muchos de los aspectos que caracterizan a Unix fueron en su momento completas innovaciones que no solo tendrían un gran impacto en el desarrollo de sistemas y distribuciones similares a Unix, sino que fueron incluso adoptados por sus competidores Apple y Microsoft en sus respectivos sistemas operativos. Fueron especialmente las siguientes características con las que Ritchie, Thompson y su equipo convirtieron a Unix en el precursor de los sistemas operativos modernos:
Sistema de archivos jerárquico y universal
Un componente elemental de Unix fue desde el principio el sistema de ficheros organizado jerárquicamente que permite al usuario ordenar los archivos en carpetas, subordinando tantos subdirectorios como sean necesarios al directorio raíz, definido por la barra “/”. Siguiendo el principio fundamental “Everything is a file” (“todo es un archivo”), Unix también representa a las unidades de disco, los discos duros, las terminales o los equipos externos como archivos de dispositivo en el sistema de archivos. Algunos derivados, como Linux, definen incluso a los procesos y a sus propiedades como archivos en el sistema virtual de ficheros procfs.
Multitarea
En el éxito de Unix también tuvo un impacto decisivo la posibilidad de ejecutar varios procesos o programas al mismo tiempo sin cortarse el paso mutuamente. Con este fin, el sistema operativo se apoya desde sus inicios en el método de la multitarea apropiativa (preemptive multitasking), según el cual un componente denominado planificador (scheduler), anidado en el núcleo del sistema operativo, se encarga de administrar los procesos en base a un sistema de prioridades. Fue mucho más tarde, a lo largo de 1990, cuando Apple y Microsoft se decidieron a realizar soluciones de gestión de procesos de este tipo.
Sistema multiusuario
Ya con Multics el principal objetivo de los desarrolladores era crear un sistema que permitiera trabajar a varios usuarios al mismo tiempo. Este es el motivo de asignar a cada programa y a cada proceso un propietario. Incluso cuando Unix estuvo limitado a dos usuarios al principio, esta cualidad formaba parte desde del libro de ruta del software desde el principio. La ventaja de un sistema multiusuario de este tipo no solamente residía en la posibilidad de acceder a un mismo procesador en el mismo momento, sino también en la gestión de permisos ligado a ello, porque ahora los administradores podían definir qué permisos de acceso tenía cada usuario y a qué recursos podía acceder. Para ello, era crucial antes que nada que el hardware del equipo lo permitiera.
Capacidad de red
Con 4.2BSD, el sistema Unix de la Berkeley se convierte en 1983 en el primer sistema operativo que integra la pila de protocolos de Internet, la cual sienta las bases de Internet y de una configuración sencilla de la red y ofrece la posibilidad de participar como cliente o servidor. A finales de la década de los 80, con la mencionada cuarta versión de System V, aterriza en el mercado una variante del sistema de AT&T comercial en el que se añade al kernel la legendaria familia de protocolos. En cambio, no sería hasta 1993 (versión 3.11 y su correspondiente extensión) cuando Windows soportaría TCP/IP.
Multiplataforma
Mientras que en la época del nacimiento de Unix se diseñaba a los sistemas operativos y a sus aplicaciones en función de un tipo exacto de procesador, el equipo de los Laboratorios Bell persiguió desde el principio la visión de un sistema portable. Aunque se utilizaba un lenguaje ensamblador, tan pronto como se estableció la estructura fundamental del software de sistema, el proyecto inició un lenguaje de programación propio y más elevado del cual nacería el histórico lenguaje C. Aunque los componentes escritos en C, a pesar del compilador adjunto, estaban todavía fuertemente ligados a la arquitectura de las máquinas PDP que Ritchie y los demás utilizaron como base para sus trabajos, con la posterior y muy modificada versión V7 de Unix de 1979 el sistema operativo se mereció con razón su reputación como sistema portable.
Las herramientas y la shell de Unix
Los sistemas Unix reúnen un gran número de instrumentos y comandos, cada uno de los cuales está concebido generalmente para unas pocas tareas especiales. Linux, por ejemplo, recurre a las herramientas de GNU. Para la solución general de problemas se aplica el principio de buscar respuestas en la combinación de herramientas estándar en lugar de desarrollar programaciones nuevas y específicas. La herramienta más importante en este sentido ha sido siempre la shell (sh), un intérprete de comandos orientado a texto que ofrece numerosas opciones de programación. Esta clásica interfaz de usuario puede usarse también sin interfaz gráfica, si bien una interfaz de este tipo, que más adelante encontraría también su lugar en el entorno Unix con Linux, incrementa obviamente la comodidad. Para los usuarios experimentados, el intérprete de comandos ofrece algunas ventajas fundamentales:
- El autocompletado inteligente simplifica su utilización
- Función “copia y pega”
- Se puede usar de forma interactiva (acceso directo) o no interactiva (ejecución de scripts)
- Elevada flexibilidad, dado que las aplicaciones (herramientas, comandos) se pueden combinar entre sí con casi total libertad
- Interfaz de usuario estandarizada y estable, lo que no siempre está garantizado en una GUI
- Las fases del trabajo en scripts se protocolizan automáticamente
- La implementación de aplicaciones es fácil y rápida
Unix: pieza clave en la historia de los sistemas operativos
El ascenso de Microsoft y Apple, estrechamente conectado con sus respectivos impulsores Bill Gates y Steve Jobs, no tiene equivalente, pero la piedra angular del enorme éxito de ambas multinacionales la puso entre 1969 y 1974 el trabajo pionero de Dennis Ritchie, Ken Thompson y todo el equipo de Unix. Y es que del sistema operativo no solo nacerían diversos derivados propios sino que, con sus conceptos como el sistema jerárquico de archivos, el intérprete de comandos o su alta portabilidad, también influirían en otros sistemas operativos. Con el fin de lograr esta última cualidad, se desarrolló sobre la marcha el lenguaje de programación C hasta convertirlo en el lenguaje más influyente de la historia de la informática.
Para hacerse consciente de las posibilidades de este lenguaje y la funcionalidad general de los sistemas operativos no hay mejor objeto de estudio que un sistema Unix, sin tener siquiera que recurrir a una de las variantes más clásicas: distribuciones Linux como Gentoo o Ubuntu se han adaptado a las necesidades modernas sin renunciar a una propiedad básica como es el control máximo sobre el sistema. Algo más limitadas son las posibilidades del más amigable sistema macOS, que pese a todo resuelve con bravura el spagat entre la imponente base Unix y una interfaz gráfica de usuario atractiva.