For VMs, security is the one concern, the others would be more direct access to lower levels and greater access to the hardware and internals than just a driver model.
For containers I'd say that the abstraction/interface presented to an application was too narrow: clearly network and filesystem abstractions needed to be included as well (not just memory, OS APIs and hardware abstractions).
I imagine that an OS from the far future could perform the functions of a hypervisor and a container engine and would allow richer abilities to add code to what we consider kernel space, one could write a program in Unikernel style, as well as have normal programs look more container-like.
Projects similar to this exist today with https://nanos.org/.
You can run any typical web app (without having to re-write it) in a POSIX compliant Unikernel on most major cloud providers and bare metal. Each service runs in its own Unikernel.
I had its creator on my podcast the other day at: https://runninginproduction.com/podcast/79-nanovms-let-you-r...
Sadly, two generations of programmers probably need to die first, before we adopt the RnD that's been done in the last decade or three, or for what's been done the systems that languish in the shade of UNIX to be done again in the mainstream.
People run containers with host networking and bind-mounting everything and nobody minds.
(The story for hosting providers is a bit different, but they're not the main driver for Docker adoption.)
Also- just about EVERYTHING is built on top of these current layers)
There has to be a microkernel at the bottom of everything, which rules out anything Linux based. Genode does use Linux drivers though, in a contained way.
I love their approach to hierarchical distribution of resources.
I'm embarrassed to admit that I haven't actually booted and played with it yet.
I liked the direction Joyent was taking with Iluminos and Triton.
Problem is the fact that the tech is tied to a market, which has different rules and rates of evolution.
Best bet for a refactor is with a new market/platform.
You can provide the same level of replication and separation of dependencies in an OS, but at a certain point you're just creating the same thing as a hypervisor and calling it an OS and the distinction becomes academic.
You delegate $5, nothing more than $5 can possibly leave your wallet as a result.
AppArmor is like putting a vault around the ice cream truck and giving a strict list of who is allowed to buy what ice cream. Hardly the same thing.
It's better to use a modern DevOps stack involving Kubernetes, Ansible, YAML, Jinja2, Python, cron jobs, regexes, shell scripts, JSON, Jenkinsfiles, Dockerfiles, etc.
Containers, yes. They are a pure namespacing trick, and can be replaces by cap-based security completely.
It allows you to divide up physical computing power across multiple people/organizations etc.
Containers make this kind of distinction far more hazy.
Hypervisor is not the standard, it's one of the many ways people do it right now.
It's going to take a decade to refactor things to remove that layer. Once done, you'll be able to safely run a process against a list of resources.