So currently I try to get a overview of all the ways to input vertex data layouts. And I still don't know how much to use or avoid VAOs.
Because I try to make a class with a unified interface. I would use VAOs for the layout only and then switch Buffers all the time. Meaning I would not make a VAO for each layout-buffer combination.
And I think that would kill most of the performance benefits VAOs may have, except for ARB_vertex_attrib_binding where I can switch all buffer bindings with a single call.

Also I read that in beginning with some Core GL Version like 3.1 or 4.0 you must use VAOs, but could not find it in the specs so far. Maybe somebody could point me to it?

So shall I change my design to use VAO for each buffer combination or only use them if ARB_vertex_attrib_binding is available? Or am I forced to use them with some Core versions?