CRI-O and Open Container Initiative
Kubernetes initially worked with Docker only, but some time later Rkt by CoreOS came into the picture and they wanted to be supported by Kubernetes as well. Therefore, you have to develop a CRI for every additional Container Runtime. Nowadays, different container technologies are often introduced. This solution is not really scalable and adds a lot of complexity and instability to the whole solution.
That is how CRI-O was brought into the picture. CRI-O stands for OCI-compliant Container Runtime Interface, and OCI stands for Open Container Initiative. The Open Container Initiative is an Open Source community project that designs open standards for Linux Containers. This is what allows Kubernetes to use any other OCI-compliant Container Runtime to run pods.