That makes sense. Guess the examples I saw of making main private were older, which is why they don't work on my JVM.
I'm not sure how packages impact the scope of main. Sure, it can have package scope, but that wouldn't lead to runtime errors (in fact, as the OP pointed out, the requirement that main be public is relatively new to the language). His question is, why did Java make the switch?
I did some more research, and this is the brunt of my findings:
Cafe au Lait Special Report: Non-public main() method
Apparently, Java originally required main to be public, as it does now. Then there were a few versions that did not enforce that rule, which may or may not have been a bug. For more info, check out the discussions in this bug report:
Bug ID: 4252539 private void main(String[] args) not checked by jdk1.2 vm
And although there is no "why" section, the JLS does indeed require that main be public:
Execution "The method main must be declared public, static, and void."
I hope that helps. But the answer to your original question of "why" is still mostly "because that's the rules". We could come up with logic saying that letting private methods be available violates OOP principles on which Java is founded, or that forcing main to be public makes it easier to do testing, compounding, and scripting of programs. Or we could come up with logic arguing that main should be allowed to be private. Either way, it doesn't matter. It is the way it is. It's like saying, why is ArrayList called ArrayList and not ListArray? That's just what the language designers decided. There might be logic behind it, and there might be arguments against it, but it doesn't change the fact of the matter.