A Tribute to Steve Jobs' Contribution to Software Engineering
I should tell you this story. We’re in a meeting at NeXT, before Steve went back to Apple. I’ve got my chief scientist. After the meeting, we leave and try to unravel the argument to figure out where Steve was wrong—because he was obviously wrong. And we couldn’t do it. We’re standing in the parking lot. He sees us from his office, and he comes back out to argue with us some more. It was over a technical issue involving Objective C, a computer language. Why he would care about this was beyond me. I’ve never seen that kind of passion.(Eric Schmidt).
Many will remember Steve Jobs for some of the great products he and his teams brought to market before anyone else: the Apple II, the Macintosh, the Laser Printer, NeXT workstations, Digital Animated Movies, the iMac, the iPod, the iPhone and the iPad: over the last 35 years, Steve has touched the lives of hundreds of millions of people.
During the 12 years Steve spent away from Apple, from 1985 to 1997, he introduced a number of software technologies and paradigms that are at the foundation of modern computing, languages and software engineering practices. As such, it could be argued that he, too, transformed Software in ways that few people would know today. At InfoQ, we would like to pay our tribute to Steve through a lesser known, but nonetheless probably as significant contribution to our lives, especially as developers and architects.
When the Mac came out it was widely recognized that writing software with graphical user interfaces and multitasking (which came out in 1987) was difficult compared to the BASIC interpreters of the Apple II, TRS-80 or the IBM PC 5150. By the mid-80s, Borland had started to popularize languages such as Turbo Pascal, including powerful libraries and slick text editors. Even though we can only speculate, it is likely that Steve Jobs had already started working on Mac OS System 5 before he left Apple and its core features were part of his vision: multi-tasking and hypercard, a revolutionary new way to create software, using an "Object-Oriented" and "Model Driven" paradigms:
The programming language within HyperCard is called HyperTalk and [was] object oriented. Objects exist in a message path hierarchy and respond to messages generated by either the user or the system itself.
HyperCard is based on the concept of a "stack" of virtual "cards". Cards hold data, just as they would in a rolodex. The layout engine was similar in concept to a "form" as used [nowadays] in most Rapid Application Development (RAD) environments […] A special "Home" stack (precursor to the home page on a website) was available as an application launcher, a repository for shared scripts, and a facility for setting preferences.
HyperCard is not only a database system. The layout of each card could be unique, just as one can write additional non-standard information on a Rolodex card. A special background layer contained elements that appeared on all cards of that stack or on all cards grouped under a certain background. Backgrounds could include pictures (its original purpose, "background picture"), in addition to the objects also available for each card: fields; buttons; (static) text; (editable) text fields; and other common GUI elements. Each card then could contain different data in the text or picture fields, as in a database.
The NeXT was brilliant. The NeXT had (arguably too) many things introduced at once -- removable optical storage, Objective C, DSP for sound and movies, Mach kernel, unix for a PC, display Postscript, InterfaceBuilder and so on. Yes, they never got the price down and the optical disks proved unreliable. But Steve and NeXTSTEP ended up saving Apple, and there must be a lesson that it is worth hanging on to cool things: you never know when they will in fact become mainstream.
Programming the WorldWideWeb client was remarkably easy on the NeXT. There was already a software module, the Text Object, which was an editable multifont editor. I just had to subclass it to make a hypertext object, and add the internet code. Designing the app's menus was trivial -- just drag and drop with InterfaceBuilder. The code framework of the app was generated automatically. That is a platform: something which allows you to build things which without it would have been possible, but a lot of work.
Alex Blewitt, who had a NeXTStation in the early 90s, and editor at InfoQ, wrote:
NeXTSTEP already had a fully featured operating system, and could play videos, record sound and embed objects. In comparison, Windows hadn't even reached version 3 by the time of NeXTSTEP's debut. NeXT hardware, although it didn't catch on commercially, the systems had high-quality defaults. Ethernet as standard, 24-bit colour, 16-bit sound, built in audio mic and speakers (and this in the day when SoundBlaster was a recently launched product rather than a generic API). True, it was overpriced for what it was – but the first version of HTTP was written on a NeXT box.
Steve picked the best software and hardware that was available at the time, and built a modern, versatile machine, nearly a decade ahead of its time. It's operating system, NeXTSTEP was a combination of revolutionary components (again for their time):
- a Unix-like operating system based on the Mach kernel, plus source code from BSD
- Display PostScript and a windowing engine
- the Objective-C language and runtime
- an object-oriented (OO) application layer, including several "kits"
- development tools for the OO layers (Interface Builder)
- the first dynamic HTML server (WebObjects)
The Mach Kernel was an advanced operating system developed originally at Carnegie Mellon University to support distributed computing and parallel computation. Even though it was compatible with Unix, Mach was an attempt to go around the Unix concept of "Everything-as-a-file" which started to prove impractical. Mach focused heavily on interprocess communications (IPC) as part of the Accent project. As a result Mach offered a small sets of new concepts which are now very familiar:
- a "task" is an object consisting of a set of system resources that enable "threads" to run
- a "thread" is a single unit of execution, exists within a context of a task and shares the task's resources
- a "port" is a protected message queue for communication between tasks; tasks own send and receive rights to each port
- "messages" are collections of typed data objects, they can only be sent to ports - not specific tasks or threads
The main difference with UNIX is that instead of utilities handling files, they can handle any "task". More operating system code was moved out of the kernel and into user space, resulting in a much smaller kernel and the rise of the term microkernel. Unlike traditional systems, under Mach a process, or "task", can consist of a number of threads. While this is common in modern systems, Mach was the first system to define tasks and threads in this way.
Another core difference:
The existence of ports and the use of IPC is perhaps the most fundamental difference between Mach and traditional kernels. Under UNIX, calling the kernel consists of an operation known as a syscall or trap. The program uses a library to place data in a well known location in memory and then causes a fault, a type of error. When the system is first started the kernel is set up to be the "handler" of all faults, so when the program causes a fault the kernel takes over, examines the information passed to it, and then carries out the instructions. … The use of IPC for message passing benefited support for threads and concurrency. Since tasks consisted of multiple threads, and it was the code in the threads that used the IPC mechanism, Mach was able to freeze and unfreeze threads while the message was handled. This allowed the system to be distributed over multiple processors, either using shared memory directly as in most Mach messages, or by adding code to copy the message to another processor if needed. In a traditional kernel this is difficult to implement; the system has to be sure that different programs don't try to write to the same memory from different processors. Under Mach this was well defined and easy to implement; it was the very process of accessing that memory, the ports, that was made a first-class citizen of the system.
At the programming model level, writing interprocess communications was quite easy with PDO (Portable Distributed Objects) well before CORBA.
Display PostScript (or DPS) was an on-screen display system developed in cooperation by Adobe and NeXT in 1987 and was an official Adobe product. As the name implies, DPS uses the PostScript (PS) imaging model and language to generate on-screen graphics with some modifications to support user interactions. Today, in Apple's OS X, the central window server caches window graphics as PDF instead of executing PostScript code. At the time, the advantages for the developers were tremendous as PostScript provided a high level graphical language that could create easily high quality interactive text and graphics displays, which could, as is, be rendered to a PostScript document and ultimately printed. For anyone who had to deal with printing WYSIWYG documents generated by an application back then, this was a revolution.
With the iPhone, Objective-C and the NeXTSTEP libraries (prefixed NS) have found a second life, yet in 1989, this was a software development environement that was way ahead of its time, which started to have some serious competition at least two years later with PowerBuilder. Objective-C is a reflective, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. It was developed in the early 80s by Brad Cox and Tom Love. NeXT developed the AppKit and the Foundation Kit libraries which introduced full fledged collection classes, for instance. The cornerstone of NeXT development environment was Interface Builder, a model driven, MVC based, graphical UI designer.
"Interface Builder first made its appearance in 1988 as part of NeXTSTEP 0.8. It was invented and developed by Jean-Marie Hullot, originally in Lisp. It was one of the first commercial applications that allowed interface objects, such as buttons, menus, and windows, to be placed in an interface using a mouse. One notable early use of Interface Builder was the development of the WorldWideWeb web browser by Tim Berners-Lee.
After acquiring NeXT in 1996, Apple Computer used OpenStep in its new operating system, Mac OS X. This included Objective-C and NeXT's Objective-C based developer tool, Project Builder (which had been expanded and is now called Xcode), as well as its interface design tool, Interface Builder. Most of Apple's present-day Cocoa API is based on OpenStep interface objects, and is the most significant Objective-C environment being used for active development.
WebObjects was also quite innovative for its time. This was the first dynamic HTML application server which was originally developed in Objective-C by Bruce Ong, Nico Popp, Charles d’Harcourt and François Jouaux (yes, only four people). It relied heavily on Enterprise Object Framework for database access (see below). By contrast, Kiva which was acquired by Netscape in 1997 was founded in 1995 and Tengah from a small startup called Weblogic went to market in late 1997.
Some features and keyboard shortcuts now commonly found in web browsers can be traced to NeXTSTEP conventions. The basic layout options of HTML 1.0 and 2.0 are attributable to those features available in NeXT's Text class. The level (WAD) editor for the game Doom was also developed on NeXT machines, as was Altsys Virtuoso, version 2 of which was ported to Mac OS and Windows to become Macromedia FreeHand version 4, the modern "Notebook" interface for Mathematica, and the advanced spreadsheet Lotus Improv. The software that controlled MCI's Friends and Family program was developed using NeXTSTEP. NeXTSTEP was even used to control the deposition of advanced semi-conductors with Riber's Accessible (section 2.5) and Hughes Research Labs EpiCenter software.
When it was all set and done, NeXTSTEP was successfully running on Motorola 68000 family, Intel x86, Sun SPARC and HP PA-RISC and became the foundation of OS X which was released in 2001.
InfoQ spoke with Jack Greenfield, former Chief Architect at Rose, and Principal Architect at Microsoft, who worked at NeXT from 1989 to 1994 and lead the development of Enterprise Object Framework, one of the first Object-Relational tools:
When InfoQ asked me to write a brief summary of the NeXT experience in Steve’s honor, I knew it was a fool’s errand. How to convey the magic of that place and time in just a few words to those who weren’t there? However, it was fitting request, even if the result wouldn’t come close to doing it justice. So, I wondered what people would want to know, and decided that engineers like me would ask what it was like to work for Steve.
Everyone knows that he had insanely great vision, but that doesn’t do it justice. When Steve came into the room, everything changed. I remember on one occasion, we were talking about building a persistent object store. It was all about object serialization and access mechanisms. Then Steve stopped by for a few minutes and took us on a flight of fantasy through the world we could build with those tools. It was all about connecting images, text, video and sounds, and then searching them, turning them into documents, and sharing them with others. When he left the room, it was like the end of a movie, when the lights come back on, and you look around, and then remember where you were and what you were doing. The result was something that looked like JSON, twenty years ahead of its time, woven into the heart of OpenStep, which anchors the user experience on iOS today in derivative form, where it does all the things he talked about.
Clearly, his vision was inspiring, but that doesn’t fully capture what it was like to work for him. Everyone at NeXT was insanely talented, so great things were expected. But Steve was not satisfied with things that would make ordinary leaders drool, cry, or do both at the same time. Around Steve, there was no choice but to build things that were unlike anything done before, or since for that matter. But the magic was that he didn’t tell you that. He just didn’t value anything that fell short of what he knew was possible. He appealed to that part of every engineer that longs to do brilliant work, and he challenged you to go there, hinting that he knew you could if you dug deep enough. It was how he looked at things you showed him, or what he said or didn’t say in a few words, that made you know you could do better, that you had to do better. When he liked something, it was like standing on a mountain top, not just because he liked it, but because you knew you had grown beyond your boundaries to get there.
Steve was one of a kind. I have never seen another setting that even came close to what he built there. It was more than a company. It was part laboratory, part playground, part fraternity house, part battlefield, part university library, part modern art museum, part expedition base camp. I’ve worked many places since, and many have stirred my passion and energy, but never to quite the same degree as NeXT.
The full legacy of Steve Jobs will not be sorted out for a very long time. When employees first talked about Jobs’ “reality distortion field,” it was a pejorative — they were referring to the way that he got you to sign on to a false truth by the force of his conviction and charisma. But at a certain point the view of the world from Steve Jobs’ brain ceased to become distorted. It became an instrument of self-fulfilling prophecy. As product after product emerged from Apple, each one breaking ground and changing our behavior, Steve Job’s reality field actually came into being. And we all live in it.
Many have had a negative opinion of Steve, nevertheless, he was amongst the very few who over the course of past 35 years relentlessly gave a chance to a countless number of engineers and innovative, sometimes risky, ideas while challenging them to go beyond what they thought was possible. What would the world of personal computing or telephony look like today if it was not for Steve?
We'll miss you.
Nice tribute JJ!
Re: Nice tribute JJ!
I am sure there are millions of people like me who weaved their lives around his. Even though I spoke to him briefly once, there is probably no other person that had more influence on my career than him.