mrkeyoor.com_
Tue 01 Sept 17:41 UTC
Self-Hostedevaluationupdated 28 Aug 2026

gvisor review

gVisor is a userspace application kernel that puts another isolation layer between a container and the host Linux kernel. Its `runsc` OCI runtime works with Docker and Kubernetes, making it useful when ordinary shared-kernel containers are too exposed for untrusted workloads.

+25 / 3dstars / 7d
Verdict

Our gVisor run installed 396 packages and built in 19 seconds, but go test stopped after 4 seconds with a go.mod tidy demand before running any tests. Use gVisor for untrusted multi-tenant containers when your team can test compatibility and accept measured I/O costs. Keep ordinary runc for trusted workloads where the extra isolation does not justify operational and performance tradeoffs.

We ran it

Lab card: what happened when we ran gvisorScreenshot of gvisor (gvisor.dev)
Install✓ · 43s396 packages
Build✓ · 19s
Tests✗ · 4s0 passed · 0 failed of 0 (go test)
Repo4197 files~874,491 lines of source · 66.6 MB · 9 CI workflows · tests dir

Answers from our run

Does gvisor build from source?

Dependencies installed in 43 seconds (396 packages), and the build succeeded in 19 seconds. We cloned commit 4a7fcd5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do gvisor's tests pass?

Yes: 0 of 0 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use gvisor?

Operators who need complete Linux behavior: gVisor documents permanent compatibility gaps, limited io_uring, partial iptables, and no in-sandbox KVM.

What are the alternatives to gvisor?

Kata Containers, Firecracker, runc. Our gVisor run installed 396 packages and built in 19 seconds, but go test stopped after 4 seconds with a go.

Setup3/5Packages install cleanly; runtime rollout needs Linux integration
Docs5/5Threat model, compatibility, production, and tuning are explicit
Community5/519,181 stars with pushes and issue work on August 28, 2026
Maturity5/5Current releases and documented production adopters support confidence

Discussed on

  1. hnGo CheckLocks Analyzer94 points
  2. hnGvisor: Application Kernel for Containers26 points
  3. hngVisor: Container Runtime Sandbox, a user-space kernel for containers9 points
  4. hnGoogle open sources gVisor, a sandboxed container runtime9 points
  5. hnGVisor: Google Sandboxed Container Runtime6 points

Who it’s for

Platform teams running customer code, build jobs, notebooks, or other untrusted containers.
Kubernetes and Docker operators who need stronger workload isolation without managing a full guest VM per container.
Security teams willing to test application compatibility and tune each workload class.
Linux infrastructure teams that can benchmark filesystem and network costs before rollout.

Who it’s NOT for

Operators who need complete Linux behavior: gVisor documents permanent compatibility gaps, limited io_uring, partial iptables, and no in-sandbox KVM.
I/O-heavy databases or network appliances chosen mainly for throughput: the production guide says those workloads pay the largest performance penalty.
Teams looking for a complete security architecture: gVisor's security guide says a sandbox does not replace secure service design, and the README says it does not harden externally exposed applications by itself.
Non-Linux hosts or unsupported CPUs: installation requires Linux 5.6 or newer and supports x86_64 and ARM64.

Setup reality

Our sandbox installed 396 packages in 43 seconds at commit 4a7fcd5, then built successfully in 19 seconds. go test failed with exit code 1 after 4 seconds, before running any tests: 0 passed and 0 failed of 0 because the command said go.mod needed updates via go mod tidy.

gVisor needs no hosted credential, but a real deployment needs Linux 5.6 or newer, runtime installation privileges, and Docker, containerd, or Kubernetes configuration. Source development uses Bazel, normally through a build container; the README warns that the synthetic go branch is only for importing packages and does not support building runsc.

Application compatibility, filesystem mode, network path, resource limits, and the interception platform all affect production behavior. The release tarball also contains sidecar binaries that must stay beside runsc. Treat it as infrastructure with a staged rollout, not a binary swap across every container.

gVisor intercepts container system calls in userspace

Ordinary containers share the host kernel. A kernel escape can therefore cross the boundary that namespaces and cgroups are supposed to maintain. gVisor inserts its Sentry application kernel between the workload and the host. The container speaks a Linux-like system interface to Sentry, which exposes a smaller, restricted set of calls to the real kernel. runsc implements the OCI runtime interface, so Docker and Kubernetes can select this sandbox without changing the application image.

This design sits between runc and a conventional virtual machine. It does not boot a guest OS or emulate CPU instructions, but it reimplements a large Linux surface in Go. Our checkout contained 4,197 files, about 874,491 source lines, and 66.6 MB before dependencies. That size reflects an application kernel, network stack, filesystems, runtime, tooling, and platform integrations. Teams should evaluate it as a security subsystem, with upgrades and compatibility tests, rather than as a minor Docker option.

