Read Revolution in the Valley: The Insanely Great Story of How the Mac Was Made Online
Authors: Andy Hertzfeld
Tags: #Business & Economics, #General, #Industries, #Computers & Information Technology, #Workplace Culture, #Research & Development, #Computers, #Operating Systems, #Macintosh, #Hardware
"But I don't want you taking advantage of this situation. I'm not going to allow you to take advantage of Apple."
"What do you mean?" I asked him, genuinely puzzled.
"There's no way that you could have written that program without confidential information that you learned by working at Apple. You don't have the right to charge whatever you like for it."
I started to get angry. "The program is only half finished, and if I don't think you're paying me fairly, I won't be motivated to finish it."
Steve gave me another intense stare as he paused for a few seconds. Then he stated a single number, without explanation.
"One hundred thousand dollars."
"I don't know," I told him, "I think it's probably worth a lot more than that."
"Don't argue with me. $100,000 is fair, and you know it."
I didn't seem to have any alternative but to capitulate to Steve's price setting, since he's difficult to argue with and I really wanted Switcher bundled with the Mac. I eventually negotiated the final agreement with Guy Kawasaki, where, in addition to the $100,000, I managed to get a 10% royalty of the wholesale price if Apple sold Switcher separately, which Steve swore they would never do, but eventually the royalty delivered another $50,000.
Getting Switcher going wasn't that hard, but it was a very difficult program to finish, because it overturned some of the underlying assumptions that applications were making, yet it was committed to keeping everything working anyway. Much of the work in the latter stages involved testing it with every application that I could get my hands on and debugging crashes. Usually I could concoct some kind of technique that would mitigate the problem without causing worse problems elsewhere.
Thank you note from Bill Gates
(click to enlarge)
Predictably, the hardest part of finishing Switcher was making it work smoothly with the Microsoft applications. That was partially because Microsoft was a very early developer, and took liberties with the system that most developers would shy away from, but it was mostly because the instructions comprising their applications were encoded in pseudo-code to save space, in the tradition of the byte-code interpreters from Xerox, which Charles Simonyi advocated.
Unfortunately, the pseudo-code kept me from disassembling the program when it crashed, which made it more difficult to debug. I finally developed a debugging technique by single stepping through their interpreter, six instructions at a time to get to the instructions that were doing the work, but it was pretty painful. I was determined to slog through it because of the promise that I made when I visited Microsoft.
One of the last problems that I addressed before finishing the first release of Switcher in March 1985 had to do with applications hanging. If you're running multiple applications, you don't want one application hanging to take down all of them. I added a feature that allowed the user to kill the current application if it was hung up, by monitoring for a specific key combination during the vertical blanking interrupt handler.
I knew that I had to pick a very rare key combination, because you didn't want users killing their applications accidentally. I decided on shift-command-option-period, four keys held down at once, which I thought would be pretty hard to stumble into accidentally. But I was surprised when I got a call from Jeff Harbers at Microsoft.
"Hey, I like that abort feature that you just added, but you're going to have to change the key combination, because we're using that in Microsoft Word.", Jeff told me. Microsoft Word was very complex, and it possessed an enormous range of keyboard shortcuts, way too many, as far as I was concerned.
"OK, suggest something for me to change it to and I'll consider it," I told Jeff.
Jeff didn't have anything specific in mind, so he told me that he would get back to me soon. I had to laugh when he called me back the next day, and told me that he wanted to withdraw his request and that I should keep shift-command-option-period as the abort sequence.
"OK, that sounds good to me, " I told him. "But why the change? Doesn't it still conflict with Word?"
"We'll change Word in the next release not to use it. The problem was that we couldn't find a safe sequence - I guess we're already using every key combination!"
I officially released the finished version of Switcher in April 1985, and I maintained it for a few versions after that. Eventually, I handed it off to Phil Goldman, a tremendous young programmer from Princeton who was recently hired at Apple, who went on to write MultiFinder (with Erich Ringewald), Switcher's eventual successor, in 1987.
Are You Gonna Do It?
by Andy Hertzfeld in February 1985
No matter how much resolve you could muster, it was still difficult to quit Apple if Steve wanted you to stay. You'd have to sit down with him for a reality distortion session, which was often effective at getting people to change their minds. One day, a few of us were talking about strategies to overcome Steve's persuasiveness.
"I've got it!", said Burrell. "I know the perfect way to quit that will nullify the reality distortion field."
Of course we wanted to know how he could do that.
"I'll just walk into Steve's office, pull down my pants, and urinate on his desk. What could he say to that? It's guaranteed to work." We laughed, thinking that not even Burrell would have the guts to do that.
A year and a half later, it finally was time for Burrell to quit, after months of scuffling with Bob Belleville and some of the other managers, who wanted to cancel the "Turbo Mac" project (a redesigned, faster Mac based on a semi-custom chip, with an internal hard drive) that Burrell was working on with Brian Howard and Bob Bailey.
Burrell told Bob Belleville (who was probably relieved, since he knew that Burrell didn't respect him) and the human resources department that he was quitting, and then made an appointment to see Steve that afternoon. When he walked into Steve's office, he was surprised to see Steve grinning at him.
"Are you gonna do it? Are you really gonna do it?", asked Steve. Somehow, word about the urination threat had gotten back to Steve, and he was genuinely curious if Burrell would go through with it or not.
Burrell looked Steve in the eye. "Do I have to? I'll do it if I have to."
Steve's expression gave him the answer, so Burrell turned and walked out of the office, no longer an Apple employee.
Font Manager Redux
by Andy Hertzfeld in March 1985
Innovation often requires discarding finished work when a better solution comes along. Each new improvement may impact prior work, so you have to be willing to retool the older parts of a design to better integrate the newer parts as they emerge. One example of this for the Macintosh was the development of font manager, which had to be rewritten a few different times as the system evolved.
Bill Atkinson's QuickDraw graphics package did all the work of measuring and drawing text, but it didn't want to deal with system-dependent details like reading from the file system. The font manager's main job was to load fonts for QuickDraw, given a font family, a size and a style, so Quickdraw could just blast out characters without having to worry about how fonts are stored and loaded.
The initial implementation of the font manager simply included a few built-in fonts that were linked with the system, and it returned the system font if you requested one that wasn't built-in. The initial system font that we used through most of 1981 was one that we borrowed from Smalltalk called "Cream".
In the spring of 1982, the first implementation of our user interface software was beginning to come together. We wanted to allow application writers to use a variety of fonts, so we had to provide a way to load fonts from disk and cache them in memory. We also had to load hunks of code called "drivers" in a similar fashion, so Larry Kenyon and I collaborated on some code to load and cache objects from disk that we called the "object manager" that was used by the font manager.
Bill Atkinson had recently given Quickdraw the ability to scale bitmaps, including text, so we added support in the font manager for scaled fonts, which included heuristics to find the font that best satisfied a given request, if none were perfect. If we didn't have a font at the requested size, we could make one by scaling. But scaled text looked kind of lumpy, so we added a way for an application to choose if it wanted it or not.
Meanwhile, Bruce Horn was busy implementing the resource manager. I should have realized it sooner, but by the fall of 1982, it was becoming obvious that there would be lots of benefits if fonts and drivers became resources. We'd save space by discarding our "object manager" code, and simplify the system by eliminating lots of separate files; applications could even transparently contain their own fonts if they wanted to. I devised a simple scheme to encode the font family and size into a resource ID, and rewrote the font manager to be based on resources. Resource IDs were 16 bits long, with the high bit reserved, so the font manager ended up supporting a universe of 128 font families in 128 different sizes, which seemed like plenty at the time.
We added a number of refinements to the font manager in 1983, like a routine to make it easy to build the font menu, but the basic design didn't change very much, and that's what we ended up shipping with in January 1984. The software team was exhausted from the final push, and not all that much development happened during 1984, as some of the old-timers like myself left the company (I went on leave of absence in March 1984) and new hires like Burt Sloan and Ernie Beernick got up to speed. I certainly didn't think I'd be working on the font manager anymore.
In early 1985, Jerome Coonen was getting the software team revved up to do a 128K version of the ROM, that would eventually ship with the Mac Plus in January 1986. It incorporated lots of bug fixes, and some newer subsystems like Appletalk and a better, hierarchical file system. There was so much extra space available that it even incorporated a ROM-based resource file for system resources, to speed up booting and save memory. Jerome solicited my suggestions for improvements, and I responded with a pretty long list.
Among other things, I suggested a major overhaul of the font manager. The LaserWriter, with its superb Postscript imaging system, had made the font situation on the Macintosh pretty complicated, with different subsystems for the screen and printing, and the limitations of the font manager made it hard to get things right. We needed to support fractional pixel widths so the screen could better match the printer, and provide a better scheme for mapping fonts to resources that wasn't limited to 128 fonts. But I was disappointed that the team didn't decide to implement any of my font manager suggestions because development time was growing short and it seemed like too much work.
Even though I was no longer an Apple employee (see
things are better than ever
), I was still in close touch with the company, since Burrell Smith was my best friend and next door neighbor (we had bought two houses on the same lot in Palo Alto in April 1983). Bud Tribble had finished medical school and returned to Apple in his old role of software manager in August 1984, and was living in a spare room at Burrell's house, so I saw him frequently as well. And every once in a while, without advance warning, Steve Jobs would show up at my doorstep for an impromptu visit on a weekend afternoon.
On one such visit, in late February 1985, Steve asked me what I thought of the 128K ROM effort. I complained that it wasn't ambitious enough, and mentioned the font manager changes when Steve asked for an example. But I didn't expect his response.
"If you think that's so important, why don't you go ahead and do it yourself", Steve told me. "There would be time to get it done if you pitched in. Maybe we could give you a few Macs in exchange for doing it."
I told him I'd think about. Bud Tribble came by the next day to discuss it with me, and I agreed to develop a new font manager for the 128K ROM in exchange for three 512K Macintoshes, which I had Apple ship directly to my brothers and sister as gifts. All the code for the new ROM was supposed to be completed within a month, so I'd have to drop what I was doing to get the font manager done in time.
Pretty soon, I had the new font manager going, which used a new resource type called "FOND" to describe all of the properties of a font family, including the resource IDs of the font bitmaps. This allowed us to support tens of thousands of font families instead of a mere 128 like the old design. I also got the fractional width support going, but I needed some changes in QuickDraw to make it so applications could actually use it.
I talked with Bill about implementing the required changes and was surprised to find that he was reluctant to do it. In fact, even though we had identified a number of bugs, Bill didn't want to change QuickDraw at all, arguing that any sort of change at all would mess up existing applications. Finally, while I was down at Apple to attend a coordination meeting, Bud, Steve Capps and I all ganged up on Bill, telling him that if he didn't want to maintain QuickDraw, he'd have to let one of us do it. Bill said he'd think about it overnight, and we planned to meet again the next afternoon to decide what to do.