In every graphics context library there's a list of configs and I have to pick one. Then this config is spread along surface, context, and whatever.

Why opengl context needs to be configured for certain config and it can't pick the config from the read/draw surfaces? And why are we still required to pick from the fixed list of configs? The graphics cards do not seem to care because they usually have about any sensible combination of configs, so why does the developer need to care?

Is an inflexible configuration management some sort of legacy in opengl? If it is, couldn't we get rid of it?