(user): Reimplement in terms of std::call_once once c++11 is available on all platforms, and/or deprecate. Note that even once it is available, caution may be advised as some platform implementations may be very bad...
(user): Actually support the following text in Ion. In OpenGL 3.1+/ES3+, UniformBlocks also share the same storage buffer object, even across multiple shader programs; simplifying the sending of uniform values to GL for multiple programs. This can vastly increase the speed of switching large sets of uniforms at once since the cost is only the const of a single value change.
(user): Support interface blocks and buffer-backed UniformBlocks; make UniformBlocks require a block name and possibly require a BufferObject in the constructor.