>java8以前のプログラムを、再コンパイルなしで、
>java9でも問題なく使うにはどうするのか

たぶん、Java8, Java9 のコンパイル済みバイトコードの互換性が無いんだろ