A ver, vamos por partes. Lo primero, es que con un lenguaje script no puedes programar un kernel (si no sabes lo que es, no sigas leyendo...). Hablas de ruby como si fuera un dios, y es de los lenguajes scripts más lentos... (hay que destacar que es más nuevo que los otros)
Por lo que tengo leído el más rápido de todos es python. Sería algo así: Python > Perl > PHP > Ruby...
Java necesita una máquina virtual para funcionar. La más conocida es la Java Virtual Machine de Sun (ahora de Oracle) y recientemente está la máquina virtual Dalvik de Android.
Assembler es fundamental para programar un kernel, después para programar ciertas partes del kernel puedes usar otros lenguajes como C, C++, Pascal, pero siempre lenguajes compilados. Una vez tengas hecho el kernel, podrías programar un intérprete de algún lenguaje script o utilizar una máquina virtual, lo segundo es muy viable y de hecho lo hace Android.
Si quieres crear un so de la nada no tenes otra forma que con C y Asm para los drivers, de ahi implementas alguna plataforma y saltas al lenguaje que quieras. Mira que es largo y tedioso aun siendo teorico para una sola persona....
Puedes hacer el kernel en ASM puro o ASM y Pascal (los Mac OS viejos estaban programados en Pascal).. no tiene porqué ser C y ASM a la fuerza.
Para que te des una idea, android esta hecho en java y c
Android es un Sistema Operativo con el kernel Linux programado en C y ASM. La máquina virtual Dalvik debe de estar programada en C y ASM, por el tiempo que les llevó portarla a la plataforma x86. Después, con Java llamas a la API del sistema Android.
Saludos.