Oui et non !
Je vais pas dire non : il y a même un "OS" en
C#.
Mais pas qu'en C# !
En fait, lors de la création des couches basses de l'OS, le développeur doit avoir un contrôle très précis sur le code machine qu'il génère. Le langage source offre plus ou moins de contrôle sur ce que l'on peut faire. L'assembleur est en fait le seul indispensable, car il permet d'accéder à certaines instructions processeur spéciales.
Mais l'assembleur, c'est quand même assez pénible ! Peu d'applications sont écrites entièrement en assembleur. D'autant qu'elles sont généralement en macro assembleur, qui est déjà de plus haut niveau (En gros, des instructions non assembleur sont traduites en assembleur avant le passage en code machine).
C'est là qu'intervient le C. Le C est plus facile à écrire et à lire que l'assembleur, mais son processus de compilation reste très simple. Donc on peut "facilement" faire un compilo C pour un nouveau processeur par exemple. On peut aussi deviner assez facilement les instructions machines qui vont être générées, sans surprises.
Le C++ est beaucoup plus difficile à compiler (C'est peut être le plus compliqué !) et le code généré est beaucoup moins prévisible (Enchaînements de constructeurs, redéfinitions d'opérateurs...). Et il est moins performant.
Donc pourquoi faire compliqué et lent quand on peut faire simple et rapide ?
(Surtout que dans le cas d'un OS, c'est jamais simple et rapide...)