It works on NVIDIA cards because NVIDIA is not implementing the OpenGL specification properly.
glVertexAttrbDivisorARB only works on generic attributes. That is, user-defined shader attributes. It does not work on any attributes other than those specified by glVertexAttrib(I)Pointer.
NVIDIA has long implemented the behavior of attribute aliasing. That texture coordinate zero also has the attribute index 8. That the vertex position has the attribute index 0.
The problem? The OpenGL specification does not allow this. It specifically requires implementations to fail and give an error if you try it. When you call glDraw* with these arrays set up, your implementation should give you an error.
Sadly, you got caught in the NVIDIA trap: using non-spec behavior that just so happens to work on their drivers. I imagine you must have gotten the idea from some NVIDIA paper. So now you have to go change all your code to use user-defined attributes instead of the built-in ones.