Недавно узнал об интересной альтернативе - forth. Интересным моментом является такой факт, что в принципе язык можно сразу использовать вместо командой оболочки для ОС. Но это просто для поиграться и повелосипедить, если что-то практическое, то это C, C++ и ... всё остальное, что компилируется (в довесок ко всему смотрите LLVM frontend list)
В принципе, почему Си хватает - да потому что железо в отношении к ОС выступает часто в виде конечных автоматов, что как бы жёстко связывает руки писать в рамках стуктурно-ориентированного кода. ООП просто не нужно, и если язык был спроектирован под разработку прикладных программ, то там слишком много бесполезного с точки решения задачи написания ОС. Учитывая простую модель памяти Си, очень легко контролировать состояние кэшей всех уровней, а учитывая десятки тысяч часов, вложенных в gcc, писать что-то практическое, кроме как на assembler, толку нет (см. KolibriOS).
Исходите из того, какой контекст исполнения для вашей ОС вам интересен - если это не железо, то может быть какая-то виртуальная машина.
Хотя, если исходить из совсем практических соображений, то лучше не писать ОС, а написать несколько модулей ядра для Linux.