While porting XScreeenSaver to the iPhone jwz discovered that OpenGL ES 1.1 API removed most of the OpenGL 1.3 API making it impossible to simply port XScreenSaver to iOS.
jwz writes:
Let’s say you have a well-specified system that is in wide use (a language, a library API, whatever) and because of changes in some substrate (operating systems, hardware, whatever) you find that you need to add a new way of doing things to it.
The way you do this is, you add new features to the specification and you clearly document the version in which those features become supported.
If there are old features that you would like to discourage the use of, then you mark them as obsolete – but you do not remove them because thou shalt not break working code.
To make his point concrete that it wasn’t necessary to remove compatibility, jwz wrote a compatibility layer using OpenGL ES 1.1 calls.
There’s also a fun bit in the comments section where jwz discusses why he doesn’t care to post the code to github.
This was discussed on HN a while ago. Normally I wouldn’t link, but there are some decent criticisms already posted there (mine among them).
Grandpa Zawinski is often right, but he’s not always right.
I’m not terribly familiar with OpenGL but did they actually remove the code from OpenGL 1.3? I read the problem as Apple deciding to only allow a certain version of OpenGL that XScreenSaver doesn’t support.
No. They didn’t remove the API calls from OpenGL 1.3. jwz is ranting that OpenGL ES 1.1 in moving to a new processing model deleted all the old API calls that would have enabled older code to continue to run. Some folks argued the new processing model wouldn’t support the old API.
jwz’s rant (and code proof) was that changing the API wasn’t necessary.
Then I understand his argument, I just don’t find it compelling.
Apparently yes, OpenGL could have rewritten their old API in terms of their new API. Doing that would have taken time and people, neither of which are a limitless resource. I find it justifiable to prioritize where their development time and effort are spent. OpenGL prioritized creating the new API over updating the old API.