Compatibility stops short of full Linux behavior

gVisor's documentation says the only reliable compatibility test is running the actual container. Common language runtimes receive regression testing, and unsupported syscall variants often have fallbacks in their libraries. Gaps remain by design and by implementation. In-sandbox cgroups account for CPU and memory but do not enforce limits between processes in one sandbox. Block-device filesystems cannot be mounted inside it, iptables support is partial, io_uring is limited, and KVM cannot run inside the sandbox.

Those restrictions matter for infrastructure software that probes kernel features or manages devices. Issue #14470, updated August 28, 2026, reports a bind-mount regression for one root-path arrangement. One report does not establish general failure, but it is the kind of integration detail a staging suite should catch. The repository had 9 CI workflow files and a tests directory in our scan. That upstream coverage cannot substitute for booting your own images, exercising storage, and confirming shutdown plus restart behavior.

What happened when we ran it

Our sandbox installed 396 Go packages in 43 seconds at commit 4a7fcd5. The build succeeded in 19 seconds. The test step failed with exit code 1 after 4 seconds, before a test ran: the summary was 0 passed and 0 failed out of 0. This is a failed command, even though it contains no failed assertion.

The final log said updates to go.mod were needed and instructed us to run go mod tidy. We did not change the checkout, so the measured test command stopped there. The README explains that gVisor uses Bazel for builds and dependency management, while a synthetic go branch supports consumers importing selected packages. On our 3-CPU, 8 GB Debian box, the 19-second build result and 4-second go test failure describe different paths and should not be combined into a general quality claim.

Filesystem and network costs decide workload fit

System calls cross extra software layers, and Sentry keeps its own state. The official performance guide separates those structural costs from implementation costs in subsystems such as the network stack. CPU instructions still execute natively, so compute-heavy application code can be a good match. Calls that repeatedly touch files, sockets, or kernel services expose more of the isolation overhead. The production guide identifies file I/O as the most affected area and networking as the next.

We did not benchmark runtime throughput, latency, memory, storage, or networking in this lab run. Its measured scope was a 43-second package install, a 19-second build, and the failed 4-second test command. Any performance number borrowed from another machine would mislead a purchasing decision. Run a representative request mix under both runc and runsc, including cold starts and noisy neighbors, then price the difference against the threat model that motivated sandboxing.

Production installation changes the host runtime

The preferred Debian path installs the runsc package and configures Docker automatically. Manual installation puts runsc, the containerd shim, and a gvisor-bin directory on the host. Those sidecar programs must remain next to the runtime binary. Adding runsc to Docker requires elevated access and a daemon reload; Kubernetes requires a runtime class and container-runtime wiring. Linux 5.6 or newer on x86_64 or ARM64 is the supported base.

Source work is heavier than the successful 19-second build in our Go-oriented harness suggests. The README recommends its build container around Bazel, and direct Bazel use requires a matching version. Production also needs logging, runtime monitoring, upgrade procedures, and an escape hatch for incompatible images. Roll out by workload class. A public code runner and a trusted internal database do not have the same exposure, while sandboxing both can impose cost where little isolation value is gained.

Weekly releases and current commits show active maintenance

GitHub recorded 19,181 stars, 836 open issues and pull requests, and a push on August 28, 2026. Release 20260817.0 was published August 25 with filesystem, networking, GPU, checkpoint, and rootless Podman changes among its listed work. That combination shows active engineering and triage. The combined open count includes pull requests, so it should not be presented as 836 bugs.

For a multi-tenant platform, gVisor offers a meaningful isolation layer while preserving familiar container packaging. Its limits are documented more candidly than many infrastructure projects: Linux compatibility is incomplete, I/O can slow down, and sandboxing does not repair an insecure service design. Our 396-package run built cleanly but never entered tests because of the module-file check. Adopt it only after the exact images and workload paths pass under runsc; that is the price of gaining distance from the host kernel.

Alternatives

ProjectWhat it isPick it when
Kata ContainersAn OCI runtime that isolates containers inside lightweight virtual machines.pick this instead when a hardware-virtualized guest boundary is worth the extra VM machinery.
Firecracker gh↗A microVM monitor built for dense, short-lived workloads.pick this instead when you control the orchestration layer and want a minimal VM boundary rather than OCI compatibility through an application kernel.
runcThe standard low-level OCI runtime using the host Linux kernel directly.pick this instead when workloads are trusted and native compatibility plus I/O performance matter more than another isolation layer.

What people are saying

  1. [github-trending] google/gvisor

Sources

  1. gVisor README
  2. gVisor installation guide
  3. gVisor application compatibility
  4. gVisor production guide
  5. gVisor security model
  6. gVisor 20260817.0 release
  7. gVisor issue 14470

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →