VUOS: Give Your Processes a New VU
Davoli, Renzo
VUOS is a different perspective on namespaces, anykernels and related concepts. The main idea behind VUOS is that it is possible to give processes their own "view" using partial virtual machines. A partial virtual machine intercepts the system call requests and operates like a filter: system calls can be forwarded to the kernel of the hosting system or processed by the partial virtual machine hypervisor. In this way processes can see a mix of resources provided by the kernel (on which they have the same view of the other processes) and virtual resource. It is possible to mount filesystems, load networking stacks, change the structure of the file system tree, create virtual devices. The hypervisor is just a user process so while it gives new perspective for processes, it does not widen the attack surface of the kernel.
 So I come from Bologna. I'm at the University of Bologna. And this icon here is VirtusQuare, which is a team which is developing solutions, tools, ideas, and the field of virtualization. VOS, give your processes a new view. View, it's not an acronym. It must sound like a view. So which is the point? What a process can view? A process running on an operative system is able by itself to execute machine operations. It's able by itself to access its own memory. But everything else must be obtained through system codes. So the environment, the view, the panorama that the process is seeing outside its world, it's given by the answer, by the reply that the system calls gives you back. It gives it back. OK. So namespaces in the kernel are ways to provide processes with different views. Different views on a file system, different views on networking, different views on process ideas, user ID, or whatever. What we are designing with VOS is something similar, but completely running in user space with just user permissions without the need to be root. These can reduce dramatically the taxable phase, because we don't use namespace features in the kernel. So you can imagine to run a kernel with namespaces disabled. And at the same time, we provide the solutions that are available to standard users. Nowadays, it happens so often that solutions tools are provided for system administrators. But that means that it's another way to enlarge the taxable phase as faulty programs, bugs can create damages to the system. So what the idea starts, the idea comes from a need. Why? It is not possible for a user to mount a file system. If I have a file system image, it's a file of mine. So mounting a file system image and changing the contents of the files, including that file system image, once mounted, is just a sophisticated editing of a file of yours. Why is it forbidden in a standard system? Just because the idea of mount is an idea of a global operation of the system. This operation either is provided as a global operation as in the past. Or it's provided just as to a subset of processes, but by the kernel in spaces. Instead, it must be possible to mount file systems as users. In this presentation, I want to show you first what and why. And then at the end, how? There are a number of ways around. So with other applications, I can need a virtual device. So I want to create a RAM disk for my application. So if it's a RAM disk for my application, why I need to need the kernel services? Or I want to use a different network stack. Or I want to see a file which is here there, like the bind mount. Or I want to remount the entire file system in COW mode in copy and write mode. I want to change the time, user ID, whatever. But I want to do everything in user space, user permission. So instead of I have slides with demo, but I prefer to provide with here with demo. Reset. Here I have a file system image. I would like to do this because this is the natural way to mount a file system. Actually, not from the kernel. And this is an error of the tool. It's the mount tool that says you're not root. This is an error of the tool. But even if you try to call the system call, you get the error. How can you do that? You start a VOS machine. This window is running inside the machine. Again, if I try to mount this, I get the error. But if I add the module to provide the file system virtualization and mount this, just saying the type of file system and tool. As I work around to the mount command error, I have to use view mount, which is a mount. You can use view mount to mount everything else. But it tries the system call. What is now about live? OK. The problem is that OK. OK. Now I have mounted the file system, but just for this. OK. Actually, this is mounted, but this is another file system, as you can see. So I've mounted my file system over there. This is just an example. OK. Let's start another virtual machine. I have here some comments to be. OK. Let us, this time, if I can pick up the comment, I add two models. One is for virtual devices. One is for virtual files. And with this comment, I create a virtual device named dev ramdisk, which is a ramdisk. 100 megabyte large. So as a user, I can create a file system on a ramdisk. Then I can mount the file system. And now on the dash mount, I have the new file system, which is into the ramdisk. I want to point out that I'm using the comments that I use as an ordinary system administrator outside the virtual machine. So one of the goal of the process is to use the natural comments to do what you need. Let us go farther. This is a common problem I had. I always forget the comments to loop mount partition of file system units. For example, if you have a Raspberry Pi, the image has two partitions. If you want to mount one partition to change one file, it is a mess. And second, you need to be root. Now I'm showing you how to access the partition of a Raspberry Pi image as a user. So again, I add the two models. Now I use another virtual device module, which is partix. And as you can see, that's an image I've just downloaded from Raspberry Pi site. And now I have in slash-dev slash-stx my disk. So I can. OK. I'm not root, so I need to consider partitions. OK. And given there are sdx1, sdx2, I can mount sdx2. So I can mount the second partition. Here I have the root partition of Raspberry Pi. I could change the file or do whatever I want. Or let's continue. OK. Now let us play with another toy, networking. The model for networking is VONET. Now let me try. OK. Let us try this experiment. This is quite a new development. It's already unstable, but I want to. This is a development I have created together with Danila Camera. This is Pico TCP as a user mode stack in VOS. And given that the Pico TCP is connected to VDI networking, I've used it as a networking interface slurp, which is the tool used by virtual machines to provide user-provided networks. Now we provide in VOS different stacks at the same time in order to change the side. And you can see I've mounted the stack in DevNet Pico. In order to say, I want to use that network, because now I have my interfaces. But if I say VOS stack, I open a batch. And in this batch, I have the Pico TCP interfaces. It's a choice. Pico TCP uses hash IDs. So it's quite different from standard networking, because usually you have the number of the interfaces 0, 1. We have the better. Now I can self-configure the network using a standard the ACP client. OK. Now I've got the address. And again, this is my machine, my computer in Bologna. I've used the stack in the virtual environment. OK. Now the final demo. This is the current time. Now I can start the VOS machine. And now I start another sub-module, Mish. And this time, I start another x-clock. Now I mount. Let me move this clock, which is. OK. Now I mount the module, Vomit time, and mount. And it is like a process file system. So mount contains some fake files. Here's this to change the view of the process regarding time. For example, if I put 2 in mount frequency, as you can see, we have relativistic machines. So the time in the virtual machine runs twice as faster as the time in the normal life. OK. So as you can see, the idea of VOS is providing means to provide the processes with the view we need to solve problems. So we have started from the solution. We have started from what is useful. Now I can show you. OK. All the demos I've done now are in the slides. So you can test by yourself if you like all the demos after the talk. It is the structure of one view, which is an implementation of VOS. We can provide further implementation in the future. There are processes in the user space. And there is a real system call interposition to decide which system calls what it must be forwarded to the kernel in case you are accessing part of the system which are real, or the system calls are completely implemented in the hypervisor code. In order to achieve the better results with parallelism, we use a technique that we have named the guardian angels. So each process running in the user space has in the hypervisor a thread which is providing the virtualization for that thread or process. So each process in the user space has a guardian angel thread in the hypervisor. So if a process runs an open, the guardian angel tries to see if the path is in a real or in a virtual part. If it is a real part, it simply says the process. Forward the call to the kernel. Otherwise, the guardian angel and the model choice is for the choice of virtual or real. And in case it's virtual, it returns the module which is responsible for the virtualization. OK. So the system call, there are wrappers that get from the user memory all the parameters of what is needed to perform the virtualization. And the system call is forwarded to the module. We have seen in the demos fused dev net. And the implementation of file system, networking, or devices, or whatsoever, really perform the actual action to have the result. I have two points to note now. One is, in example, I have created a virtual device. And inside the virtual device, a virtual file system. So this was a nested virtualization. So try to think that we open a file in the virtual file system. That call is forwarded to be fused for the virtualization of the file system. How can we achieve the virtualization of device on this? The hypervisor uses a self-virtualization method. PureLibC is an overlay of onLibC that is able to grab, to catch all the system calls generated by the process itself. So even the read or write from a view fuse is returned to the choice function. And if it sees that there is a further virtualization in place, it calls, in this case, the device virtualizer. And for example, for the RAM disk. And it provides the correct answer. Let me point out that the interface to the modules is clean, simple. Let me see. Kiss. Keep it simple and stupid. The modules receive just the system calls. So if there is a read here, read file descriptor, buffer length, over there, the module receive a read file descriptor, buffer length. OK. So a module is simply created by registering the service to the hash table. So one module can register. I can, I am responsible for this sub-3 of the file system. Or I am responsible for that file. Or I am responsible for that address family. I am responsible for that or the other system call. And then it has to provide the implementation of the system call. If somebody want to access that kind of file, so there is a read, what must be the answer? That's all. OK. I have no time to show the code, but everything is available. We have a wiki site. We are redesigning the wiki site. The most important here is the set of repositories. And there is actually an infrastructure for a tutorial. We provided this payment and scripts to make it easy for whoever want to try the tools to have the whole infrastructure ready to perform the experiments I've done five minutes ago. So we have a lot of tools. The experiments I've done five minutes ago. Feel free. And please download the image, try the tools. And if you like, if you want to participate, the project is open to all contributions. Thank you. So we have time for maybe one or two quick questions. How do you compare a view with a geovizor or a user model in Ux? Sorry? How do you compare a view with a geovizor? User model in Ux? I compare user model in Ux to VOS, or when we are. User model in Ux creates a complete virtual machine. So it puts an entire kernel. We don't put anything. We just put the system in a condition to grab the system call and divert the execution of the system call to modules if required. So two points. OK. We use BFS to accelerate the grabbing the system call catching. Now we can do just the avoiding the second call. Each time a system call is grabbed by Ptrace, you receive two calls, one before and one after. So using BFS, now we can avoid the second call, whether the system call is completely real or completely or completely virtual. We have a system call that is the same time real and virtual. For example, open. We have a virtual open, but at the same time, we force the process to make a real open because we have to allocate the file descriptor. OK. We would like to offload many parts of the decision process in the kernel, but we would need the EBPF with a comp, which is a long discussion in the kernel, meaning least. So if you're interested and you like the process, I help us to convince the Linux kernel mainly is to add the EBPF for the second comp system call. OK. I think we're at the end of this step room today. Thank you for everyone who participated. Thanks. Thank you. Thank you. Thank you. Thank you.
 So I come from Bologna.  I'm at the University of Bologna.  And this icon here is VirtusQuare, which is a team which is  developing solutions, tools, ideas, and the field of  virtualization.  VOS, give your processes a new view.  View, it's not an acronym.  It must sound like a view.  So which is the point?  What a process can view?  A process running on an operative system is able by  itself to execute machine operations.  It's able by itself to access its own memory.  But everything else must be obtained  through system codes.  So the environment, the view, the panorama that the  process is seeing outside its world, it's given by the  answer, by the reply that the system calls gives you back.  It gives it back.  OK.  So namespaces in the kernel are ways to provide  processes with different views.  Different views on a file system, different views on  networking, different views on process ideas, user ID, or  whatever.  What we are designing with VOS is something similar, but  completely running in user space with just user  permissions without the need to be root.  These can reduce dramatically the taxable phase,  because we don't use namespace features in the kernel.  So you can imagine to run a kernel with namespaces  disabled.  And at the same time, we provide the solutions that are  available to standard users.  Nowadays, it happens so often that solutions tools are  provided for system administrators.  But that means that it's another way to enlarge the  taxable phase as faulty programs, bugs can create  damages to the system.  So what the idea starts, the idea comes from a need.  Why?  It is not possible for a user to mount a file system.  If I have a file system image, it's a file of mine.  So mounting a file system image and changing the contents  of the files, including that file system image, once  mounted, is just a sophisticated editing of a  file of yours.  Why is it forbidden in a standard system?  Just because the idea of mount is an idea of a global  operation of the system.  This operation either is provided as a global  operation as in the past.  Or it's provided just as to a subset of processes, but by  the kernel in spaces.  Instead, it must be possible to mount file systems as users.  In this presentation, I want to show you first what and why.  And then at the end, how?  There are a number of ways around.  So with other applications, I can need a virtual device.  So I want to create a RAM disk for my application.  So if it's a RAM disk for my application, why I need to  need the kernel services?  Or I want to use a different network stack.  Or I want to see a file which is here there, like the  bind mount.  Or I want to remount the entire file system in  COW mode in copy and write mode.  I want to change the time, user ID, whatever.  But I want to do everything in user space, user permission.  So instead of I have slides with demo, but I prefer to  provide with here with demo.  Reset.  Here I have a file system image.  I would like to do this because this is the natural way to  mount a file system.  Actually, not from the kernel.  And this is an error of the tool.  It's the mount tool that says you're not root.  This is an error of the tool.  But even if you try to call the system call, you get the  error.  How can you do that?  You start a VOS machine.  This window is running inside the machine.  Again, if I try to mount this, I get the error.  But if I add the module to provide the file system  virtualization and mount this, just saying the type of file  system and tool.  As I work around to the mount command error, I have to  use view mount, which is a mount.  You can use view mount to mount everything else.  But it tries the system call.  What is now about live?  OK.  The problem is that OK.  OK.  Now I have mounted the file system, but just for this.  OK.  Actually, this is mounted, but this is another file system,  as you can see.  So I've mounted my file system over there.  This is just an example.  OK.  Let's start another virtual machine.  I have here some comments to be.  OK.  Let us, this time, if I can pick up the comment,  I add two models.  One is for virtual devices.  One is for virtual files.  And with this comment, I create a virtual device named  dev ramdisk, which is a ramdisk.  100 megabyte large.  So as a user, I can create a file system on a ramdisk.  Then I can mount the file system.  And now on the dash mount, I have the new file system, which  is into the ramdisk.  I want to point out that I'm using the comments that I use  as an ordinary system administrator  outside the virtual machine.  So one of the goal of the process  is to use the natural comments to do what you need.  Let us go farther.  This is a common problem I had.  I always forget the comments to loop mount  partition of file system units.  For example, if you have a Raspberry Pi,  the image has two partitions.  If you want to mount one partition to change one file,  it is a mess.  And second, you need to be root.  Now I'm showing you how to access the partition of a Raspberry  Pi image as a user.  So again, I add the two models.  Now I use another virtual device module, which is partix.  And as you can see, that's an image I've just downloaded  from Raspberry Pi site.  And now I have in slash-dev slash-stx my disk.  So I can.  OK.  I'm not root, so I need to consider partitions.  OK.  And given there are sdx1, sdx2, I can mount sdx2.  So I can mount the second partition.  Here I have the root partition of Raspberry Pi.  I could change the file or do whatever I want.  Or let's continue.  OK.  Now let us play with another toy, networking.  The model for networking is VONET.  Now let me try.  OK.  Let us try this experiment.  This is quite a new development.  It's already unstable, but I want to.  This is a development I have created together  with Danila Camera.  This is Pico TCP as a user mode stack in VOS.  And given that the Pico TCP is connected to VDI networking,  I've used it as a networking interface  slurp, which is the tool used by virtual machines  to provide user-provided networks.  Now we provide in VOS different stacks at the same time  in order to change the side.  And you can see I've mounted the stack in DevNet Pico.  In order to say, I want to use that network,  because now I have my interfaces.  But if I say VOS stack, I open a batch.  And in this batch, I have the Pico TCP interfaces.  It's a choice.  Pico TCP uses hash IDs.  So it's quite different from standard networking,  because usually you have the number of the interfaces 0, 1.  We have the better.  Now I can self-configure the network using a standard  the ACP client.  OK.  Now I've got the address.  And again, this is my machine, my computer in Bologna.  I've used the stack in the virtual environment.  OK.  Now the final demo.  This is the current time.  Now I can start the VOS machine.  And now I start another sub-module, Mish.  And this time, I start another x-clock.  Now I mount.  Let me move this clock, which is.  OK.  Now I mount the module, Vomit time, and mount.  And it is like a process file system.  So mount contains some fake files.  Here's this to change the view of the process regarding time.  For example, if I put 2 in mount frequency,  as you can see, we have relativistic machines.  So the time in the virtual machine  runs twice as faster as the time in the normal life.  OK.  So as you can see, the idea of VOS  is providing means to provide the processes with the view  we need to solve problems.  So we have started from the solution.  We have started from what is useful.  Now I can show you.  OK.  All the demos I've done now are in the slides.  So you can test by yourself if you  like all the demos after the talk.  It is the structure of one view, which  is an implementation of VOS.  We can provide further implementation in the future.  There are processes in the user space.  And there is a real system call interposition  to decide which system calls what  it must be forwarded to the kernel in case you are  accessing part of the system which are real,  or the system calls are completely  implemented in the hypervisor code.  In order to achieve the better results with parallelism,  we use a technique that we have named the guardian angels.  So each process running in the user space  has in the hypervisor a thread which  is providing the virtualization for that thread or process.  So each process in the user space  has a guardian angel thread in the hypervisor.  So if a process runs an open, the guardian angel  tries to see if the path is in a real or in a virtual part.  If it is a real part, it simply says the process.  Forward the call to the kernel.  Otherwise, the guardian angel and the model  choice is for the choice of virtual or real.  And in case it's virtual, it returns the module which  is responsible for the virtualization.  OK.  So the system call, there are wrappers  that get from the user memory all the parameters of what  is needed to perform the virtualization.  And the system call is forwarded to the module.  We have seen in the demos fused dev net.  And the implementation of file system, networking,  or devices, or whatsoever, really perform the actual action  to have the result.  I have two points to note now.  One is, in example, I have created a virtual device.  And inside the virtual device, a virtual file system.  So this was a nested virtualization.  So try to think that we open a file in the virtual file  system.  That call is forwarded to be fused  for the virtualization of the file system.  How can we achieve the virtualization of device  on this?  The hypervisor uses a self-virtualization method.  PureLibC is an overlay of onLibC that  is able to grab, to catch all the system calls generated  by the process itself.  So even the read or write from a view fuse  is returned to the choice function.  And if it sees that there is a further virtualization in place,  it calls, in this case, the device virtualizer.  And for example, for the RAM disk.  And it provides the correct answer.  Let me point out that the interface to the modules  is clean, simple.  Let me see.  Kiss.  Keep it simple and stupid.  The modules receive just the system calls.  So if there is a read here, read file descriptor,  buffer length, over there, the module  receive a read file descriptor, buffer length.  OK.  So a module is simply created by registering the service  to the hash table.  So one module can register.  I can, I am responsible for this sub-3 of the file system.  Or I am responsible for that file.  Or I am responsible for that address family.  I am responsible for that or the other system call.  And then it has to provide the implementation  of the system call.  If somebody want to access that kind of file,  so there is a read, what must be the answer?  That's all.  OK.  I have no time to show the code, but everything is available.  We have a wiki site.  We are redesigning the wiki site.  The most important here is the set of repositories.  And there is actually an infrastructure for a tutorial.  We provided this payment and scripts  to make it easy for whoever want to try the tools to have  the whole infrastructure ready to perform the experiments I've  done five minutes ago.  So we have a lot of tools.  The experiments I've done five minutes ago.  Feel free.  And please download the image, try the tools.  And if you like, if you want to participate,  the project is open to all contributions.  Thank you.  So we have time for maybe one or two quick questions.  How do you compare a view with a geovizor or a user model  in Ux?  Sorry?  How do you compare a view with a geovizor?  User model in Ux?  I compare user model in Ux to VOS, or when we are.  User model in Ux creates a complete virtual machine.  So it puts an entire kernel.  We don't put anything.  We just put the system in a condition  to grab the system call and divert  the execution of the system call to modules if required.  So two points.  OK.  We use BFS to accelerate the grabbing the system call  catching.  Now we can do just the avoiding the second call.  Each time a system call is grabbed by Ptrace,  you receive two calls, one before and one after.  So using BFS, now we can avoid the second call,  whether the system call is completely real or completely  or completely virtual.  We have a system call that is the same time real and virtual.  For example, open.  We have a virtual open, but at the same time,  we force the process to make a real open because we  have to allocate the file descriptor.  OK.  We would like to offload many parts of the decision  process in the kernel, but we would need the EBPF with a comp,  which is a long discussion in the kernel,  meaning least.  So if you're interested and you like the process,  I help us to convince the Linux kernel mainly  is to add the EBPF for the second comp system call.  OK.  I think we're at the end of this step room today.  Thank you for everyone who participated.  Thanks.  Thank you.  Thank you.  Thank you.  Thank you.
