OmarHack, es una muy buena idea; de hecho es tan buena que ya se ha intentado hacer antes pero sin los resultados esperados. Te explico:
JAVA compila con ese formato universal al que tú te refieres, que es un código de bytes que representa operaciones del procesador y los datos que procesará el mismo. Sin embargo hay un problema al hacer esto y es que lógicamente necesitas de un intérprete de esas órdenes que es la máquina virtual de JAVA.
Microsoft fue un paso más allá con el .NET Framework y su compilador JIT (Just In Time) que compila el "código universal" según el procesador y el sistema operativo de la computadora en cuestión, de esta manera se elimina el intérprete (o parte de él) en tiempo de ejecución.
Ahora dime, ¿vas a hacer una máquina virtual desde cero para cada sistema operativo y procesador que se te ocurra? ¿De verdad tienes tantos conocimientos en programación como para intentar hacer al menos la mitad de este proyecto? ¿Ya te has puesto a pensar en el trabajo de adaptar las APIs entre cada sistema operativo o crearlas desde cero en caso de que alguna no exista?
No quiero decirte que no lo hagas, pero de verdad me parece mucho para tan poco, es decir, para mí realmente basta con recompilar para otro sistema operativo y dar a elegir entre dos o más enlaces de descarga.
Disculpa, pero hay que ser realistas. Un saludo y suerte si lo piensas hacer.