Virtual machines, virtual networks, virtual devices, .... everything can be "virtualized". What happens when virtual entities interact, when they inter-operate, when it is possible to define the "recursion" of virtuality? The aims of the virtual square project is to investigate this perspective.
In more than two years of research several aspects have been studied, several tools and prototypes have been created (more than 100,000 lines of C code, available on public repositories under free software licenses). Some ideas and tools are now well known and widely used such as the Virtual Distributed Ethernet (VDE). VDE is a distributed virtual local area network (not to be confused with VLANs). Based on virtual switches and virtual cables, VDE interconnects virtual machines, other VDEs, or virtual interfaces of operating systems running on real machines. All the "machines" connected to a VDE appear as it were connected to a local area network, regardless on where they are in the reality. VDE networks can be bridged or routed among themselves or with real networks.
The idea of "Virtual Machine" itself has been put under investigation, too. We have decomposed the old monolithic virtual machines into a virtual machine skeleton and modules which implement specific virtualizations. This is the idea behind UMVIEW. UMVIEW itself is the skeleton and there are modules to virtualize file systems, networks, devices, etc. Virtual and real file systems, virtual and real networks can coexist and inter-operate. For example a process can "see" a merge between some parts of the real file system and some other parts from virtual file systems. UMVIEW is based on the idea of partial virtual machines, and it is also an implementation of the concepts of View-OS. In View-OS each process can have its own perspective, its own view of the running environment. In other words the file system (e.g. what a path mean), the networking (e.g. which IP addresses, routing, interfaces etc), devices, IPC... can be defined on process by process basis.
This new degree of freedom within the operating systems opens the way to many applications but on the same time leads to new interesting problems. - UMVIEW is a user-mode implementation of View-OS. Is it possible to create a kernel with built-in services to support process views and to give efficient support to virtual machines (of any kind, partial or monolithic)? - Is this approach a viable solution between micro and macro kernels? The two different approaches could co-exist in the same kernel and the balance could be chosen case by case depending on specific issues: performance, security, availability of drivers/services. - Virtual square approach unifies several existing virtual services such as real (monolithic) virtual machines (major virtualizations) and many other services that now need specific (sometimes tricky) tools and solutions. It is the case of the "chroot" system call, of the loop-back mounting of file system images, of the "fakeroot" tool and many others. Which other services could be provided inside the virtual square framework? Which ones are implementations of existing services, which ones are new? - Which is the role of the multiuser operating systems in Virtual Square? A human "user" could need to define several "roles", "personalities" to have different access rights to system resources depending on the different desired safety requirements, viceversa it is possible to define "community" users that spans over virtual clusters to share services.