OpenGL Profiles explained
JOGL 2 supports several OpenGL Profiles. This entry explains what profiles are and why they are needed.
SGI released the first OpenGL specification 1992. Since this point OpenGL 1.x constantly evolved (under the ARB and later Khronos Group) by adding new functions to the core API. This went well until programmable graphics hardware became mainstream and shaders became suddenly more flexible and efficient as the generic fixed function pipeline.
It was the last version in which you could freely mix the fixed function pipeline with the programmable pipeline (as a core feature).
With the release of OpenGL 3.0 the whole fixed function pipeline has been deprecated but you could still use it if you haven't requested a forward compatible context.
OpenGL ES 1.x and ES 2.x
It specifies a subset of OpenGL intended to be used on embedded devices. ES 1.x is a subset of the OpenGL fixed function pipeline, where ES 2.x is a subset of the programmable shader hardware only.
OpenGL 3.1 and 3.2
It removed most deprecated functionality from core specification, however some implementations (e.g. Nvidia drivers) still allow to get them back via an optional compatibility extension. Since 3.1 was the first release which broke compatibility, it is often seen as major OpenGL 3 release.
JOGL 1.1.1 lived in the timeframe up to OpenGL 2.1 which made it easy to stay in sync with the spec. To be able to solve the issue with the deprecation of functionality,
JOGL 2 introduces an abstraction of the original OpenGL versioning called Profile. Profiles allow Java applications to be written in a way which allows compatibility with multiple OpenGL versions at the same time. Since OpenGL ES (GL for embedded systems) has overlapping functionality with OpenGL itself it opened the opportunity to add even Profiles which bridge desktop and embedded implementations. The class diagram below shows the dependencies between all available Profiles.