I learned a lonnng time ago that ASSUME makes an A ... well, you probably know that old saw.
Although it doesn't apply in this case, there are a lot of things in GL/OGL/OGLES where it appears you can leave some things out, but, there doesn't seem to be a logical rhyme or reason in the individual cases when that's true. There are some cases where transparency/alpha-channel is optional but, IIRC, at lower levels, it's always required. There are some situations where some kinds of values are automagically set to a particular value (1 and 1.0 are popular do-nothing or default values) as if a uniform had been set without having to actually set it, and other situations where you have to supply values, set a uniform, etc., or weirdness ensues. I've just gotten into the habit of being explicit as that's how life was back in the early days of Original Flavor GL.
It appears that the higher-level, newer APIs tend to be more forgiving, especially in C++ implementations, but, the lower-level, older APIs cut you absolutely no slack, even if they compile without any errors. There can be differences between language implementations, too, even between C and C++, and I don't understand how they both can be spec-compliant.
If I didn't know any better, I would say that some spec authors were being inconsistent just so people would have to buy their inevitable GL bibles and how-to books, but, if I really believed that, I'd be called paranoid (just because we're paranoid doesn't mean they aren't out to get us!
). As I suspect is true for Dom, I sometimes dream of meeting certain spec authors in a dark alley late at night ... insert standard lawyer-required disclaimer that no spec authors were actually harmed in the creation of this comment ...
The best things in life aren't things ... but, a Pi comes pretty darned close!
"Education is not the filling of a pail, but the lighting of a fire." -- W.B. Yeats
In theory, theory & practice are the same - in practice, they aren't!!!