Accede a todo EDteam con un único pago¡Sube a premium!

La historia completa de UNIX ¿Cómo un sistema operativo cambió el mundo?

Unix fue creado sin proponérselo por dos ingenieros que buscaban que un videojuego les funcionara más rápido y se convirtió en una revolución tecnológica, cuyo legado permanece hasta nuestros días.

Diseño web
8 minutos
Hace un año
 La historia completa de UNIX ¿Cómo un sistema operativo cambió el mundo?

A finales de los años 70 e inicios de los 80 el mundo era muy diferente: la Macintosh (la primera computadora comercial con interfaz gráfica) llegaría en 1984, MS-DOS en 1981, Windows en 1985, para la llegada de Linux faltaba más de una década y aún no existía la web. En ese entonces, la tecnología que dominaba el mundo era UNIX.

Unix fue creado sin proponérselo por dos ingenieros que buscaban que un videojuego les funcionara más rápido (no es broma 😐), desarrollaron algunas utilidades para que la computadora procesara mejor el videojuego, luego otras y otras, hasta que tenían un sistema operativo completo.

Unix fue una revolución tecnológica cuyo legado permanece hasta nuestros días: en los sistemas que usamos, en los lenguajes de programación que aprendemos, en los dispositivos que compramos. Pero Unix también fue el centro de una de las más grandes guerras de la historia de la tecnología.

Estoy seguro que has escuchado sobre Unix, pero si quieres saber a fondo en qué consiste, su historia y por qué su legado dura hasta nuestros días, ponte cómodo y prepárate para uno de los capítulos más importantes de la historia de la tecnología. Porque en español, #NadieTeExplicaMejor que EDteam.

¿Cómo se creó UNIX?

En los años 60 no existían computadoras en las casas o las oficinas como hoy en día. Las computadoras eran gigantescos monstruos de varias toneladas en universidades o centros de investigación. Estas computadoras gigantes eran conocidas como mainframes y para programar cualquier tipo de aplicación sobre ellas, se debía usar el lenguaje ensamblador.

Ensamblador no es un lenguaje de programación como los que conocemos ahora, sino que se trata de un conjunto de instrucciones de bajo nivel específicas para cada procesador y arquitectura. Eso significa que existe un lenguaje ensamblador diferente para cada una y hacer que la misma aplicación funcionara en más de una computadora, implicaba escribirla de nuevo. En ensamblador.

ensamblador-EDteam-explicación-blog.png

A mediados de la década de los 60, el MIT, Bell Labs y General Electric, iniciaron un proyecto en conjunto para crear un Sistema Operativo multitarea y multiusuario para el mainframe GE-645. En esos tiempos, las computadoras se usaban con un modelo llamado: tiempo compartido, que significaba que varias personas podían usar la misma computadora a través de terminales (un teclado y una pantalla) compartiendo recursos. De esta forma, se llegaba a más personas y se abarataban los costos. Es por eso que Multics, como se llamaba este sistema operativo, debía ser multiusuario y multitarea. Sin embargo, el sistema era lento y consumía muchos recursos, así que el proyecto fue cancelado.

mainframe-blog-explicacion-EDteam.png

Ken Thompson, un programador que participó en el proyecto Multics, desarrolló el juego Space Travel en ensamblador para la GE-645 pero era lento y costoso, así que portó el juego a una computadora PDP-7, más potente que la anterior. El proceso de mover el juego a otra arquitectura era tan tedioso que empezó a escribir varias herramientas, que con el tiempo, se convertirían en un sistema operativo completo.

Dennis Ritchie, otro programador, que también había trabajado en Multics se unió a Thompson en el desarrollo de este proyecto y escribieron varias funciones para el manejo de archivos, que termino convirtiéndose en un sistema operativo al que llamaron Unics, ya que a diferencia de Multics, era monousuario y monotarea, además que a pequeña escala. Luego fue Brian Kernighan quien le dio su nombre definitivo: Unix.

