Quotes from "Oral history of Metcalfe, Robert" - PDP-10/maxc GitHub Wiki
There was a funny thing. Xerox had just then acquired Scientific Data Systems, a hot minicomputer company of the day, whose arch enemy was DEC, which made the PDP-10. But we were all ARPA guys and we liked the PDP-10. We wanted to have a PDP-10. Xerox wouldn’t let us buy a PDP-10 because it had just bought SDS, so we built our own PDP-10. My first project there was to join the effort to build what was called the Multiple Access Xerox Computer, or MAX, or MAX-C it was sometimes pronounced. My initial job was to write the floating point microcode to emulate the buggy floating point operations of the PDP-10. We had a goal that this machine when we built it had to run the DEC diagnostics unmodified. Eventually Ed Fiala did all this, but I got started doing the microcode and we wrote floating point for the PDP-10. Then we ran the diagnostics and realized that the PDP-10 had bugs in it. So we had to put those bugs into our microcode so we could run the diagnostics. I just got started in that project and then Ed Fiala took it over, because they had other work for me, which was to put this PDP-10 on the Internet, something I had done just recently at MIT. So I set about building an IMP interface to connect this fake, ersatz, clone PDP-10 to the Internet. There was an IMP there; Xerox PARC got an ARPA contract whose sole purpose was to give Xerox PARC access to the Arpanet, which was then just for government contractors.
Shustek: Why was Xerox building the MAXC? Was that going to be a product?
Metcalfe: No, a research machine. That’s a good question. I think we were just building it because we wanted to, and it would be a tool for the scientists there. We couldn’t have our own PDP-10 so we just built it. But in the course of building it we developed a team institutional knowledge of how to build a computer. Thacker and Lampson had done it before; they’d been involved in building previous computers. We as a team learned how to build a computer. Right after we finished MAXC we started work on the Alto computer, arguably the world’s first personal computer.
Thacker and I just… He’s a wonderful man and a genius and all of that, but he and I just don’t get along and that’s just the way it is. I don’t hold it against him. I’m sure it’s my fault but we had a big problem, him and me. With apologies to Chuck, who’s now a big shot at Microsoft, he was the principal designer of MAXC upon which I was a minor contributor. My job was to get the MAXC put on the Arpanet. I had a card that plugged into a [Data General] Nova [minicomputer], and the Nova was connected to the MAXC. Then I had to get the NCP software, the Arpanet software, running inside of Tenex. We were running Tenex on this fake machine. Then I had to connect the NCP to my little packet switch to go out over the IMP. I had a hell of a time debugging it. At one point I thought I had all my bugs taken care of, and the damn thing still didn’t work. I went to Chuck and Chuck just… He and I just never got along. There was just nothing but animosity. I think part of it was he doesn’t have a PhD, and I do. Something about that made me misbehave, and made him misbehave, with respect to each other. Because he was much more senior and accomplished than I, but I had this flashy Harvard PhD. That may have been the beginning of it. But when I went to Chuck to say, “Look. I can’t get this to work. Can you help me?”, he blamed me. He said, not in so many words, but “Just make it work, idiot.”
Shustek: He didn’t have a simple answer like “add decoupling capacitors”.
Metcalfe: No. But I worked hard at this. I began to notice as I’m trying to debug it -- this is very complicated stuff, lots of… whole operating systems, memory, networks, all changing, zipping around -- I began to notice something. It was like I was having a mirage. I’d look-- You’re at this glass teletype and you’re looking at memory locations and I began to hallucinate. I was looking at memory locations twice and they were different when I looked at them.
Metcalfe: I’d like to reiterate at this time my high regard for Chuck Thacker and what a great man he is. The fact that he and I just don’t get along is my fault. It’s nothing wrong with him. So, in the middle of this story. Here I am. I’ve been given the job to connect the ersatz PDP-10 to the ARPANET IMP so that Xerox PARC can be on the ARPANET. It’s a job I just finished doing for MIT, thought I was going to do it for Xerox. So I built this card again, a simpler version of the card. My second high speed network interface, plugged into a Data General Nova 800, I think it was called, and that hooked up to MAXC. Then I had to get the Network Control Program under Tenex, which was running on the MAXC, which was just coming up. I had to get it to talk to this 800 that talked to the ARPANET, so that the Telnet and the email and everything on Tenex would work through the ARPANET. The machine is just coming up, but it’s now running Tenex and there are users typing on it, but it’s being debugged. At night I would go in there to get my network code running. And I’m trying to debug it and I’m having... The code’s all written now, and I’ve debugged all little pieces of it, and I’m trying to get it to all work all the time, which is 95% of the work. And I’ve reached a point where, again, I cannot get the damn thing to work and I’m there terrified I’m never going to get it to work and this will be the end of my career, say. I began to hallucinate. I began to think that I was looking at memory locations and when I would look at them again they would be different, which is obviously a hallucination. I began to suspect that maybe the MAXC computer wasn’t entirely debugged, and that I was running into a bug that was Chuck’s bug, not my bug. So I went to Chuck to get his help with this, and he, in not so many words and I’m sure he didn’t mean any harm at all, basically said it’s your fault and go fix your own bug and don’t bother me kid. Because this machine -- my machine -- works. It’s your stuff that doesn’t work, you and your fancy Ph.D. You can’t get it to work, nah-nah-nah. That kind of thing that goes on among adults in a research lab. So I kept working on it, and my hallucinations became more frequent as I began to see that memory was not remembering stuff. I said, “Chuck, the memory appears not to be remembering stuff, and this makes it very hard to get your program to work when the instructions change.” And Chuck said, “Look at this.” He ran his memory diagnostic. Zzzzz, patterns, 0’s, 1’s -- it ran for hours, no problem. Flake off. Weeks are going by. My career is falling through my fingers -- what remained of it because I didn’t have my PhD. Maybe I was about to get my PhD; I was in that awkward period. I decided to do the following thing. I’m a PDP-10 programmer of some renown. I thought I would write a user-mode application program that tested memory. I called it Munger, m-u-n-g-e-r, because it would mung memory. It would just, in virtual memory, in memory, right there in user mode, it would just write a pattern, and all different. I was very thorough, so there was all 0’s, all 1’s, alternating 0’s, alternating 1’s, random, the whole pattern. And if there was ever a difference detected between what had been stored and what was retrieved, the program would type Control-G, which you may remember was “bell”. I got the program all written and assembled, and I typed munger, at the Tenex command line and six seconds later, “ding”. It starts dinging, “ding, ding, ding, ding”. “Chuck”, I say, “Chuck, come here, look.” Of course the program, after ringing the bell, printed out what had been stored, in what location and what had come back out, and showed the differences. And there were some bits different. “Chuck, look, in virtual memory and user mode I’m getting memory errors.” His first reaction was, “There’s a bug in your program”. Well, it turned out there was no bug in my program. It turned out that Chuck’s memory diagnostics tested the CPU port into memory, but they did not test the disk port into memory. So every time this timesharing system swapped out to disk and then loaded the memory back in following a page fault, there was a chance that the page would come in different. “Oh gosh, yes Bob. You found this bug, and we are now going to fix it. We need to improve our memory diagnostics to test the port to disk”. And guess what? My NCP started running and everything became hunky dory, and it ran for years thereafter, and it all went away. But not before seriously damaging my relationship with Chuck Thacker. I kind of held this against him, and he kind of held it against me because I was so obnoxious as to write this program called munger, which I ran for years thereafter and it never got a bell ever again. To his credit, he knows how to build a computer. This very same thing happened on our next computer. After the MAXC got running, we decided – huck, Butler, Allan Kay decided -- to build the Alto, the world’s first personal computer, and I’m the networking guy. This very interesting thing happened. Butler Lampson took me over to see Charles Simonyi. Charles was working on a network for Xerox PARC. It was a 50 megabit per second version of the 50 kilobit per second ARPANET, with little tiny high speed packet switches that would be routing packets around the building at 50 megabits per second, as opposed to 50 kilobits. Charles called this network Signet- s-i-g-n-e-t; Simonyi’s Infinitely Glorious Network. Butler said, “Bob, you’re the networking guy, I think you should take this project over from Charles, because Charles, I’d like you to work on our text editor called Bravo.” Charles said “fine”, I said “fine”. He went, wrote Bravo, wrote Word. He’s a billionaire, to make a short version of that story. But then I got Signet and I started looking at it. I had just then gotten my Ph.D. approved. The way I got my Ph.D. approved, that opens up a whole ‘nother story. I’m going back to June of ’72, Harvard. I came back into the room after my oral defense. You know you do your oral defense, then you leave the room, then the committee meets, then you come back in and they tell that you’re going to get your degree in two weeks and that your parents are going to be proud of you. Instead they told me, “We do not think that your dissertation meets the requirements of originality, and it’s not theoretical enough; it’s simply engineering” -- which is a very Harvard thing to say -- “and we don’t think it rises to the level of a Ph.D.” Just between us, they were right, but I will never admit that to Harvard University. I then picked up the phone and I called Bob Taylor at the Computer Science Laboratory at Xerox PARC and said, “Bob I got really bad news, I just flunked my oral defense. I will not be receiving my Ph.D. next week or the week after.” Taylor said, “Well okay, well come anyway, and you can finish your thesis from here, no problem.” God Bless Bob Taylor. So I did. I go to Xerox PARC and start working on MAXC and all that.