The things that full virtualization available under Linux (KVM, Xen) is able to do now is not sufficient for us in comparison with OpenVZ containers. For instance, we don’t limit CPU, which would be impossible to do if we used any other technology. Out of all the mentioned virtualizations, OpenVZ is also the least resource-intensive (especially since it is based on containers).
In most situations, a VPS behaves the same way as a physical Linux server (or a fully virtualized virtual server) with the given distribution. It has its accounts, apps and data.
From the point of view of the operation system, in a full virtualization the virtual server has its own (virtualized or paravirtualized) hardware. This hardware then runs the kernel, while every virtual server can have a different one. This is not the case with OpenVZ – the virtual server does not have its own hardware, it has no PCI or any other buses, not even its own network card. It does not have its own kernel either – apps run under the kernel of the host machine.
Basically, there is a problem with any application that would want to work very closely with the hardware (which is true for most ways of virtualization) or use the special properties of the kernel. You can also encounter problems if you want to use advanced routing, shapers, certain advanced iptables uses (especially IPv6, IPv4 NAT is only possible using a workaround).
On the other hand, we provide the possibly best optimized implementation of OpenVZ. We do not like to brag, but Snajpa has really spent a lot of nights fine-tuning OpenVZ on our servers .
No, or only using KVM.
VPS (i.e. containers) share the kernel of their host. OpenVZ is developed on the kernel from RHEL6 – 2.6.32. No other kernel can be used, OpenVZ only works with this version. Moreover, this kernel contains a lot of extra patches and backports, e.g. it can even run Docker.
Applications that need a newer kernel to run often only check its version and refuse to run based on that, even if our kernel has the required functionality. Because of this, OpenVZ can present a fake version of the kernel to the containers to pass the checks that the apps have in place. E.g. a VPS using Debian 8 sees version 3.16.6 even though it is still the same kernel. The container just sees a different version number.
The only way to actually install any kernel is using KVM.