Hasta ese entonces, Unix era un proyecto interno sin apoyo directo de la empresa. Hasta que en 1970, Bell Labs los financió para que Unix corriera en la PDP-11/20 (mucho más potente que la vieja, mucho más potente que la PDP-7). Esta versión mejorada de Unix fue desarrollada también en ensamblador e incluía herramientas nuevas como un procesador de texto. Al año siguiente, en 1971, se publica el libro Unix Programmer’s manual (con el tiempo ese manual pasó a convertirse en el comando man) en la terminal.

Entre 1971 y 1973, Dennis Ritchie crea C, un lenguaje de alto nivel para poder llevar Unix a otras arquitecturas sin tener que reescribirlo. Es curioso que ahora se hable de C como bajo nivel, cuando fue diseñado como de alto nivel (comparado con ensamblador). En 1973 se lanza la primera versión de Unix escrita en C y portable, con la filosofía de que se convierta en un entorno de programación amigable y que otros programadores escriban programas que se ejecuten en Unix (en lugar de escribir programas en ensamblador).

Cuando Unix estuvo listo y fue presentado en un evento de tecnología, se empezó a correr la voz y hubo mucho interés por el sistema, así que Bell Labs tenía una mina de oro en sus manos. Pero había un pequeño (bueno, gigante) problema: AT&T, la compañía propietaria de los laboratorios Bell, tenía prohibido vender cualquier producto que no estuviera relacionado con las telecomunicaciones y sus patentes debían estar exentas de regalías.

¿Por qué? Porque AT&T era una empresa inmensamente poderosa, un monopolio al que el gobierno tuvo que frenar para que no acaparara el mercado de forma salvaje. Aunque por otro lado, gracias a ese poder, Bell Labs contaba con un presupuesto casi ilimitado para la investigación, y muchas revoluciones de la tecnología se crearon ahí.

Lo que hizo Bell Labs fue vender licencias a instituciones educativas y centros de investigación (cada licencia costaba 20 mil dólares, unos 100 mil actuales) que eran los únicos clientes que podía tener por ley. Y para llegar a más clientes, negoció con proveedores que obtendrían la licencia de Unix para vendérsela a los usuarios finales. Lo curioso (e impensable para nuestros tiempos) es que Bell Labs entregaba el código fuente en esa licencia, con lo cual cada proveedor podía hacer modificaciones (aunque esas modificaciones solo podían ser vendidas a quien haya comprado Unix inicialmente).

Esto hizo que aparezcan muchas versiones derivadas de Unix, que la distribución sea caótica y que estas versiones ni siquiera sean compatibles entre sí. Pero con todo y eso para finales de los 70, Unix se había instalado en más de 600 mainframes y tenía la reputación de ser un sistema operativo universal, con una implementación para cualquier computadora que imagines (algo así como los sabores de Linux).

La era de Unix había comenzado.

Características de UNIX

Unix no fue solo un sistema operativo, fue también una filosofía para el desarrollo de software, cuya influencia llega hasta nuestros días pues desde el inicio se pensó en que se convierta en un entorno sencillo para que los programadores desarrollen.

Para conseguirlo, Unix fue diseñado para ser completamente modular, es decir, conformado por muchos programas pequeños (módulos) que funcionan en conjunto y conectados por tuberías (o pipes). De esta manera, modificar el sistema, corregir errores o agregar funciones, no implicaba escribir miles de líneas de código sino solo unas cuantas para el módulo específico.

Estructura del sistema Unix

Unix se compone de tres capas:

  1. El Kernel. Es el núcleo del sistema, se comunica con el hardware, ejecuta los programas y controla el acceso a los recursos de la máquina.
  2. El Shell. Es la interfaz a través de la cual se comunica el usuario con la computadora. En esos tiempos no existía la interfaz gráfica con íconos, menús y un ratón para mover un cursor, sino que todo se hacía por intermedio de comandos (con letra generalmente verde sobre un fondo oscuro). Entonces el shell (o intérprete de comandos) es quien traduce las instrucciones que escriben los usuarios para la máquina.
  3. Las herramientas. Son todas los programas escritos para ejecutar tareas específicas. Estos programas tienen la característica de poder trabajar en conjunto a través de pipelines.

