Okay now I get it! So most of the code is backwards compatible till OpenGL 3.0.
That is correct. The compatibility mode of the modern API lets you extent the backward compatibility of the legacy API to version 3.1 even.
The modern API is mostly backward compatible as well, although there are some changes that makes it not. For example, vertex array objects (VAO) are not required in version 3, but are in version 4. That means that you cannot run a version 3 compatible program on a version 4 context. But that change is trivial; just use VAO in version 3 as well and you will have no problems with version 4.
Just out of curiosity, client/server side is this applicable to most graphic libraries (such as directX)?
I have no idea whether Direct3D makes the difference explicit in some way or not. I would, however, guess that pretty much the same requirements on memory management applies to both Direct3D and OpenGL: manual memory management is not possible, you have to let the API handle your resources.
K so that clears most of it. To recap you simply have 2 "packages" (if I may call it this way):
Will the core always be the same? As all deprecated methods were removed?
- The Core package
- The Compatibility (which was introduced in 3.2)
The core changes, but (with few exceptions, see for example my comment above on VAO in version 3 and 4) new stuff are only added. What works on an earlier version typically works on a later version as well. Only exception of course is the major change from the legacy API to the modern API.
The compatibility mode was introduced in 3.0 though. From version 3.2 and onwards, compatibility mode is not available. Thus, it is only available for the modern API for versions 3.0 and 3.1.