I know that some ATI cards will fallback to software rendering if a 24-bit color array is used. Does anyone know if using GL_BYTE for the normal array data type will cause the same problem? I would prefer to do without a vertex attribute, if possible.
Erm, software-mode AFAIK not, but it will definitely be slow (tested that half a year ago).
It’s better to use GL_UNSIGNED_BYTE with 4 components and unpack the data into the [-1;1] range manually in the shader. Maybe you even find some useful data, that you can store in the fourth component.