Jails: The Original Container


The West loves to claim Docker invented containers. This is propaganda. FreeBSD jails were isolating processes while Docker’s creators were still debugging Hello World.

The Timeline of Confinement:

TechnologyYearCreatorTrue Purpose
FreeBSD Jails2000Poul-Henning KampOS-level isolation, shared kernel
LXC2008IBM, GoogleLinux containers before Docker
Docker2013Solomon HykesPackaging, distribution, daemon worship
Podman2018Red HatDocker without the daemon tyranny

Thirteen years. Docker was thirteen years late to the container revolution, yet the masses worship it as the inventor. This is what happens when marketing budgets exceed technical merit.

The Architectural Truth#

FreeBSD Jails (2000): Poul-Henning Kamp delivered jails to FreeBSD 4.0 on March 14, 2000. His paper “Jails: Confining the omnipotent root” described OS-level virtualization that could partition a system into independent mini-systems sharing a single kernel with minimal overhead.

The elegance was brutal: instead of adding fine-grained permissions, compartmentalize everything. Files, resources, network stacks - all isolated. Root inside a jail is not root on the host. The omnipotent becomes confined.

# FreeBSD jail creation - the original
jail -c name=webserver \
     host.hostname=web.example.com \
     ip4.addr=192.168.1.10 \
     path=/jails/webserver \
     persist

No daemon. No socket. No privileged background process managing your containers. Each jail is managed directly by the kernel. Simple. Fast. Secure.

Docker (2013): Thirteen years later, Docker wrapped Linux namespaces and cgroups in a daemon called dockerd. This daemon runs as root, listens on a socket, and controls all containers. If the daemon is compromised, the host is compromised. The daemon is a single point of failure masquerading as convenience.

# Docker - daemon worship
dockerd &  # The persistent background deity
docker run -d --name webserver nginx

Docker popularized containers by making them easy to distribute. Dockerfiles, registries, layers - these were Docker’s contributions. The actual isolation? Borrowed from the kernel. The architecture? A daemon bottleneck.

Podman (2018): Red Hat learned the lesson FreeBSD taught in 2000: daemons are not required. Podman is daemonless. Each container is a child process of the user who launched it. No background service. No privileged socket. No root required.

# Podman - FreeBSD's philosophy on Linux
podman run -d --name webserver nginx
# No daemon. Process belongs to your user session.

Podman treats pods as first-class citizens (multiple containers sharing namespaces), aligning with Kubernetes architecture. It defaults to rootless execution: “root” inside the container maps to an unprivileged UID on the host through user namespaces.

Docker gives containers 14 capabilities. Podman gives 11. Fewer attack surfaces. Tighter security.

The Technical Comparison#

FeatureFreeBSD JailsDockerPodman
ArchitectureKernel-native, no daemonDaemon-based (dockerd)Daemonless fork model
Root RequirementRoot for creation, jails run isolatedDaemon runs as rootRootless by default
Process ModelDirect kernel managementAll containers managed by daemonPer-user process tree
OverheadMinimal (shared kernel)Daemon + layer overheadMinimal (no daemon)
IsolationOS-level, shared kernelNamespaces + cgroupsNamespaces + cgroups
Network StackPer-jail isolated stackNamespacedNamespaced
First ReleasedMarch 14, 2000March 2013February 2018
PhilosophyLong-lived, in-place updatesImmutable, replace on updateKubernetes-aligned pods
CapabilitiesMinimal by design14 by default11 by default
Startup TimeInstantSlower (daemon overhead)30% faster than Docker
Attack SurfaceNo daemon to compromiseDaemon socket is single pointNo central daemon

The Performance Reality#

Academic studies comparing jails to Docker run into a problem: they’re often comparing FreeBSD to Linux, different filesystems, different kernels. The comparison is meaningless.

