Da ich selbst bereits ein Betriebssystem programmiert habe und seit längerem an meinem zweiten OS arbeite, weiß ich es. Es gibt übrigens mehr Hobbyprogrammierer als man denkt, die so etwas machen und es ist einfacher, als die meisten denken:
Ohne Assembler für den entsprechenden Prozessor kommst du auf gar keinen Fall aus. Gerade in der Initialisierungsphase des OS müssen Dinge gemacht werden, die man nur direkt in Assembler hinbekommt.
Es gibt ein Freeware-Betriebssystem mit grafischer Oberfläche, das komplett in Assembler geschrieben ist; da größere Programme in Assembler aber sehr unübersichtlich sind und es schwerer ist, Programme in Assembler zu schreiben als in einer Hochsprache, wird ein Großteil eines Betriebssystems in C geschrieben.
C ist diejenige Programmiersprache, die sich am einfachsten mit Assembler mischen lässt. Außerdem bietet C von sich aus die Möglichkeit, auf bestimmte Hardware-Adressen zuzugreifen, was bei einem Betriebssystem natürlich absolut wichtig ist.
C++ wird deswegen nicht verwendet, weil es sich nicht so gut mit Assembler mischen lässt; außerdem kann man einige C++-Features (z.B. das Schlüsselwort "new") in einem Betriebssystem an vielen Stellen nicht einsetzen. Außerdem verwenden C++-Compiler bestimmte Funktionen, die für bestehende Betriebssysteme bereits fertig programmiert sind. Diese muss man für das eigene Betriebssystem dann erst einmal selbst programmieren.
Sprachen wie Java oder C# kann man gar nicht verwenden, da diese Sprachen - sehr stark vereinfacht gesagt - völlig darauf ausgelegt sind, dass die Programme, die in diesen Sprachen geschrieben sind, von einem anderen Programm aus gestartet werden (z.B. der "Java Virtual Machine").
Fazit: Um ein Betriebssystem schreiben zu können, braucht man Assembler und C.
Übrigens: Bei Dev-Cpp sind prinzipiell alle Tools, die man zum Schreiben eines Betriebssystems braucht, dabei - wenn auch etwas versteckt (bei Visual Studio nicht).