# Plan 9

Plan 9 de Bell Labs o simplemente Plan 9 es un sistema operativo distribuido, usado principalmente como vehículo de investigación.
Fue desarrollado como el sucesor en investigación del sistema UNIX por el Computing Sciences Research Center de los Laboratorios Bell entre mitad de los años 80 y 2002.
Plan 9 es conocido especialmente por representar todas las interfaces del sistema, incluyendo aquellos utilizados para redes y comunicación con el usuario, a través del sistema de archivos en lugar de sistemas especializados.
Su nombre proviene de la película Plan 9 del espacio exterior.

## Vista general

La primera versión pública estuvo disponible en 1992 para universidades. En 1995 se puso a disposición del público en general una segunda versión comercial.
Más tarde, a finales de los 90, Lucent Technologies, quien había "heredado" los Bell Labs, dejó de interesarse comercialmente por el proyecto. En 2000, una tercera versión no comercial fue hecha disponible bajo una licencia de código abierto. Y en 2002 una cuarta versión, nuevamente no comercial, se hizo disponible en forma de software libre.
El desarrollo continúa, liderado por un equipo de los Laboratorios Bell y miembros del MIT. Actualizaciones menores se hacen disponibles diariamente en forma de imágenes ISO para la plataforma IA-32.
El árbol de desarrollo es también accesible bajo los protocolos 9P y HTTP, que son usados para mantener una instalación al día.
UTF-8 fue inventado por Ken Thompson para ser usado como codificación nativa en Plan 9. Se adaptaría para ello en 1992. Así, Plan 9 fue el primer sistema operativo en incorporar soporte completo de Unicode.
Plan 9 usa un entorno de ventanas llamado rio.

## Implementaciones

Un entorno de ejecución instalable existe para la plataforma IA-32, y Plan 9 ha sido portado a MIPS, DEC Alpha, SPARC, PowerPC, ARM, Motorola 68000 y otras arquitecturas. El sistema está escrito en un dialecto del lenguaje de programación C. Diversas aplicaciones fueron originalmente escritas en un lenguaje llamado Alef, pero desde entonces se han reescrito en lenguaje C. Plan 9 puede importar aplicaciones POSIX y emular el sistema de sockets Berkeley.

## Equipo de investigación

El Computing Sciences Research Center donde se desarrolló Plan 9, fueron quienes desarrollaron UNIX, el lenguaje de programación C y C++. El equipo de Plan 9 fue originalmente liderado por Rob Pike, Ken Thompson, Dave Presotto y Phil Winterbottom con asistencia de Dennis Ritchie como cabeza del Computing Techniques Research Department. A través de los años varios desarrolladores notables han contribuido al proyecto, incluyendo Brian Kernighan, Tom Duff, Doug McIlroy, Bjarne Stroustrup y muchos otros.

## Conceptos de diseño

Los diseñadores de Plan 9 se interesaron en objetivos similares a los de los micronúcleos, pero hicieron diferentes elecciones de arquitectura y diseño para alcanzarlos.
* Recursos como archivos: todos los recursos del sistema se representan como archivos en el sistema de archivos jerárquico.
* Espacios de nombres (namespaces): la vista de la red por parte de la aplicación es un espacio de nombres simple y coherente que aparece como un sistema de archivos jerárquico pero que puede representar recursos físicamente separados (locales o remotos).
* Protocolo de comunicaciones estándar: se usa un protocolo estándar, llamado 9P, para acceder a todos los recursos, ya sean locales o remotos.

### Sistemas de archivos, archivos y nombres

UNIX fue el primer sistema operativo que intentó describir el entorno informático mayoritariamente como un sistema de archivos. Sin embargo muchos conceptos clave no parecían encajar bien en archivos en aquel tiempo, y, a medida que se añadían nuevas características, éstas se tendían a implementar fuera del sistema de archivos. El proyecto de investigación Plan 9 cuestionó esas distinciones.
Plan 9 extendió el sistema de archivos a nombres, esto es, una ruta única a un objeto ya sea un archivo, pantalla, usuario u ordenador. Todos se manejaron utilizando los estándares UNIX existentes, pero extendidos de forma que cualquier objeto pudiera ser nombrado y accedido, un concepto similar al más conocido sistema URI utilizado en la World Wide Web. En UNIX, dispositivos como impresoras habían sido representados por nombres utilizando "conversores software" en el directorio /dev, pero éstos solamente manejaban dispositivos del hardware local y no dispositivos remotos. Bajo Plan 9 las impresoras fueron virtualizadas como archivos, que podían ser accedidos a través de la red desde cualquier estación de trabajo.
Otra innovación de Plan 9 fue la habilidad de que los usuarios tuvieran nombres diferentes para los mismos objetos reales. Cada usuario podía crear un entorno personalizado colectando objetos varios en su espacio de nombres. UNIX tiene un concepto similar en el que los usuarios ganan "privilegios" siendo copiados desde otro usuario, pero Plan 9 extiende esto a todos los objetos. Los usuarios pueden fácilmente crear copias de sí mismos, modificarlas y después eliminarlas sin afectar los recursos de los que fueron creadas.

