One of the interesting capabilities of Solaris zones was the ability to run older versions of Solaris than that in the global zone. Marketing managed to mangle this into Containers, and it was supported for Solaris 8 and Solaris 9.
I used this extensively on one project, to lift a whole datacenter of ancient (yes, really ancient) Sun servers into zones on a couple of T5240s. Worked great.
Ah yes, Solaris. One of Larry Ellison’s many, many casualties.
Tribblix is a Solaris distribution that should feel familiar to longtime Solaris users, but with a set of modern packages on top.
We used this “feature” as well, but then noticed that as things moved “forward” Solaris wise, they would drop version support in their containers (sigh). Which meant, we had to run multiple OS levels for older zone support (sigh again).
In a way, I don’t miss Sun and Solaris. And yes, I know there is S’noracle…. but might as well be dead.
Linux has a similar backwards compatibility problem which it tries to hide using OS version-specific “repositories” which host “known good” versions of apps that work with the particular OS version. Fortunately most business apps are Java (Sprintboot) and Python nowadays…
This post is about zones, in Linux the equivalent would be containers.
And the Linux kernel ABI (what a Linux distribution does depend on to run) is pretty darn stable, so old distributions on newer kernels would normally just work.
So I have no problem running fairly old Linux in a container on latest Linux distribution.
The oldest still running Linux container I have is a Debian 5 (release date in 2012). Pretty certain much older should be possible.
Lennie,
+1
The kernel userspace ABI is extremely stable.
When there are incompatibilities, it’s almost always in-kernel ABIs, or userspace dependencies akin to “DLL hell”.
Possibly best thing Linus ever did: ABI stability for userspace.
For laughs I installed Debian 2 / Hamm released 1998 x64 in a Qemu/KVM VM (7 1.44 floppies) on an amd64 host.
I had to install Debian 3 in a VM (6 1.44 floppies (first boot floppy is used a second time to copy the kernel for the base system) and a archive.debian.org as mirror) to be able to read the old partition table and have working networking support to use tar and ftp to copy it to the host (ssh and rsync both aren’t compatible with newer versions).
And I can run it just fine in an LXC-container, all things work (as well as in the VM), except ps, vmstat and top I get a bus error. Not sure if it’s the LXC-configuration or the Linux kernel. Haven’t checked yet.
Lennie,
One of the first things I do in such instances is to run strace to see what the process was actually doing. I’m not sure when strace became available, but you maybe you can use a copy from the host OS to trace guest processes.
I had actually run strace, but didn’t immediately understand the problem.
Just checked again and figured it out, inside the LXC-container by default it reports the size of the memory of the host. When I quickly create a Debian 10 VM and run the Debian 2 LXC-container: then ps, vmstat, top just work because the LXC-host memory (the size of the VM 4GB is to big 2GB is fine) is smaller and doesn’t crash those utilities. 🙂