Early 90s saw an unprecedented push towards object-oriented systems. General concensus was that everything must be object-oriented, and by object oriented, everyone meant C++.

There was no other major contender. Smalltalk, which popularized the OO approach in the first place, had never seen general adoption and was confined to niche, self-contained, all-in-one systems. Early Smalltalk implementations by Xerox PARC clearly showed what pervasive object-orientation meant - the world of objects exchanging messages in a persistent environment. No primitive values, no pointers, no operating system… It is a different reality, never appreciated by the tech world, that went in the other direction, trying to superimpose object-oriented elements on top of the existing ecosystem. That is how we got C++, Objective-C, Object Pascal, Visual Basic, and other retro-objectified technologies.

However, the zeitgeist of the era was that OO was the future, and all other programming models were destined to be extinct, swept aside by the superior approach.

The core problem of that worldview was the existing operating systems. They were far from object-oriented. Smalltalk solved that issue by dropping the operating system concept altogether by providing the user with a completely enclosed environment with no need for an OS.

This approach will never work with the traditional computing model that was already built around the existing operating system-app dichotomy. The 90s saw multiple attempts in object-oriented operating system design. It is fascinating, that most of them had the Apple pedigree.

Struggling to revamp the existing Classic MacOS that was showing its age, Apple launched the Pink project later morphed into Taligent Inc. - a joint venture with IBM. It was meant to create an innovative object-oriented operating system and programming environment, but failed to produce a viable product.

Another object-oriented operating system attempt was made by NeXT. The resulting NextStep OS could be considered rather a lucky one, since it still exists, although in a heavily mutated form.

Steve Jobs was fascinated by OO-programming, stating in interviews, that he was so blinded by the GUI during the Xerox PARC demo, he missed other important parts - networking and object-oriented programming. A decade later, he decided to remediate that by taking Objective-C and building an object-oriented application environment.

Retrospectively, Objective-C looks like a weird choice, since we all know that the industry moved forward with C++. But back then, it was not so obvious, and Objective-C looked much more attractive in the NeXT context. Fully backward-compatible with C and with Smalltalk-like dynamic message dispatch, it seemed more suitable for NextStep object-oriented tools like Interface Builder.

But NextStep object-orientation was just a facade. Only API Kits were object-oriented. Beneath that layer lay a rather unusual breed of BSD UNIX running on top of the Mach microkernel with Display PostScript instead of X11 for graphics. It might not be a traditional System V, nonetheless still a UNIX, and hardly the next generation object-oriented OS everyone was talking about.

The third system was also built mostly by Apple refugees. It is BeOS from Be Inc.

They took a similar approach to NeXT, only with C++ instead of Objective-C and with a native graphics API instead of PostScript (although they initially played with Sun NeWS before deciding to go a separate way). On BeOS, you also have Kits creating an object-oriented facade around the mostly C-based kernel, drivers, and low-level services. Although one could argue it is more object-oriented than NextStep, since you don’t have a full-blown UNIX and PostScript infrastructure running underneath, just a POSIX API compatibility layer with bash and some regular UNIX tools.

What fascinates me is that in an interview for MacTECH, Erich Ringewald, the lead software architect at Be Inc. back then, was talking about the fragile base class problem and the approaches they tried at Be to avoid it while designing BeOS app kits.

It is a problem when changes to the base class can break functionality down the inheritance chain. And the fact that they are talking about it in the mid-90s clearly shows that problems with object-oriented programming, like the fragile base class problem, were already well understood back then (I bet the Smalltalk community had already known those back in the 80s, but who listened to them really?).

Despite that, the object-oriented fad lasted for decades, imposing the programming model that already showed rather fundamental flaws and giving us such technological “gems” like COM, DCOM, ActiveX, CORBA, Microsoft Foundation Classes, Enterprise Java Beans, and other examples of structural overengineering. And even though most of these “inventions” are long dead, their effect is still present throughout the industry - in overbloated legacy APIs, untangled dependencies, and fingerprints all over our modern cloud infrastructure.