At least that's how I see it. Maybe there is another perspective I haven't
thought of.
My definition of an API is a set of signatures and definitions
for those signatures. This is the exact information needed to implement the API
and it is also the exact information needed to use the API in application
programs. It is also the exact information needed to completely document the
API. From a business perspective it was very important for Sun to keep the Java
APIs totally out in the open.
Microsoft was able to keep parts of their OS
APIs secret because they were in the OS API creation business (Windows) and also
in the OS API usage business (Word and Office applications). This might have
been related to them running into anti-trust difficulties.
Sun could have
gone that route but they chose not to. They could have given themselves an edge
in the Java applications business by hiding extra undocumented functionality
into their JVM but they didn't. As Schwartz testified (I think), Java was
supposed to be the antidote to the Microsoft monopoly. There were two key
elements to make this happen. First, it was platform agnostic. At least in the
beginning, any Java program was supposed to run fine on any JVM regardless of
the underlying OS or hardware. Second, it was a level playing field for
developers. The specs for the JVM and all the APIs were open so no one had to
be afraid of being locked-in like they were with Microsoft.
Sure,
technically Sun could have added hidden APIs but from a business perspective
that would have been a nightmare. The main selling point of Java, the main
thing that differentiated it from almost everything else at that time, was
"write once, run anywhere". That would not have been possible if Sun used
hidden APIs that no one else knew about. If they had done that then Sun
applications which made use of the hidden APIs would only run on Sun's JVM and
would fail on all other JVMs because no one else would know about the hidden
APIs.
So while technically it would have been possible for Sun to include
hidden APIs in Java, it would have been antithetical to the entire spirit and
purpose of Java. In the same way, technically the GPL could have been a closed
source license or a non-Free license but that would have violated the entire
spirit and purpose of the GPL.
PS: I was assuming the JVM would be the
easiest place to hide the hidden APIs. Perhaps they could have been hidden
elsewhere but that wouldn't solve the problem I outlined
above.
--- Our job is to remind ourselves that there are more contexts
than the one we’re in now — the one that we think is reality.
-- Alan Kay [ Reply to This | Parent | # ]
|