but what I am thinking is - why were we hit with the issue?
what about the other 438294209384092390 applications out there?
IMO, drivers shouldn't change behavior all of a sudden.
An application that never cared about OpenGL 3.1+ would never encounter this issue. All the drivers so far, from both major vendors, continue exposing the deprecated functionality, it never went away. An OpenGL app written 10 years ago would use the same context creation routine we use in LWJGL (without ContextAttribs) and would be able to retrieve the function pointers to the deprecated functions with no issues.
The problem with LWJGL has 2 parts:
a) We try to support all the new stuff, from day one. We were ready for GL 3.1 (that drops the deprecated functionality) when GL 3.0 was released. We even introduced the pseudo-forward-compatible mode, for people to test how GL would feel like without the deprecated functions.
b) For LWJGL to consider an extension supported, all functions in that extension should be exposed. (that's the main problem)
So, imagine that LWJGL encounters a GL31 compliant implementation that does not expose ARB_compatibility, or even a GL30 implementation with support for the forward compatible bit (this hasn't happened yet, but at the time GL30 was released it sounded like a real possibility and we had to support it). Without any changes to how we load extensions, LWJGL would suddenly fail to even start. 1 missing function from GL11 would be enough to make the whole thing unavailable, causing LWJGL to throw an early exception.
At that time there were 2 ways to enable the forward compatible path:
1) The application specifically asked for a forward compatible context (ContextAttribs.withForwardCompatible). This was even available to pre3.0 implementations (the pseudo-fc mode).
2) OpenGL 3.1 was supported and ARB_compatibility was not exposed. This was forced by LWJGL, since it had to follow the spec.
Then came OpenGL 3.2 that introduced another way to avoid forward compatible mode, the Compatibility profile. Then came ATI 10.1 that dropped ARB_compatibility. Then we had to fix LWJGL.