Was about to blog this, but a heated debate is probably more fun.
There are many advantages and disadvantages. Since we all know about those obvious things, I’ll skip that.
The biggest real problem isn’t startup, download size, nor penetration. It’s a relatively small implementation detail: if you’re inside the sandbox you can only connect to the host you came from. Of course this a very sensible thing to do. E.g. you can’t get past the firewall, connect to localhost, and exploit some vulnerability of any of Windows’ services.
So, what’s the problem then?
It’s advertising. With Flash you can use MochiAds and the like. In a nutshell:
- you only add one file and one line of code
- ads are shown before the game or between levels
- ads are loaded from a different place
- ads can be changed later on (globally - for all copies)
- you can give your game away for free and earn even more money
- you can disable the ads on a per domain basis (e.g. don’t show ads on a licensee’s page)
Plain awesome, isn’t it? With Java this simply isn’t possible. So, you can only license your game and if it gets copied you’re losing ad revenue. All you can do is adding domain specific unlocks, but that means doing domain specific builds. But all that pain doesn’t necessarily yield any extra income. It only reduces the amount of unauthorized copies. Meh.
Leaving the move to Flash option aside, there are two possible solutions:
a) Allow port 80 connections even if sandboxed in upcoming versions of Java.
b) A hosting/advertising service, which takes care of both. E.g. Sun+Google, Amazon+Google or just Google.
Personally I prefer the first option. The second one isn’t that bad but it’s a bit of a mixed bag, since you have to cover the hosting expenses for all websites which use your applet. On the flip side it’s backward compatible and would work right away.