OS/2 of course used not quite either of these systems, having certain set/get pairs for some properties, key value pairs for others and still an even more opaque system of bit switches for others. This should be explained (at least as I understand it) the programmers who wrote OS/2 were very savvy and were working on hardware we would consider minimal at best. The first versions of OS/2 were required to work on a 386 processor with 4 - 8 megabytes of memory. As such every bit of performance was squeezed out and there were (and possibly are) large chunks of the system that were hand-tweaked assembly code. This made OS/2 an enviable operating system and indeed it was the case that it ran DOS and Windows programs faster than on their native systems. It was said that only IBM had the expertise to pull off a coding feat like OS/2. It cost nearly a billion dollars all told and occupied a couple of hundred programmers for the better part of a decade. It won hands down most every award at the time for technology.
The downside of programming with this API
is that, from an object-oriented perspective they were riding on the edge and sometimes crossed
breaking encapsulation and a few other rules. This leaves those of us who write to the API
with odd syntax rules, (a return value of
true from a procedure either means that
there was no error (it succeeded) or there was an error), no clear way to find if procdures fail
(since in C unlike Java
false is actually the value of zero, procedures that return
a numeric value sometimes can't return whether they failed and resort to any of several different
means of communicating this). Each call has to be handled differently. One of the early reasons
for writing jWPS was actually to get some low-level access to OS/2, but then it became clear that
the API was very muddled and I took it up as a project writing cleanly what I think OS/2 should
have had from the start in Java.