apple's sillyballs (1988)

When you think of Apple, the company and its history, what images come to mind? Perhaps a black-and-white photograph of the two Steves with the Apple ][, the beige Macintosh of 1984, Jobs on stage unveiling the iPhone.

Less remembered, but still part of that history, was a wacky example program that Apple released and maintained for over two decades.

I’m referring, of course, to SillyBalls.

In case you never had the pleasure of running this program, allow me to describe the experience. A window appears, titled “Bob Land.” Then, a ball, randomly colored and labeled “Bob,” is drawn. And another, and another, filling the window with chaotic abandon.

You click the mouse, and it’s over. The window disappears. Order is restored.

Okay, so people wrote a lot of strange programs for the Mac. But keep in mind these two facts: first, SillyBalls was written in 1988, by an engineer at Apple, when the company had over five thousand employees and a market capitalization of four billion dollars. Second, SillyBalls became the default project template for CodeWarrior,1 the IDE used by every serious Macintosh developer of that era.

Screenshot of CodeWarrior 4 “New Project” window with “MacOS Toolbox 68K” option highlighted Screenshot of CodeWarrior 4 with “SillyBalls.c” open in the editor

Where did SillyBalls come from? The earliest reference I can find appears in the Macintosh Programmer’s Workshop 3.0 Reference. MPW was Apple’s development environment, providing a shell, compiler, and other build tools for creating Macintosh applications.2 An appendix in the reference lists every file distributed with MPW, and here we find SillyBalls in two languages, Pascal and C:

Two columns each with a list of files. The first column titled “Distribution disk MPW Pascal2” has “SillyBalls.p” and the second column titled “Distribution disk MPW C2” has “SillyBalls.c”

The Pascal version has been lost, but the C version is still available deep in the archives of Apple’s developer documentation. In the comments we find the signature of the original author:

//	This program was written by Bo3b Johnson, 1/88.

Bob worked at Apple for 15 years, from 1986 to 2001. This is the first job listed in his LinkedIn profile. Knowing nothing else about him, I imagine a computer science graduate, just two years out of college. Tasked with writing an example program for Color QuickDraw, the API for drawing color graphics on the Mac. So he decided (Bob) to put his own name (Bob) all (Bob) over (Bob) it. What gumption!

The full program is quite short, just 213 lines with comments.3 Here’s the main function:

int main(void)
{
	Initialize();

	do {
		NewBall();
	} while (!Button());

	return 0;
}

A busy loop, refusing to yield to any other program. System 7 relied on processes to cooperatively multitask; once running, they could not be interrupted without consent. SillyBalls gleefully dedicates every CPU cycle to drawing those multi-colored balls.

The silliness continues. Among the comments, there is one that utterly confounds me:

// The inverted Bob text was a Skippy Blair special concept,
// kept for obvious aesthetic reasons.

I can’t argue with the “obvious aesthetic reasons,” but what on earth is a “Skippy Blair special concept”? It sounds like an idiom, perhaps related to the American ballroom dancer Skippy Blair. Yet as of this writing, the phrase “Skippy Blair special concept” has exactly one hit on Google, to a forum thread quoting that same SillyBalls comment. In 37 years, it seems, no one else has written those four words in that exact order.

Screenshot of Google search results for “Skippy Blair Special Concept” with the text “It looks like there aren’t many great matches for your search” and a single link to a forum thread called “All Hail SillyBalls!”

There are hints online that SillyBalls was well-known in its day. In the spring 1991 issue of Apple’s technical journal, develop, we find “a modified version of the ever-popular SillyBalls” to demonstrate multi-threading. As late as 2001, SillyBalls was the topic of a long, tongue-in-cheek argument on the forum macosx.com (“Don’t you go off on silly balls now, I learned to program on silly balls, my father learned on silly balls, and his father before him”).

The impetus of that forum thread (“All Hail SillyBalls!”) was Apple’s release of SonOfSillyBalls, a port to Mac OS X. In a touching homage to the original author, the text within the balls was quietly changed from “Bob” to “Bo3b,” his preferred spelling.

To my taste, though, SonOfSillyBalls lacks the elegance of the original. Gone are the straightforward calls to PaintOval() and DrawString("\pBob"). The README includes some notes, retained “for historical interest” from the original author of the port, who describes the “interesting challenges” of drawing under Mac OS X: subclassing NSView rather than drawing directly to the window, replacing the simple loop with NSTimer, and using PostScript (itself a Turing-complete language) to render the balls. Happily, by the port’s first public release, the ugly wart of Postscript at least had been removed, replaced with the newer graphics API NSBezierPath. Still, the Objective-C rewrite, now spread across four files, required three times as many lines of code as the C version it replaced.

According to the changelog, SonOfSillyBalls received one final update in 2011, “to bring the sample’s project and code structure up-to-date with the modern world.” The modern world – I suppose that’s the one in which we live today. With pixel-perfect marketing and choreographed developer events. Presenters inside the Apple spaceship building, dwarfed by augmented reality screens. It’s a world that, perhaps, could use more silly balls.


  1. A professional license for CodeWarrior cost around $400 in the 90s, equivalent to about $800 today. ↩︎

  2. Meyers, R. J., & Parrish, J. W. (1988). The Macintosh programmer’s workshop. IEEE Software, 5(3), 59-66. ↩︎

  3. This is the version that shipped with CodeWarrior IDE 4.0; you can see some comments prefixed with “MW” for MetroWerks. ↩︎