uk_vuos_0_167.png uk_vuos_168_1067.png uk_vuos_1068_5375.png uk_vuos_5376_9275.png uk_vuos_9276_10811.png uk_vuos_10812_10859.png uk_vuos_10860_12839.png uk_vuos_12840_13067.png uk_vuos_13068_13247.png uk_vuos_13248_13523.png uk_vuos_13524_13631.png uk_vuos_13632_15887.png uk_vuos_15888_16163.png uk_vuos_16164_16211.png uk_vuos_16212_19103.png uk_vuos_19104_19331.png uk_vuos_19332_22055.png uk_vuos_22056_23303.png uk_vuos_23304_23651.png uk_vuos_23652_23867.png uk_vuos_23868_24167.png uk_vuos_24168_24971.png uk_vuos_24972_26219.png uk_vuos_26220_26939.png uk_vuos_26940_26999.png uk_vuos_27000_27047.png uk_vuos_27048_27203.png uk_vuos_27204_27251.png uk_vuos_27252_27407.png uk_vuos_27408_36839.png uk_vuos_36840_36947.png uk_vuos_36948_36995.png uk_vuos_36996_37259.png uk_vuos_37260_37451.png uk_vuos_37452_37571.png uk_vuos_37572_37667.png uk_vuos_37668_37715.png uk_vuos_37716_40163.png uk_vuos_40164_40223.png uk_vuos_40224_43235.png uk_vuos_43236_43355.png
So I come from Bologna. I'm at the University of Bologna. And this icon here is VirtusQuare, which is a team which is developing solutions, tools, ideas, and the field of virtualization. VOS, give your processes a new view. View, it's not an acronym. It must sound like a view. So which is the point? What a process can view? A process running on an operative system is able by itself to execute machine operations. It's able by itself to access its own memory. But everything else must be obtained through system codes. So the environment, the view, the panorama that the process is seeing outside its world, it's given by the answer, by the reply that the system calls gives you back. It gives it back. OK. So namespaces in the kernel are ways to provide processes with different views. Different views on a file system, different views on networking, different views on process ideas, user ID, or whatever. What we are designing with VOS is something similar, but completely running in user space with just user permissions without the need to be root. These can reduce dramatically the taxable phase, because we don't use namespace features in the kernel. So you can imagine to run a kernel with namespaces disabled. And at the same time, we provide the solutions that are available to standard users. Nowadays, it happens so often that solutions tools are provided for system administrators. But that means that it's another way to enlarge the taxable phase as faulty programs, bugs can create damages to the system. So what the idea starts, the idea comes from a need. Why? It is not possible for a user to mount a file system. If I have a file system image, it's a file of mine. So mounting a file system image and changing the contents of the files, including that file system image, once mounted, is just a sophisticated editing of a file of yours. Why is it forbidden in a standard system? Just because the idea of mount is an idea of a global operation of the system. This operation either is provided as a global operation as in the past. Or it's provided just as to a subset of processes, but by the kernel in spaces. Instead, it must be possible to mount file systems as users. In this presentation, I want to show you first what and why. And then at the end, how? There are a number of ways around. So with other applications, I can need a virtual device. So I want to create a RAM disk for my application. So if it's a RAM disk for my application, why I need to need the kernel services? Or I want to use a different network stack. Or I want to see a file which is here there, like the bind mount. Or I want to remount the entire file system in COW mode in copy and write mode. I want to change the time, user ID, whatever. But I want to do everything in user space, user permission. So instead of I have slides with demo, but I prefer to provide with here with demo. Reset. Here I have a file system image. I would like to do this because this is the natural way to mount a file system. Actually, not from the kernel. And this is an error of the tool. It's the mount tool that says you're not root. This is an error of the tool. But even if you try to call the system call, you get the error. How can you do that? You start a VOS machine. This window is running inside the machine. Again, if I try to mount this, I get the error. But if I add the module to provide the file system virtualization and mount this, just saying the type of file system and tool. As I work around to the mount command error, I have to use view mount, which is a mount. You can use view mount to mount everything else. But it tries the system call. What is now about live? OK. The problem is that OK. OK. Now I have mounted the file system, but just for this. OK. Actually, this is mounted, but this is another file system, as you can see. So I've mounted my file system over there. This is just an example. OK. Let's start another virtual machine. I have here some comments to be. OK. Let us, this time, if I can pick up the comment, I add two models. One is for virtual devices. One is for virtual files. And with this comment, I create a virtual device named dev ramdisk, which is a ramdisk. 100 megabyte large. So as a user, I can create a file system on a ramdisk. Then I can mount the file system. And now on the dash mount, I have the new file system, which is into the ramdisk. I want to point out that I'm using the comments that I use as an ordinary system administrator outside the virtual machine. So one of the goal of the process is to use the natural comments to do what you need. Let us go farther. This is a common problem I had. I always forget the comments to loop mount partition of file system units. For example, if you have a Raspberry Pi, the image has two partitions. If you want to mount one partition to change one file, it is a mess. And second, you need to be root. Now I'm showing you how to access the partition of a Raspberry Pi image as a user. So again, I add the two models. Now I use another virtual device module, which is partix. And as you can see, that's an image I've just downloaded from Raspberry Pi site. And now I have in slash-dev slash-stx my disk. So I can. OK. I'm not root, so I need to consider partitions. OK. And given there are sdx1, sdx2, I can mount sdx2. So I can mount the second partition. Here I have the root partition of Raspberry Pi. I could change the file or do whatever I want. Or let's continue. OK. Now let us play with another toy, networking. The model for networking is VONET. Now let me try. OK. Let us try this experiment. This is quite a new development. It's already unstable, but I want to. This is a development I have created together with Danila Camera. This is Pico TCP as a user mode stack in VOS. And given that the Pico TCP is connected to VDI networking, I've used it as a networking interface slurp, which is the tool used by virtual machines to provide user-provided networks. Now we provide in VOS different stacks at the same time in order to change the side. And you can see I've mounted the stack in DevNet Pico. In order to say, I want to use that network, because now I have my interfaces. But if I say VOS stack, I open a batch. And in this batch, I have the Pico TCP interfaces. It's a choice. Pico TCP uses hash IDs. So it's quite different from standard networking, because usually you have the number of the interfaces 0, 1. We have the better. Now I can self-configure the network using a standard the ACP client. OK. Now I've got the address. And again, this is my machine, my computer in Bologna. I've used the stack in the virtual environment. OK. Now the final demo. This is the current time. Now I can start the VOS machine. And now I start another sub-module, Mish. And this time, I start another x-clock. Now I mount. Let me move this clock, which is. OK. Now I mount the module, Vomit time, and mount. And it is like a process file system. So mount contains some fake files. Here's this to change the view of the process regarding time. For example, if I put 2 in mount frequency, as you can see, we have relativistic machines. So the time in the virtual machine runs twice as faster as the time in the normal life. OK. So as you can see, the idea of VOS is providing means to provide the processes with the view we need to solve problems. So we have started from the solution. We have started from what is useful. Now I can show you. OK. All the demos I've done now are in the slides. So you can test by yourself if you like all the demos after the talk. It is the structure of one view, which is an implementation of VOS. We can provide further implementation in the future. There are processes in the user space. And there is a real system call interposition to decide which system calls what it must be forwarded to the kernel in case you are accessing part of the system which are real, or the system calls are completely implemented in the hypervisor code. In order to achieve the better results with parallelism, we use a technique that we have named the guardian angels. So each process running in the user space has in the hypervisor a thread which is providing the virtualization for that thread or process. So each process in the user space has a guardian angel thread in the hypervisor. So if a process runs an open, the guardian angel tries to see if the path is in a real or in a virtual part. If it is a real part, it simply says the process. Forward the call to the kernel. Otherwise, the guardian angel and the model choice is for the choice of virtual or real. And in case it's virtual, it returns the module which is responsible for the virtualization. OK. So the system call, there are wrappers that get from the user memory all the parameters of what is needed to perform the virtualization. And the system call is forwarded to the module. We have seen in the demos fused dev net. And the implementation of file system, networking, or devices, or whatsoever, really perform the actual action to have the result. I have two points to note now. One is, in example, I have created a virtual device. And inside the virtual device, a virtual file system. So this was a nested virtualization. So try to think that we open a file in the virtual file system. That call is forwarded to be fused for the virtualization of the file system. How can we achieve the virtualization of device on this? The hypervisor uses a self-virtualization method. PureLibC is an overlay of onLibC that is able to grab, to catch all the system calls generated by the process itself. So even the read or write from a view fuse is returned to the choice function. And if it sees that there is a further virtualization in place, it calls, in this case, the device virtualizer. And for example, for the RAM disk. And it provides the correct answer. Let me point out that the interface to the modules is clean, simple. Let me see. Kiss. Keep it simple and stupid. The modules receive just the system calls. So if there is a read here, read file descriptor, buffer length, over there, the module receive a read file descriptor, buffer length. OK. So a module is simply created by registering the service to the hash table. So one module can register. I can, I am responsible for this sub-3 of the file system. Or I am responsible for that file. Or I am responsible for that address family. I am responsible for that or the other system call. And then it has to provide the implementation of the system call. If somebody want to access that kind of file, so there is a read, what must be the answer? That's all. OK. I have no time to show the code, but everything is available. We have a wiki site. We are redesigning the wiki site. The most important here is the set of repositories. And there is actually an infrastructure for a tutorial. We provided this payment and scripts to make it easy for whoever want to try the tools to have the whole infrastructure ready to perform the experiments I've done five minutes ago. So we have a lot of tools. The experiments I've done five minutes ago. Feel free. And please download the image, try the tools. And if you like, if you want to participate, the project is open to all contributions. Thank you. So we have time for maybe one or two quick questions. How do you compare a view with a geovizor or a user model in Ux? Sorry? How do you compare a view with a geovizor? User model in Ux? I compare user model in Ux to VOS, or when we are. User model in Ux creates a complete virtual machine. So it puts an entire kernel. We don't put anything. We just put the system in a condition to grab the system call and divert the execution of the system call to modules if required. So two points. OK. We use BFS to accelerate the grabbing the system call catching. Now we can do just the avoiding the second call. Each time a system call is grabbed by Ptrace, you receive two calls, one before and one after. So using BFS, now we can avoid the second call, whether the system call is completely real or completely or completely virtual. We have a system call that is the same time real and virtual. For example, open. We have a virtual open, but at the same time, we force the process to make a real open because we have to allocate the file descriptor. OK. We would like to offload many parts of the decision process in the kernel, but we would need the EBPF with a comp, which is a long discussion in the kernel, meaning least. So if you're interested and you like the process, I help us to convince the Linux kernel mainly is to add the EBPF for the second comp system call. OK. I think we're at the end of this step room today. Thank you for everyone who participated. Thanks. Thank you. Thank you. Thank you. Thank you.
processes with different views. Different views from a need. Why? It is not possible for a user mounted, is just a sophisticated editing of a spaces. Instead, it must be possible to mount virtual machine. So one of the goal of the and mount. And it is like a process file system. change the view of the process regarding time. you can see, we have relativistic machines. So talk. It is the structure of one view, which is what it must be forwarded to the kernel in case of file system, networking, or devices, or on this? The hypervisor uses a all the system calls generated by the process virtual. We have a system call that is the same