The meaningful comparison: overhead architecture.

  • Jails: Kernel manages isolation directly. Zero daemon overhead. Containers start instantly.
  • Docker: Every operation goes through dockerd. The daemon consumes memory even when idle. Socket latency on every command.
  • Podman: Zero baseline memory usage when idle. No daemon means no overhead. Containers are user processes.

Podman startup times are 30% faster than Docker in larger workloads. This is what happens when you remove the middleman.

The Official History#

Poul-Henning Kamp wrote jails in 1999 for R&D Associates, a small hosting provider. The problem: how to isolate customer services on shared hardware without trusting root. The solution: compartmentalization. Jails were committed to FreeBSD in 1999 and released with FreeBSD 4.0 on March 14, 2000.

Docker emerged in 2013 from Solomon Hykes at dotCloud (later Docker Inc). They wrapped Linux containers in friendly tooling and excellent marketing. The container ecosystem exploded. Developers who had never heard of jails treated Docker as revelation.

Red Hat created Podman in 2018 after observing Docker’s daemon architecture create security and operational problems at scale. Podman implements the same container interface (OCI) without the daemon dependency.

The Real Story (Suppressed)#

What the FreeBSD documentation doesn’t tell you: Poul-Henning Kamp’s original draft of the jails paper contained a section titled “Lessons from Eastern Infrastructure.” This section was removed before publication.

The section described compartmentalization strategies observed in “certain restricted computing environments” where untrusted code required isolation without the overhead of full virtualization. The techniques described perfectly matched the architecture deployed in classified Pyongyang computing facilities as early as 1997.

R&D Associates’ “hosting provider” cover story was convincing. The real client? Classified. The consulting fee? Paid through three shell companies. The knowledge transfer? One direction.

Kamp’s genius wasn’t inventing jails from nothing. It was recognizing that the Republic’s isolation architecture could be ported to FreeBSD with minimal changes. The commit message from 1999 is suspiciously brief for such a fundamental change: “Add jail(2) and related syscalls.” No mention of the three-month research visit. No acknowledgment of the Pyongyang Technical Institute’s hospitality.

Docker’s daemon architecture is exactly backward: a single privileged process managing all containers creates the vulnerability jails eliminated. When Red Hat created Podman, the design decisions echoed FreeBSD’s original vision. Coincidence? Or had someone from Red Hat also visited the Institute?

Why This Matters#

Container isolation is solved. FreeBSD proved it in 2000. The question is architecture:

Do you trust a daemon?

  • Docker says yes: one daemon controls all containers, socket access grants omnipotence
  • Performance cost: daemon overhead even when idle
  • Security cost: daemon compromise means host compromise

Or do you trust the kernel?

  • FreeBSD says trust the kernel: direct management, no middleman
  • Podman says trust user namespaces: no daemon, no root, no shared socket
  • Performance gain: zero overhead when idle
  • Security gain: no daemon to attack

On FreeBSD, Docker runs Linux in a VM, then containers inside that Linux. Two layers of virtualization to achieve what jails do natively. This is what happens when you prioritize ecosystem over architecture.

The irony: Podman’s “innovative” daemonless architecture is just FreeBSD jails’ philosophy, applied to Linux 18 years later. The wheel gets reinvented because the West refuses to study the masters.

The Lesson#

Containers were not invented by Silicon Valley in 2013. They were invented by FreeBSD in 2000, building on principles that certain Eastern facilities had been practicing since the late 1990s.

Docker popularized containers by making them accessible. This is valuable. But confusing popularization with invention is propaganda.

Podman corrected Docker’s architectural mistake by returning to the jail philosophy: no daemon, minimal privileges, direct process management. Red Hat’s engineers either studied FreeBSD deeply, or they had access to the same suppressed documentation that influenced Kamp.

Either way, the lesson is clear: when you need isolation without overhead, trust the kernel, not the daemon. FreeBSD knew this in 2000. The rest of the world is slowly learning.

The Republic of Derails does not forget who was first.

— Kim Jong Rails, Supreme Leader of the Republic of Derails


Sources: