# _ _ _ _ _
# | | | |_ __ (_) | _____ _ __ _ __ ___| |
# | | | | '_ \| | |/ / _ \ '__| '_ \ / _ \ |
# | |_| | | | | | < __/ | | | | | __/ |
# \___/|_| |_|_|_|\_\___|_| |_| |_|\___|_|
#
Up until the rise of virtualization to popularity, the concept of running a kernel for a solitary process was counterproductive and highly problematic, but now things have changed. As technology moves closer to isolating all processes in self contained virtualized environments, the unikernel is an essentially part of this developmental progression, because it provides the foundation for which truly self contained environments can be built upon.
Unikernels come in different forms; language specific unikernels, Linux compatible unikernels, and Posix compliant unikernels. The latter two are generic unikernels. A handful of language specific unikernels are available for programming languages. Rust, Ocaml, Go, ErLang, Pascal, Java, C++, NodeJS and Haskell have unikernels specifically designed to support those languages. Java’s jvm is thought of as a unikernel.