Java :- Great idea, killed by bad management.
The whole idea of java was the platform independence. Then they started changing the VM so much that you had to do versions for a specific JDK, which made it platform dependant again. Just plain stupid.
C# / .Net :- Lovely to work with, but under threat.
I have had emails from people inside MS saying that .Net may be dropped, I think someone even did a press release saying that. Though I think it was recanted. Not sure what is going on anymore.
Unity seems to be the front runner at the moment, though I haven't looked at it for a while. We dropped it after talking to the developers about putting it on AGP. They were not very easy to talk to.
There seems to be two techniques in use at the moment. Compile time and run time independence.
Compile time you hit a button and get a version for a platform, hit another and get a version for a different platform.
Run time you have a single version that is translated to the target platform when loaded into memory.
Unity is compile time isn't it?
Antix game player is run time.
Any others? Might be worthwhile making a list.