Here is what I find on the OpenGL spec that made me mad:
From OpenGL 3.3 spec, section E.2.2 Removed Features
Client vertex and index arrays - all vertex array attribute and element array index pointers must refer to buffer objects. The default vertex array object (the name zero) is also deprecated. Calling VertexAttribPointer when no buffer object or no vertex array object is bound will generate an INVALID_OPERATION error, as will calling any array drawing command when no vertex array object is bound.
So VAO are not only completely annoying, useless, inefficient (and sometimes imply a cost) but they are also REQUIRED in core specification. So far I was happy to just ignore the it but apparently I can’t. Damn.
(I guess my sugession here is to add a section in the spec: section E.2.3 Evil Features… or update it)