Containers are practically a linux thing. The specs to run containers are open (Open Container Initiative). That's why if you aren't on linux, the most common solution is to virtualise linux or add a layer that translates linux syscalls to those on the host OS (e.g windows subsystem for linux). Once the linux environment exists you have multiple orchestrators (docker, podman, kubernetes, etc.). They all either have their own runtime or use an existing one (runc, crun, youki, ...).
I haven't read the OCI specs, but IINM containers are built upon linux primitives (namespaces, cgroups, and I forget the rest).