I’ve read the OpenGL 2.0 proposals regarding shader programs. I think the way programs are created and invoked must be similar to the way other opengl objects work. For example, why not using something like:
glProgParameter(target, pname, param)
target can be GL_VERTEX_PROGRAM, GL_TEXTURE_PROGRAM or GL_PIXEL_PROGRAM
when pname is GL_PROGRAM, param is set to point to a program null terminated string buffer.
This will guarantee consistency in OpenGL.