Plan9: ¿El sucesor de UNIX?



Manual de plan9

Allá por el año 1993, de nuestro señor, algo empezó a gestionarse en el corazón de los laboratorios Bell, el núcleo de investigación y desarrollo de AT&T, de donde surgió Unix, comenzó a trabajar en un nuevo proyecto de Sistema Operativo (SO) Distribuido denominado Plan9 en honor a la peor película de ciencia ficción de la historia: Plan 9 del espacio exterior de Ed Wood. En realidad la peor fue Locuras del extraterrestre, con Olmedo y Porcel, pero bueno, el problema de vivir en el culo del mundo.
Hoy en día, Plan9 es una realidad ofrecida a usuarios individuales e instituciones académicas para uso no comercial.
Plan9 (P9) constituye un SO escalable, eficiente y con uso seguro en red. Se trata de un SO distribuido, es decir no llega a proporcionar la transparencia que exigía la máquina virtual de Tanembaum, pero si se trata de un sistema en el cuál coexisten por igual servidores de ficheros, de CPU, locales y de red.

La Herencia de Unix

La idea originar consistió en realizar un moderno SO partiendo de cero, no como una actualización del Unix como lo fue el Unix98, sino que debería realizarse un SO que respondiera a las necesidades tecnológicas actuales.
De este modo, la cultura de la empresa respecto a Unix (y por ende toda la experiencia acumulada) sirvió para el diseño original del P9, suplir todas sus carencias respecto de la escalabilidad dinámica en red. Obviamente la plena potencia del P9 se ve cuando se instala en red y no en una máquina hogareña, sino no se aprecia sus ventajas respecto a su predecesor. Entre las características que comparte con Unix se puede citar:

Ideas Propias

P9 exige un terminal gráfico con sistemas de ventanas que ha denominado en forma chistosa, 8 1/2 (ocho y medio) son de vivos los nenes!. Este terminal puede ser cualquier computadora conectada a la red que opere P9 con una CPU propia y con sistemas de ficheros propios, pero se caracteriza como interfaz de acceso para usuarios humanos.
En el sistema de archivos se introduce el concepto de visibilidad de usuario, es decir, como todo SO moderno es un sistema multiusuario, pero no se limita como Unix a mostrar un único sistema de ficheros a todos los usuarios y solo distingue los permisos de acceso, sino que, P9 muestra un mismo sistema de archivos en forma diferente para cada usuario, ya que define la capa superior de visibilidad, dicha capa recibe el nombre de Espacio de Nombres.
La gestión de los recursos es tal que desaparece la separación entre recursos locales y remotos. Para ello se incorpora en el núcleo el protocolo 9P (que reemplaza al TCP/IP).

Requisitos

Por el momento P9 corre en i386 o superior, MIPS, SPARC y Motorola 68020. En el entorno i386, el sistema de ventanas, un editor, más aplicaciones básicas, pueden correr en una máquina con 8Mb de RAM. El sistema básico, incluido soporte ethernet, internet y compilador Alef, caben en cuatro discos de 3 1/2. La versión completa está contenida en un CD de los cuales se emplea solo 140Mb para el soporte i386.

El Espacio de Nombres

Como se ha mencionado antes cada proceso dispone de una visibilidad particular del sistema de archivos denominado espacio de nombres. Así dos procesos pueden ver sistemas de archivos completamente diferentes. En el caso de Unix disponen de la misma visibilidad del sistema de archivos con la diferencia de los permisos de lectura, escritura y ejecución, en P9 no es así. La única analogía que se halla en el mundo Unix es el dispositivo /dev/tty. Este dispositivo se halla cableado en el kernel por lo que cada proceso ve un /dev/tty diferente que corresponde al terminal en que se halla conectado.
P9 lleva este concepto al extremo ampliandolo a todo el sistema de archivos, todo espacio de nombres cuenta con una raíz, bajo la misma se halla el directorio /bin que resulta de la unión de todos los directorios que tienen ejecutables visibles para el proceso. De esta forma se elimina la variable de ambiente PATH. Esta visibilidad es configurable tanto por el usuario como por el administrador.

El Protocolo 9P

El sistema nervioso de P9 lo constituye el protocolo 9P. Es este el que permite tratar a todos los recursos como ficheros, ya sean locales o remotos, con lo cuál no es necesario apelar al NFS. Ya que se permite el acceso a dispositivos de forma remota cosa que con NFS no se puede. El protocolo 9P ofrece una semántica única de accesos a archivos que implementa procedimientos RPC sobre el protocolo IL (Intenet Link), un nuevo protocolo fiable que se monta sobre IP.

Mecanismos de Autenticación

El mecanismo de autenticación P9 sigue el esquema Kerberos. No se envía el password por la red, en su lugar, se emplea un mecanismo de tickets encriptados facilitados por un servidor de autenticación. En P9 no existe el concepto de superusuario ni tampoco la idea de programas con setuid. El servidor de archivos P9 no corre programas de usuario, solo se limita a dar acceso a archivos autorizados.

Sistema de Archivos /proc

Algunos Unix como el SV y Linux emplean un sistema de archivos virtual denominado /proc. Con el se puede acceder a procesos, entornos de procesos, dispositivos y recursos. P9 incorpora este mecanismo, así bajo el directorio /proc (visible por todos los procesos) existe otro subdirectorio asociado con cada proceso del sistema y que toma como nombre el número del proceso. Bajo él otros archivos como ctl, mem, status, etc. permiten acceder a través de las funciones E/S de la API.
Luego el comando ps se lo puede implementar como cat /proc/*/status. Por otra parte los mensajes de lectura y escritura son de texto, si bien se puede perder algo de prestaciones se gana en claridad evitando la translación host byte order a network byte order y viceversa.

Entorno de Creación de Procesos

Otra de las nuevas características de P9 es la forma de acceder al entorno de un proceso que también se realiza a través del espacio de nombres, en el directorio /env. Por ejemplo un proceso con dos variables de entorno podría contener:
/env/user
/env/pid
cuyo contenido se lo puede ver con
% cat /env/user
Horacio
% cat /env/pid
456
Nuevamente el espacio de nombres será diferente para cada proceso. Así una forma de ver todas las variables asociadas a un proceso podría ser: (cd env;echo *). Respecto a la creación de procesos hijos el padre hace uso de la primitiva rfork. Esta llamada acepta un mapa de bits como argumento que describirá como se compartirá el espacio de nombres entre padre e hijo.

Transparencia de Red

Entre las características que otorgan a P9 una gran funcionalidad se halla:

Brazil, L'Inferno y Limbo

En el momento de escribir este artículo, P9 se emplea como SO en diversas universidades, Toronto, York, Sydney y Austria como soporte de desarrollo y cálculo. En Luncent más de 40 desarrolladores emplean una evolución de P9 de uso interno denominada Brazil, que con el lenguaje de desarrollo propio llamado Limbo (similar al Java) proporcionan el SO L'Inferno.

Documento escrito en Octubre del 2000.

1