### Directorios Unión

Plan 9 también introdujo el concepto de los directorios unión, directorios que combinan y agrupan recursos a través de distintos medios y redes. Por ejemplo, el directorio /bin (programas) de otro computador puede ser vinculado al del propio computador, y entonces este directorio contendrá las aplicaciones locales y las aplicaciones remotas (del otro computador), a las que el usuario puede acceder de forma transparente. Los enlaces de UNIX y los puntos de montaje harían que desapareciera el directorio original, no pudiendo acceder a los programas locales. Usando el mismo sistema, bajo Plan 9, dispositivos externos y recursos pueden ser vinculados a /dev (juntándolos con los locales), haciendo que todos los dispositivos sean dispositivos de red sin código adicional.

### /proc

Para ilustrar cómo estas características funcionaban juntas para producir un conjunto mayor, se puede considerar el interesante directorio /proc, en el cual se listaban todas las aplicaciones que se estaban ejecutando. Las aplicaciones son objetos con nombre bajo Plan 9 al igual que todo lo demás, y por tanto tenía sentido listarlas en un directorio, como todo lo demás. Este cambio simple tiene muchos efectos secundarios útiles, permitiendo al usuario utilizar herramientas como ls (que al igual que en UNIX listaba el contenido de cualquier directorio) para buscar y ordenar la lista de procesos, que anteriormente solo estaba disponible utilizando herramientas dedicadas (como ps en UNIX). Pero incluso más interesante era que los usuarios podían utilizar el sistema de directorios unión descrito anteriormente para anexar aplicaciones remotas en su espacio de nombres, interactuando con ellas como si fueran locales, y haciendo el procesamiento a través de una red casi una trivialidad.
El resultado es un entorno de computación distribuida ensamblado a partir de máquinas diferentes: terminales en los escritorios de los usuarios, servidores de archivos que almacenan datos permanentes, y otros servidores que proveen CPUs rápidas, autenticación de usuarios y pasarelas de red; todo ello utilizando el sistema jerárquico nombres-directorios familiar a la mayoría de usuarios de computadoras. Un usuario podía construir un sistema colectando directorios desde servidores de archivos, aplicaciones ejecutándose en servidores, impresoras de la red y después agruparlas todas en su cuenta ejecutándose en su terminal local.

### Computación distribuida

Plan 9 se basa en UNIX pero fue desarrollado para demostrar el concepto de hacer de la comunicación la función principal de un sistema informático. Todos los recursos del sistema se nombraban y accedían como si fueran archivos, y se podían definir múltiples vistas del sistema distribuido dinámicamente para cada programa ejecutándose en una máquina en particular. Esta aproximación mejora la generalidad y modularidad del diseño de aplicaciones, "animando" a los servidores que mantienen cualquier información a aparecer a los usuarios y a las aplicaciones simplemente como archivos ordinarios -- accesibles de la misma forma que archivos locales.
La clave para soportar la transparencia de red de Plan 9 fue un nuevo protocolo de red de bajo nivel conocido como 9P. El protocolo 9P y su implementación conectaban objetos de red con nombre y presentaban una interfaz como un sistema de archivos. 9P es un sistema de archivos distribuido rápido y orientado a bytes (en lugar de orientado a bloques). Puede virtualizar cualquier objeto, no solo aquellos presentados por un servidor NFS en una máquina remota. El protocolo se usa para referirse a procesos, programas y datos, la interfaz de usuario y la red. Con la liberación de la cuarta edición de Plan 9, fue modificado y renombrado a 9P2000.

## Impacto

