This episode reviews the history of LXC from its initiation by IBM and kernel developers in 2008 to its governance under Linux Containers. You'll also understand why system containers are needed: far lighter than VMs, sharing the kernel, starting up in seconds, and requiring no hypervisor.

Now that our environment is ready from episode 0, it's time to understand why LXC exists. Every major technology is born from a real problem, and LXC is no exception. In episode 1 we trace its history back to 2008, its evolution into a project now governed under Linux Containers (linuxcontainers.org), and the concrete reasons why system containers are needed in the modern virtualization world.
The questions we'll answer: what was wrong with virtual machines that led kernel developers to create a new technology? Why is LXC different from Docker? And why is LXC still relevant when "container" is now synonymous with Docker? These answers determine when you should choose LXC in production.
LXC has been developed since 2008, initiated by IBM together with kernel developers. Its foundation isn't magical new code but two kernel mechanisms maintained directly inside Linux: namespaces (resource isolation: PID, mount, network, UTS, IPC, user) and cgroups (resource limiting). LXC was the first to combine the two into a usable interface for running a complete Linux distribution as a container.
Its philosophy is simple: why virtualize hardware when the kernel can already share itself safely? This is what sets OS-level virtualization apart from full virtualization — no emulation, no hypervisor, just a single kernel isolating multiple user spaces.
After years of community and vendor stewardship, the project now lives under Linux Containers (linuxcontainers.org), the organization that also oversees LXD, Incus, and lxcfs. LXC itself is a low-level runtime written in C, whose main interfaces are the liblxc library and CLI tooling. This is the layer that underpins all the tools built on top of it.
LXC follows a two-yearly LTS release cycle with strict semver. As of this writing:
If you're reading this series in 2026, the "7.0 LTS" number we use throughout the episodes is the newest stable release.
The most fundamental difference: LXC is a system container. It runs a complete Linux distribution — with its own init (sysvinit or systemd), its own user space, and its own services — just like a VM, but without a hypervisor. Each container has its own init as PID 1, can run SSH, cron, or a web server, and boots like a regular machine boot.
Because it shares the kernel with the host, LXC needs no hardware emulation, no guest BIOS/UEFI, and has no hypervisor overhead. The result:
Think of it like an apartment building: a VM constructs a new building complete with its own foundation (kernel), while LXC divides one building (kernel) into isolated yet space-efficient units (containers).
There's no QEMU/KVM to maintain. Containers run directly as isolated host processes using namespaces. This simplifies operations, reduces the hypervisor attack surface, and makes CPU and I/O overhead nearly zero.
An interesting piece of history: Docker once used LXC as its runtime driver in early versions, until Docker 0.9 replaced it with its own libcontainer library and Docker 1.8 completed the transition. So LXC was the true "container" before the word was hijacked to mean application containers. Docker then became an application container — focused on a single process/application — while LXC remained a system container — focused on the distro and init.
Note
Don't confuse the two: LXC and Docker both use kernel primitives, but their models differ. LXC runs a full distro with its own init; Docker runs a single application without a full init. They complement each other — you can even run Docker inside LXC (we cover this in episodes 12 and 13).
To position LXC, keep the spectrum in mind:
LXC fills a unique middle ground: full initialization like a VM, yet efficient like a container. In episode 22 we'll compare it comprehensively with KVM, Docker, LXD, and Proxmox CT.
Key takeaways:
liblxc).In the next episode 2 we'll break down LXC's core concepts and main architecture — how namespaces (PID, mount, network, UTS, IPC, user) and cgroups (cgroup2) work, along with the roles of liblxc, the CLI tooling, and the configuration directory structure. This is the anatomy that will explain every line of config we use in the episodes ahead.