One of the major reasons for not extending GLAutoDrawable is the fact that it contains a completely unnecessary and pointless interface that pulls in all the AWT event classes. Simply importing that class and using it on Eclipse on a Mac causes the Mac to lock up the JVM solid. I don’t even have to call or make use of them. It’s the classloading of them that causes the problem. AWT and SWT are mutually incompatible on OSX. Doesn’t matter whether in headless mode or not. Simply firing up the AWT event model causes the lock because SWT uses one toolkit (Carbon) and AWT the other (Cocoa). Apple states flat out time and again on their developer websites that they are mutually incompatible and developers should never mix the two toolkits together.
The other major problem with the bottom of the JOGL source is that it has a very large amount of code that is designed to make the integration between Java2D and JOGL much smoother for JDK 1.6. In the bottom of the implementation the existing JOGL Threading class makes method calls and class references to the AWT event queue. The RI also then makes many many calls to an internal class called Java2D, which also either directly calls the Threading class or makes other calls into the AWT code that tickles the AWT event model, with the inevitable deadlocks on OS/X.
The biggest problem that I ran into was that there are so many layers of internal circular dependencies in the RI that it was not possible to cleanly extend it for SWT usage. I’ve used large chunks of the RI code, but heavily modified in many ways. I had to strip thousands of lines of code out of it to make it work (ie not deadlock) and also have some amount of long-term maintainability that was not dependent on the RI code. Another contributing factor to the large amount of differences it that SWT and AWT fundamentally act differently. AWT uses a lazy-loading approach to the widgets, SWT does not. The AWT widget can exist for a long time before the underlying operating system resources are allocated, where SWT has the native resource loaded before super() returns in the constructor. This forces many more intracacies on the AWT implementation than was needed for SWT. In fact, as I got through it, I found that many of the threading things that the RI had in it were causing problems for the SWT code. In stripping all that out, it made the code more reliable and conformant to the SWT implementation requirements. I struggled for months to keep the code in a state where you could run either the SWT or AWT components and still have things somewhat sane. However, it just cannot work given this completely different underlying implementation model, so I discarded the AWT code completely and made something that would actually work reliably with SWT (though I know there are still some timing bugs that I have yet to hunt down).
Quite simply, there is absolutely no way that an SWT version of the JSR 231 APIs can ever be conformant and run on all platforms that Eclipse runs on. The only way it could be is if the JSR group has a fundamental rethink about what an OpenGL API should provide, and what 3rd party widgets should provide. I don’t see that happening any time in the near future.