Full virtualization can run any piece of software on a virtual machine. Paravirtualization assumes that the guest software has been written to run on the virtual machine. Paravirtualized guest software does function calls using the hypervisor's API, just as as a user process does calls using an operating systems API.