Sistema de archivos

El corazón de Unix está en su sistema de archivos. En Unix todo es un archivo y los archivos están organizados en directorios que pueden tener subdirectorios y estos a la vez subdirectorios, sin límite de niveles. Algo que es muy común hoy en día, fue una revolución en aquellos tiempos. Pero no solo eso, sino que en Unix todo es un archivo. Sé que ya lo dije, pero piénsalo así:

  1. Los directorios son archivos, cuyo contenido son los nombres de los archivos de ese directorio.
  2. Los programadas son archivos, cuyo contenido son los comandos con las instrucciones para la computadora.
  3. Los archivos de texto son archivos. Bueno, eso es obvio.

Este concepto era nuevo para su tiempo, pues los sistemas operativos manejaban múltiples atributos para los archivos, mientras que en Unix solo importaba su nombre, era él único atributo que debías conocer para trabajar con un archivo.

Modularidad

Como ya dijimos, Unix es un conjunto de herramientas que pueden trabajar juntas gracias a dos concepto: redirección y pipelines. Como debes saber, un programa requiere datos de entrada (input) y de salida (ouput). Por ejemplo, si tenemos un programa que suma dos números, nuestro input podría ser 1 y 2 y el output 3. Muy fácil de entender.

Lo normal es que el input sea ingresado por el usuario a través del teclado y el output enviado a la pantalla. El cambio en Unix, es que puedes indicar a donde dirigir una salida. Por ejemplo, puede ser la entrada de otro programa.

Entonces, podríamos tener un programa que sume dos números y la salida de este programa sea la entrada de otro, que eleva al cuadrado ese número y la salida de este que se convierta en la entrada de otro, que saca el 10% y así podemos seguir. Este proceso se conoce como pipeline y es muy usado en la informática moderna pero comenzó con Unix.

Gracias a este concepto, podemos crear programas utilizando shell scripting. Es decir, archivos de texto con secuencias de comandos que se ejecutan en el sistema.

que-es-UNIX-explicacion-EDteam.png

La guerra por UNIX

Como debes recordar, Bell Labs no podía vender Unix por una sentencia por monopolio, así que se dedicó a licenciarlo con acceso al código fuente, por lo que los proveedores podían hacer modificaciones y así se generaron muchas versiones de Unix. Por un lado, esto ayudó a expandirlo, pero por otro, generaron caos, incompatibilidades y guerras.

Algunos de estos sistemas operativos derivados de Unix, son:

  1. BSD, la variación más famosa de Unix. Fue desarrollada en la Universidad de California en Berkeley. BSD son las iniciales de Berkeley Software Distribution. Recuerda este nombre, porque es muy importante en la historia de Unix.
  2. Xenix de Microsoft, quien fue el mayor distribuidor de sistemas Unix. Habían adquirido la licencia en 1979 y otorgaban su versión, que incluía partes de BSD a empresas como IBM o Santa Cruz Operation (SCO) para que la vendan a usuarios finales. Años después, decidieron concentrarse en sistemas operativos para el usuario final como DOS o Windows y más adelante, la competencia de Unix: Windows NT.
  3. SunOS, una variación de BSD. Dirigida por Bill Joy, uno de los desarrolladores de BSD en la Universidad de California. Joy decidió crear su propia empresa, para lo cual reescribió el núcleo de BSD en una semana. Esta empresa fue Sun Microsystems dentro de la cual se creó Java, Open Office y Solaris (el sucesor de SunOS).

El lado negativo de esta estandarización fue la incompatibilidad entre todas las implementaciones de Unix. Para 1980, existían tres versiones principales de Unix: System III (de AT&T del cual derivaba Xenix) y System V (también de AT&T) y BSD (que tenía redes TCP/IP que las versiones de AT&T no tenían). Esto se resuelve en 1988 con el estándar POSIX y posteriormente en 1994, con el estándar SUS (Single Unix Specification) que incluye a POSIX y determinan cuando un sistema es UNIX completo o Unix like (parecido a Unix).

