Question: I'm looking at the OpenGL wiki page, and I was curious about the following line:

> 
> For reasons that are ultimately irrelevant to this discussion, you must
>  manually load functions via a platform-specific API call. This boilerplate
>  work is done with various OpenGL loading libraries; these make this process 
>  smooth. You are strongly advised to use one. —[OpenGL Wiki](http://www.opengl.org/wiki/Getting_started#Getting_Functions)
> 
> 
> 

Intuitively, you would think they would just provide a header for you to include. So, what are the historic reasons for this?

**EDIT :**  

Thanks for the answers, I see now that that OpenGL supports multiple implementations of its functions, so there is no one single DLL/SO that everyone links to. I also found these quotes helpful:

* `The OpenGL library supports multiple implementations of its functions.` [From MSDN](http://msdn.microsoft.com/en-us/library/dd374386%28v=vs.85%29.aspx)
* `To accommodate this variety, we specify ideal behavior instead of actual behavior for certain GL operations.` [From GL Spec](http://www.opengl.org/registry/doc/glspec30.20080923.pdf)
* `When you run your program, opengl32.dll gets loaded and it checks in the Windows registry if there is a true GL driver. If there is, it will load it. For example, ATI's GL driver name starts with atioglxx.dll and NVIDIA's GL driver is nvoglv32.dll. The actual names change from release versions` [GL FAQ](http://www.opengl.org/wiki/FAQ#Is_there_an_OpenGL_SDK.3F)

I also found that Intel doesn't provide up-to-date implementation for OpenGL, so even though I have an i7-2500, I only have OpenGL 3.0 :(.

Answer: 
It has nothing to do with history. That's just how it is.

OpenGL implementations, by and large, come from some form of shared library (DLL/SO). However, this is complicated by the fact that you don't *own* the OpenGL "library"; it's part of the system infrastructure of whatever platform your code is running on. So you don't even know what specific DLL you might be using on someone else's computer.

Therefore, in order to get OpenGL function pointers, you must use the existing infrastructure to load them.
On the Mac, you don't need to load function pointers, you just include a header and link against the OpenGL framework.