# Sistema de archivos virtual

Un sistema de archivos virtual (VFS) o conmutador de sistema de archivos virtual es una capa de abstracción encima de un sistema de archivos más concreto. El propósito de un VFS es permitir que las aplicaciones cliente tengan acceso a diversos tipos de sistemas de archivos concretos de una manera uniforme. Puede ser utilizada para tender un puente sobre las diferencias en los sistemas de archivos de Windows, de Mac OS y Unix, de modo que las aplicaciones pudieran tener acceso a archivos en los sistemas de archivos locales de esos tipos sin tener que saber a qué tipo de sistema de archivos están teniendo acceso.
Un VFS especifica una interfaz (o un contrato) entre el núcleo y un sistema de archivos en concreto. Por lo tanto, es fácil agregar nuevos sistemas de archivos al núcleo simplemente satisfaciendo el contrato. Los términos del contrato pueden volverse incompatibles de una versión a otra, lo que requeriría que sistemas de archivos concretos fuesen recompilados, y posiblemente modificados antes de la recompilación, para permitirles trabajar con un nuevo lanzamiento del sistema operativo; o el proveedor del sistema operativo pueda realizar solamente cambios retrocompatibles al contrato, de modo que un sistema de archivos concreto construido para un lanzamiento dado del sistema operativo trabaje con las versiones futuras del mismo sistema operativo.

## Implementaciones

Uno de los primeros mecanismos virtuales del sistema de archivos dentro de los sistemas Unix-like fue introducido por Sun Microsystems en SunOS 2.0 en 1985. Este permitió que las llamadas del sistema UNIX tuvieran acceso a sistemas de archivos locales de UFS y a sistemas de archivos remotos NFS transparentemente. Por esta razón, los vendedores de UNIX que licenciaron el código del NFS de Sun copiaron a menudo el diseño de VFS del mismo Sun. Otros sistemas de archivos se podían acoplar en él también: había una implementación del sistema de archivos de FAT del MS-DOS desarrollado en Sun que se acopló en SunOS VFS, aunque no fue empaquetado como producto hasta SunOS 4.1. La implementación de SunOS era la base del mecanismo de VFS en el System V Release 4.
John Heidemann desarrolló un VFS que bajo SunOS 4.0 para el sistema de archivos experimental Ficus file system. Este diseño proporcionado para la reutilización del código entre tipos de sistemas de archivos con semánticas diferenciadas pero similares (e.g., un sistema de archivos encriptante podría reutilizar todo el código de nombramiento y de almacenamiento de un sistema de archivos no encriptante). Heidemann adaptó este trabajo para el uso en 4.4BSD como parte de su investigación de tesis; los descendientes de este código sostienen las implementaciones del sistema de archivos en derivados modernos de BSD incluyendo Mac OS X.
Otros mecanismos de sistema de archivos virtual en sistemas tipo UNIX incluyen el Interruptor de Sistema de Archivos en System V Release 3, el Sistema de Archivos Genérico en Ultrix, y el VFS en GNU/Linux. En OS/2 y Microsoft Windows, el mecanismo de sistema de archivos virtual se llama Sistema de Archivos Instalable.
El mecanismo del sistema de archivos en espacio de usuario (FUSE (Linux)) permite que el código de espacio de usuario se acople en el mecanismo del sistema de archivos virtual en GNU/Linux, FreeBSD, de OpenSolaris, y Mac OS X.
En Microsoft Windows, los sistemas de archivos virtuales pueden también implementarse a través de las extensiones de consola de nombre de usuario en espacio de usuario, sin embargo, no soportan las interfaces de programación de aplicaciones del sistema de más bajo nivel de acceso de archivos, de modo que no todas las aplicaciones serán capaces de acceder sistemas de archivos que se hayan implementado como extensiones de nombre de usuario.
KIO y el GNOME VFS proveen de mecanismos similares en los entornos de escritorio de KDE y de GNOME, con limitaciones similares, aunque pueden ser hechos para utilizar técnicas FUSE y por lo tanto integrarse suavemente en el sistema.

### Sistemas de archivos virtuales de un solo archivo

Se ponen en ejecución algunos sistemas de archivos virtuales de una manera tal que la ilusión de un sistema de archivos pueda ser creada usando el acceso a un solo archivo en el sistema de archivos subyacente. La ventaja primaria a este tipo de implementación es que es centralizado y fácil quitar. Un sistema de archivos virtual del solo-archivo puede incluir todas las características básicas esperadas de cualquier sistema de archivos (virtual o de otra manera), pero el acceso a la estructura interna de estos sistemas de archivos se limita a menudo a los programas escritos específicamente para hacer uso el sistema de archivos virtual del archivo-único (en vez de la implementación a través de un driver permitiendo el acceso universal). Otra desventaja importante es que el funcionamiento es relativamente bajo cuando está comparado a otros sistemas de archivos virtuales. De resultado inferior es sobre todo debido al coste de mezclar archivos virtuales cuando los datos se escriben o se suprimen del sistema de archivos virtual.