Najbardziej podstawowe funkcje (bootowanie, przerwania itp.) są pisane w Asemblerze i w C. W miarę rozwoju można używac coraz bardziej abstrakcyjnych języków. Na początku będzie ciężko kożystać np. z obiektowości, ale w miarę rozwoju systemu będzie można używać coraz więcej języków.
Najlepszym przykładem będzie tu chyba Singularity OS, którego najbardziej podstawowe funkcje były oczywiście pisane w językach natywnych, ale duża część jest pisana w C#. Moim zdaniem (nie sprawdzałem tego) autorzy napisali .NET VM w języku natywnym, a następnie wszystko inne już działało w maszynie wirtualnej.