[Extension] ARB_separate_shader_objects [Details] 
Program objects may be separately associated with each of the five shading stages, instead of using separate shader stages linked into a monolithic program object. The extension also introduces glProgramUniform, which accepts a program object as parameter, thus enabling direct access to program's uniforms.