En 1984 se acaba la restricción que tenía AT&T para vender Unix, así que busca ordenar el desastre de versiones que circulaban en el mercado y se decide a estandarizar su versión 5, a la que llamaron System V. Para eso se alió con Sun y trabajaron muy de cerca en distribuir la versión “oficial” de Unix.

El resto de proveedores de Unix, preocupados por esta alianza Sun/AT&T y pensando que serían excluidos crearon grupos para definir su propio estándar de Unix. Un grupo fue OSF (Open Software Foundation) y otro X/Open. Ten en cuenta que la X era sinónimo de Unix. Como respuesta, Sun y AT&T crearon Unix International (UI) que también iba a definir los estándares. Así que teníamos ¡3 estándares de Unix! Y sin contar a BSD, que no se metió en este pleito.

publicidad-sube-a-premium-cursos-EDteam-blog.png

Pero como dice el refrán: A río revuelto, ganancia de pescadores. Mientras los socios comerciales de Unix se andaban matando con los estándares (e incluso en líos judiciales), Microsoft iba desarrollando en silencio la competencia a Unix: Windows NT. El enemigo estaba en sus narices y nadie lo vio.

En 1993, la OSF y UI se unieron en algo llamado COSE (Common Open Software Enviroment) y en 1996, se fusionaron con X/Open, y esta fusión final recibió el nombre de Open Group. Hasta la fecha, tiene la marca registrada de Unix y maneja la certificación SUS (Single Unix Specification), que determina si un sistema es Unix o no. Spoiler: Linux no es Unix.

Demanda a BSD

Uno de los episodios más importantes de las guerras de Unix fue la demanda de Unix a BSD. Estrictamente hablando: de Unix System Laboratories (USL) a BSD Inc. (BSDi) por infracción de derechos de autor. Pongámonos en contexto.

Como sabemos, AT&T, la empresa propietaria de Bell Labs, no podía vender Unix, pero está prohibición se acabó en 1984 cuando la empresa fue obligada a dividirse y la división a cargo de Unix pasó a llamarse Unix System Laboratories.

Por su lado, la versión más importante de Unix fuera de las guerras de estándares, era BSD, desarrollado en la Universidad de California. BSD tenía muchas funciones que Unix no (como el acceso a redes TCP/IP) pero también tenían mucho código del Unix original, así que se propusieron eliminar todo el código original para que su sistema este libre de derechos de Unix. Para esto, se creó una empresa llamada BSD Inc (BSDi).

Gracias a este cambio en el código, BSD salió libre de la demanda. Aunque con el tiempo BSD se fue apagando. Hay muchos más episodios en estas guerras, como compras, ventas, juicios por el nombre, juicios a Linux y más chisme, pero sería alargar innecesariamente este blog.

Legado de UNIX

Para el inicio de los años 80, Unix era el sistema operativo más importante del mundo y un ingeniero de inteligencia artificial del MIT, llamado Richard Stallman, obsesionado con asuntos filosóficos sobre la libertad, decidió crear un sistema operativo inspirado en Unix pero sin sus costosas licencias y en el que todos puedan participar. Llamó a este proyecto GNU (GNU is not UNIX) y creó el movimiento del software libre que buscaba oponerse al software licenciado por las empresas. Además, creó la licencia GPL (GNU Public License) que permitía distribuir libremente el software y hacer derivados sin que ninguna empresa pueda apropiarse de los derechos.

Por su parte, Microsoft abandonó la distribución de Xenix y se enfocó en DOS y Windows. Pero en 1993 lanzó Windows NT, que competía directamente con Unix en el mundo empresarial y que les arrebató grandes cuotas de mercado.

