The current Apple is a fusion of the beleaguered Apple of the 1990s and NeXT, a company famous for innovative products that no one could afford. In this article, David Chisnall, author of Cocoa Programming Developer's Handbook, takes a look at some of the now-ubiquitous ideas that were popularized by NeXT.

Like this article? We recommend

At the start of the 1980s, Apple was doing very well. The Apple II had a large market share, and the Macintosh was one of the first affordable computers with a graphical user interface (GUI) as standard. Shortly after launching the Mac, however, Steve Jobs was forced to leave Apple. He set ran two companies during this period: Pixar, which he bought from Lucasfilm for $10m (and recently sold to Disney for $7.4b), and NeXT.

It's difficult to say that Apple bought NeXT. Apple handed over money for the company, but Steve Jobs came back with the purchase as Apple CEO, and a modern Mac has more in common with a NeXT workstation than it does with a Mac made before the NeXT purchase. From an outside perspective, it seems like NeXT bought Apple for a negative amount of money.

NeXT was around for more than a decade. At its creation, the company's aim was to create, if not the perfect computer, at least the closest approximation of the perfect computer that was possible to build with the technology of the time. Looking back, it seems clear that NeXT succeeded in this goal. As Steve Jobs said in a Software Magazineinterview in July 1994:

My view of Microsoft is that they had two goals in the last 10 years: to copy the Macintosh and to copy Lotus' success in the application business. And they accomplished those goals. Now, they're kind of lost. I've told Bill [Gates] that I think it's in Microsoft's best interest if NeXT becomes successful because we'll give him something to copy for the rest of this decade.

To a degree, Jobs was right. The legacy of NeXT legacy is not so much its products sold as its ideas that others were encouraged to copy. The original Macintosh wasn't the first computer with a GUI, but most of the successful computers for the next 20 years shipped with something that owed a lot to the Mac. In this article, we'll see some of the things we now take for granted that have roots in NeXT systems.

What You See Is What You Get (WYSIWYG)

When the OpenStep specification was published, it was in three components: the Foundation Kit and Application Kit that are familiar to Cocoa programmers today, and Display PostScript (DPS). The graphical user interface on all NeXT systems was DPS. Whenever you drew anything to the screen, you sent PostScript commands. Some helper classes were available that could generate commands for you, but the display server just ran a fast PostScript interpreter.

This model was very powerful for doing anything related to desktop publishing. On other systems of the time, it was common to have two almost-unrelated rendering paths in your application — one to draw things to the screen, and the other to generate printer control commands. With a NeXT system, these two operations were unified. When you drew to the screen, you generated PostScript commands. When you drew for printing, you generated the same commands. Anything you could draw on the screen could be sent to a printer.

This is still almost the case in OS X. The drawing commands are now in a PDF-like form, and there's a trivial mapping between the commands you send to the screen and the commands you send to the printer.

The biggest difference between DPS and something like Apple's QuickDraw was that the display was entirely vector-based. When you generated data for the screen, you send bitmap drawing commands. A typical screen was around 72 dpi, whereas even a cheap printer was around 300 dpi, so you needed to scale the result for printing. By capturing the vector drawing commands, it was very easy for a NeXT application to produce resolution-independent output.

This same model can now be found in the Windows drawing system. The application-facing end of the print driver stack takes GDI drawing commands — the same drawing commands that are used for creating onscreen output.