Možnost dekompilace není vlastností Javy, ale vlastností s JDK dodávaného překladače javac. Dá se jednoduše zajistit, abyste z bytekódu nepřečetl zpětně nic, pouze samotné instrukce.
Ne, bytecode jde zpět na javu relativně dobře (oproti překladu z assembleru do céčka). Začíná to tím, že každá třída je uložena v extra souboru. Veřejná rozhraní jsou čitelná, pač jsou přístupná přes i reflexi. Takže jediné, co nejde dohledat jsou názvy lokálních proměnných.
Tedy pokud se nepoužije obfuskátor, ale jeho použití bych od zastánce ST nečekal
JRuby nepřekládá do java bytecode. Ruby totiž ani žádný bytecode nemám, originální interpreter interpretuje AST.
JPython (Jython?) si myslím je taky jen reimplementace CPythonu v Javě.