En 1991, un estudiante de la universidad de Helsinki, Linus Torvalds, creó el kernel de un sistema operativo inspirado en Unix, al que llamó Linux y lo puso a disposición del mundo con la licencia GPL. Hasta ese entonces (había pasado una década) Stallman no había terminado el kernel, por lo que GNU no era un sistema operativo completo. Recordemos que Bill Joy de Sun escribió el núcleo de SunOS en tan solo una semana, pero había pasado una década y GNU aún no tenía el kernel (la parte más importante del sistema), así que tomaron el kernel Linux, le sumaron las tools que habían desarrollado y se completó el sistema operativo al que llamaron GNU/Linux. Sin embargo, Linux es muchísimo más que GNU como te lo contamos en este video, por lo que es un error creer que todo lo Linux, es GNU/Linux.

En 1991, Unix System Laboratories (la división de AT&T a cargo de Linux, luego de la división de la empresa) y Novell, unieron fuerzas para lanzar un sistema operativo de escritorio basado en Unix al que llamaron Unixware. En 1993, Novell compra USL y se queda con los derechos de Unix, que luego pasarían (demandas legales de por medio) a SCO Group.

En 1992, Sun Microsystems trabaja en Solaris, su sistema operativo sucesor de SunOS. En 2010 Oracle compra Sun, cierra OpenSolaris (la versión abierta) y despide a la mayor cantidad de ingenieros que trabajaban en Solaris, con lo cual, aunque todavía existe, es un sistema irrelevante.

En 1995 Steve Jobs funda Next luego de ser despedido de Apple. En esta nueva compañía crea la NextCube, una computadora en forma de cubo que fue usada por Tim Berners Lee para crear HTML y la web. Y como sistema operativo crearon NextStep, basado en BSD. En 1997, Apple compra Next para reforzar su sistema operativo y así nace Darwin, la base para macOS. Con lo cual, macOS es el sistema Unix completo (certificado) más importante de nuestros días. ¿Lo sabías?

Así que al día de hoy, tenemos solo dos sucesores importantes de Unix: Linux (en todos su sabores, incluido Android y las versiones en servidores y supercomputadoras) y macOS. Así que, aunque no hay un sistema operativo llamado Unix circulando allá afuera, su legado es gigantesco.

Por su lado, C, el lenguaje creado por Dennis Ritchie exclusivamente para hacer a Unix portable, se convirtió en el más importante para el desarrollo de sistemas (junto con su evolución, C++). Hasta el día de hoy, los sistemas operativos, los núcleos, los controladores de hardware y las aplicaciones de escritorio siguen escribiéndose con C y C++. ¡50 años después! Eso sí que es tener un legado.

En 2011, Dennis Ritchie, sin duda uno de los programadores más grandes de la historia de la tecnología, murió a los 70 años. Vio a Linux crecer (y a pesar de todos los debates, Ritchie consideraba a Linux un sistema Unix), se lamentó de la venta de USL a Novell y vio la vigencia de C décadas después de ser creado. Ken Thompson, que junto con él creó Unix, y Rob Pike, amigo personal de Ritchie y que fue parte del equipo que desarrolló Unix, empezaron el desarrollo del lenguaje de programación Go en 2007, combinando el poder de C y la velocidad de Python. Go fue lanzado por Google en 2009 y al día de hoy, es uno de los lenguajes más importantes para el desarrollo de sistemas, backend y microservicios.

En 1980 no existía Macintosh, que salió en 1994, menos macOS, tampoco existía Windows (que salió en 1985), y tampoco DOS. No existía GNU y no existía Linux (faltaban más de 10 años para que nazca). En 1980 el sistema operativo que reinaba el mundo era Unix, y su legado perdura hasta hoy. Ahora ya sabes cuál es la historia de Unix. Y si no lo sabías, #LoAprendisteEnEDteam.

¿Quieres comenzar en el mundo de la programación, dominar las tecnologías más importantes y conseguir el empleo de tus sueños? En EDteam tenemos cientos de cursos, con la mejor explicación en español, que te ayudará a asegurar tu futuro y ser un gran profesional. Entra a ed.team/cursos, elige el curso o la ruta que quieres seguir y prepárate para asegurar un mejor futuro para ti y tus seres queridos.

Comentarios de los usuarios

Pregunta a ChatEDT