@@ -24,17 +24,54 @@ compatibility issues are not a common problem for most workloads in practice.
2424While gVisor only implements a subset of the Linux syscall ABI, the
2525unimplemented part of the ABI is mostly comprised of alternatives to existing
2626syscalls that gVisor does support. For example, gVisor does not fully support
27- ` io_uring ` -related syscalls, but does support other I/O-related syscalls. Most
28- language runtimes and libraries will automatically determine which syscall
29- variant they should use, so they will work in gVisor. For this reason, looking
30- through the [ list of supported syscalls] ( linux/amd64 ) is not necessarily a good
31- measure of how widely compatible gVisor is in practice.
27+ ` io_uring ` -related syscalls (as seen below), but does support other I/O-related
28+ syscalls. In practice, most language runtimes and libraries that do I/O will
29+ automatically probe and determine which syscall variant for I/O they can use, so
30+ they will effectively work in gVisor even if they would use ` io_uring ` when
31+ running on Linux. For this reason, looking through the
32+ [ list of supported syscalls] ( linux/amd64 ) is not necessarily a good measure of
33+ how widely compatible gVisor is in practice.
3234
3335gVisor releases go through the regression tests of popular language runtimes
3436(Python, Java, Node.js, PHP, Go) to ensure continued compatibility with the base
3537libraries of these languages. This means most programs written in these
3638languages will work.
3739
40+ ## What ** doesn't** work?
41+
42+ While gVisor aims to support a wide variety of workloads and to achieve
43+ near-parity with Linux, it will never be perfect. Notably:
44+
45+ - There are known gaps in the implementations of some kernel subsystems:
46+ - While in-sandbox cgroups (CPU, memory) exist and can be used for
47+ resource * accounting* , resource * limits* are not enforced within the
48+ sandbox. It is possible to restrict a sandbox's resources by placing
49+ gVisor in a Linux-native host cgroup, however gVisor cannot currently
50+ enforce resource limits between competing processes within the * same*
51+ sandbox.
52+ - Block device filesystems like ` fat32 ` , ` ext3 ` , ` ext4 ` are not natively
53+ supported inside the gVisor kernel. As such, it is not possible to mount
54+ block devices from within the sandbox. It is however possible to mount
55+ such devices on a host Linux machine, and expose the mounted filesystem
56+ to the sandbox.
57+ - ` iptables ` are only partially supported. The general goal is to support
58+ the featureset necessary to be able to run
59+ [ Docker in gVisor] ( ../../tutorials/docker-in-gvisor/ ) , but not
60+ necessarily further.
61+ - Device files for custom hardware is generally not supported, with the
62+ notable exceptions of [ NVIDIA GPUs] ( ../gpu/ ) and [ TPU devices] ( ../tpu/ ) .
63+ Patches are welcome to expand this to other hardware devices as
64+ necessary.
65+ - ` io_uring ` is disabled by default. When enabled, its implementation is
66+ limited to basic I/O operations. Similar for ` nftables ` rules support.
67+ - Usage of KVM from * within* the sandbox is not supported. Note that this
68+ limitation is not related to whether gVisor itself uses the
69+ [ KVM platform] ( ../platforms/ ) . In addition, gVisor works well when
70+ running within a KVM-based virtual machine.
71+ - There exist known feature gaps when gVisor is integrated as a container
72+ runtime within a Kubernetes cluster. Refer to the
73+ [ GKE Sandbox incompatible features list] ( https://cloud.google.com/kubernetes-engine/docs/concepts/sandbox-pods#limitations-incompatible ) .
74+
3875<!-- mdformat on -->
3976
4077[ bug ] : https://github.com/google/gvisor/issues/new?title=Compatibility%20Issue:
0 commit comments