Plan 9 demostró que el concepto central de Unix (que cualquier interfaz de sistema podía representarse como conjuntos de archivos) podía implementarse y hacerse funcional en un moderno sistema distribuido. Algunas ideas de Plan 9 han sido implementadas en otros sistemas operativos. Sistemas Unix como GNU/Linux han implementado partes del sistema de archivos de Plan 9 (por ejemplo el directorio /proc), la codificación UTF-8 y formas limitadas parecidas a la llamada al sistema rfork. Además, varias de las aplicaciones y herramientas de Plan 9 han sido portadas a Unix y Linux y han alcanzado algún nivel de popularidad.
De todas formas, Plan 9 en sí mismo nunca ha sobrepasado a Unix en popularidad, y continúa como una herramienta de investigación. Plan 9 ha sido criticado como "parecer funcionar principalmente como medio para generar papers interesantes en la investigación de sistemas operativos". Eric S. Raymond en su libro The Art of Unix Programming especula sobre la falta de aceptación de Plan 9:
Entre otros críticos de Plan 9 se incluyen aquellos que critican a UNIX en general, donde Plan 9 se considera el epítome de la escuela peor es mejor de diseño de sistemas operativos, llevando la simplicidad como objetivo de diseño a un extremo.
Los proponentes y desarrolladores de Plan 9 aseguran que los problemas que obstaculizaban su adopción se han solucionado, y que sus objetivos originales como sistema distribuido, entorno de desarrollo y plataforma de investigación se han conseguido, y que disfruta de una popularidad moderada pero en crecimiento.
El sistema Inferno, a través de sus capacidades hosted, ha sido un vehículo para llevar tecnologías de Plan 9 a otros sistemas como parte de rejillas de computación heterogéneas.

## Glenda, el conejo de Plan 9

Glenda es la mascota del sistema operativo distribuido Plan 9. Fue dibujada por Renée French y existen tres versiones disponibles. Una tiene un fondo blanco, una tiene un fondo negro y una es la mascota con un casco de astronauta en su cabeza. Estos diseños están bajo la Lucent Public License, que es una licencia de código abierto.
Como Plan 9 recibió su nombre por la película de Ed Wood Plan 9 del espacio exterior, Glenda fue nombrada por la película Glen o Glenda, también de Ed Wood.

## Licencia

A partir del lanzamiento de la Cuarta edición en abril de 2002, el código fuente completo de Plan 9 de Bell Labs está disponible gratuitamente bajo Lucent Public License 1.02, que se considera una licencia de código abierto por Open Source Initiative (OSI ), licencia de software libre otorgada por la Free Software Foundation, y aprueba las Directrices de software libre de Debian.
En febrero de 2014, la Universidad de California, Berkeley, fue autorizada por el actual titular de los derechos de autor de Plan 9, Alcatel-Lucent, para lanzar todo el software de Plan 9 previamente regido por la Licencia Pública Lucent, Versión 1.02 bajo la Licencia Pública General GNU, Versión 2.
El 23 de marzo de 2021, la propiedad del Plan 9 se transfirió de Bell Labs a la Fundación Plan 9, y todas las versiones anteriores se volvieron a otorgar a la Licencia MIT.

## Trabajos relacionados
### Inferno

Inferno es un producto derivado, empezado originalmente por el mismo grupo que creó Plan 9, y ahora desarrollado por una compañía británica llamada Vita Nuova. Inferno comparte la mayor parte del diseño con Plan 9, pero utiliza un nuevo lenguaje de programación de aplicaciones denominado Limbo, y una máquina virtual que lo acompaña, Dis. Inferno se promociona como un sistema operativo embebido de código abierto.

### Plan 9 from User Space

Plan 9 from User Space (‘Plan 9 del espacio de usuario’) es un porte de las aplicaciones más notables de Plan 9 a sistemas operativos tipo UNIX.

### Plan B

Plan B es un sistema operativo diseñado para trabajar en entornos distribuidos, donde el conjunto de recursos disponibles varía en función de tiempo. Su cuarta edición se implementa como un conjunto de programas de usuario para ejecutarse en la parte superior de Plan 9 from Bell Labs.

### 9front

9front es un fork de Plan 9. El proyecto nació como remedio a la falta de recursos por parte de Bell Labs. Este proyecto aporta una serie de mejoras y corrección de errores sobre el desarrollo original.