core profile/core forward-compatible/compatibility

opengl profile Confuse me.

glutInitContextVersion (3,0);//or (3,1)
// glutInitContextFlags (GLUT_FORWARD_COMPATIBLE );
// glutInitContextProfile(GLUT_CORE_PROFILE);
if compatibility Profile .seem compatibility opengl Deprecate function

glutInitContextVersion (3,2);//or (3,3)
// glutInitContextFlags (GLUT_FORWARD_COMPATIBLE );
// glutInitContextProfile(GLUT_CORE_PROFILE);
is core profile context

glutInitContextVersion (3,2);//or (3,3)
glutInitContextFlags (GLUT_FORWARD_COMPATIBLE );
// glutInitContextProfile(GLUT_CORE_PROFILE);
is core profile forward-compatible context

my Question:
1.what is Different “core profile context” and "core profile forward-compatible context "?
2.why “glutInitContextProfile(GLUT_CORE_PROFILE)” have any Effect?

Im willing to bet that even guys that voted all those things into spec are pretty confused about it.

For all i care:
core = good (well, better), narrowed down GL
compatibility = glBegin and friends (glColorP3ui, oh god …)

I refuse to process more than that …

To answer your question,
Forward-compatible has a few (additional) features removed (wide lines), look in appendix E for these.

Forward compatible was thinked to help programmer to check if they program will be compatible with future version of openGL.

Basically it remove deprecated features

Note: in openGl 3.0 core profile the fixed pipeline function are still present cause they have been only deprecated, not removed.