- What You See Is What You Get (WYSIWYG)
- Objects Everywhere
- The World Wide Web
- Distributed Component Object Model (DCOM)
- After the NeXT Purchase
Distributed Component Object Model (DCOM)
While at NeXT, Steve Jobs was perfecting the keynote delivery style that has become so well known since his return to Apple. (One of his talks that was fun to watch was about distributed objects, and included numerous digs at Microsoft.)
Implementing a distributed object system in Objective-C is relatively easy. Like Smalltalk, it provides a mechanism for handling messages that are not handled by methods in the receiver. NeXT used this mechanism to serialize the message and pass it over the network, resulting in transparent, remote method invocation.
This system works very well with native objects, but NeXT also produced bridges for Microsoft's Component Object Model (COM) — then called OLE, now called ActiveX — and for the Common Object Requesting Broker Architecture (CORBA). The combined system, Portable Distributed Objects (PDO), could be used as a glue between COM objects on different systems, before the Distributed Component Object Model (DCOM) was introduced, providing similar functionality.
DCOM is now an important part of Windows. PDO is effectively dead, although distributed objects are still part of the Foundation Kit on OS X (sadly, not on the iPhone). A lot of the ideas from PDO are now found in things like SOAP.
Several of the people who worked on Java in the early days had experience of Objective-C on NeXT platforms, and the language is heavily inspired by Objective-C. One developer wrote that Java was "Objective-C with C++ syntax." Protocols in Objective-C became interfaces in Java, class methods became static methods. With Java 1.3, the forwarding mechanism was introduced into Java.
Several parts of the Java API are similar to the OpenStep API that Sun and NeXT developed, and that Apple rebranded as Cocoa. The use of interfaces in Java Remote Method Invocation (Java RMI) mirrors the use of protocols in distributed objects, although in distributed objects it's an optimization trick rather than a requirement. The differentiation between mutable and immutable strings is also directly from OpenStep, although Java doesn't make this distinction for other classes.
Early on, NeXT was a big backer of Java, rewriting WebObjects in Java; many of the Java web application server concepts that are currently popular have roots in this rewrite.