That is what I first figured, that uniforms are ID's and not offsets. One thing that then implies is that when setting uniforms, then there is a one more additional layer of indirection, i.e. translate ID to offset (or something).

That the mat4 was only one ID kind of irked me: in GLSL one can set a column of a mat4 matrix, but there is no GL call to just set the column of a mat4 matrix, if a mat4 took 4 ID's then one could, along the same lines setting one value of vecN is a vecN took N slots (then to go further then, a mat4 takes 16 ID's), and this does not address one still needs a way to differentiate between setting the entire element or just it's first sub-element.... pointless for me to talk of this anyways since the uniforms are handled via an ID, not an offset and for that matter the GL spec has this:

A valid name cannot be a structure, an array of structures, or any portion of
a single vector or a matrix.
Though the naming convention in the GL spec kind of suggests "they are offsets" (glGetUniformLocation)... the GL spec language for getting uniforms is kind of icky too, as one passes an "index":

void GetActiveUniform( uint program, uint index,
sizei bufSize, sizei *length, int *size, enum *type,
char *name );

where 0<=index<ACTIVE_UNIFORMS. Here the value of index has really nothing in common with the ID of a uniform.

Though, since there is this layer of indirection, no reason, except for the inckiness of handing structs, for GL API to not have something like "GL_explicit_uniform_location", as Grouvnet has been saying before.