Leor Zolman is one of the many heroes of the 8-bit computing era. Many may not recognize his name, but he produced a powerful C compiler for CP/M-based systems in the late 1970's.
Leor was gracious enough to allow me to pester him for the following interview.
"Brain Damage Software". While an MIT undergrad, there was another fellow in my dorm with the nickname "Puppy Dog", or P.D... every one in the dorm had a whiteboard tacked up on their door, and one day someone wrote "Brain Damage" on mine, presumably an allusion to my use of certain psychoactive substances popular at the time. That became B.D., and when I needed a name for my "company" (yeah, right), "BD Software" just became it. I think the only time I ever regretted it was the night I was having dinner at a big gathering of the family of my girl friend at the time, and present was an aunt of hers who was in a fairly acute stage of Alzheimer's...someone asked me what the BD stood for, and as usual, I just told them...you could've cut the silence that fell over that table, but you'd have needed a chainsaw.
What drove you to write a C compiler?
I wrote the first cut of BDS C between January and April, 1979, specifically in order to compile a C version of the Othello game written by Robert Halstead at the Real-Time Systems Lab at MIT where I was employed at the time as a support staff technician.
I had spent several days attempting to translate the Othello program into assembly language, and about half-way through I got disgusted and thought, "Why not just write a subset of C that can compile this for me?" This was late December, 1978. I set myself the goal of getting a compiler to compile othello.c by my 20th birthday, March 30th. I think it actually compiled and ran for the first time about a week after my deadline. Not too bad, really... As soon as I had a functional linker, librarian and library together, I sent the thing to Tony Gold at Lifeboat Associates in New York.
I remember him telling me later that when they received it and tried to compile some of the sample code, the compiler returned to the CP/M prompt so fast that they didn't think it could have done anything. He was quite surprised to list the directory he was in and see the object file there...version 1.0 began being sold in August, 1979.
Now, as the big 4-0 looms on the horizon, it would seem I can neatly divide my life into two equal-sized phases: pre-BDS C and post-BDS C. In a lot of ways, I feel as if my true life began with the gestation and birth of BDS C, while all my programming experience up to that point was just a warm-up.
How did your life change? Did you go from impoverished college punk to respectable, affluent 'puter guru?
I was never savvy enough of a businessperson to be really affluent, nor smart enough to bring anyone else on board who was business-aware. What did change is that I finally felt I had "achieved something", and my self-respect rose dramatically, along with (unfortunately) my ego as well. To have spent at least a bit of time on the "bleeding edge" of this explosion in technology is something I'll forever be grateful for. As an avid SF fan and dreamer all my life, I really wanted to do something that would make a difference. I know I made it possible for thousands of people to use a language like C, when otherwise it would've been just a bit longer before they could get their hands on a workable implementation. For a year or two after BDS C's release, the only other "real" compiler out there was P.J. Plauger's Whitesmiths C, but Whitesmiths couldn't run on most machines because it really required a maxed-out machine, and most folks couldn't afford a full 64K complement of RAM. When I was building up my machine, I had to work for a month at McDonalds to be able to afford another 4K RAM board.
Here's another cute little story: the IMSAI came without any RAM at all, just CPU and front panel boards. I needed at least some RAM and a video board. So I got the Processor Technology VDM-1: a 64x16 character-only, memory mapped video board. It had 1K of RAM for the video, but a wonderful "programmable masking" feature: you could make any number of lines disappear from the screen. My first programs were toggled into upper 512 bytes of the video memory and run from there; their output appeared on the lower half of the screen! Fun times, indeed...I wrote a little "life" program for the VDM-1, where you actually toggled in the original population via the front panel switches (I loved the IMSAI's fat plastic toggle switches. Rick (Edelman, see below) was always getting sore fingers from toggling on his Altair's little metal toggle switches!). I sent it in to Processor Tech, and they sent me a 4K RAM board in exchange for permission to distribute the Life program. My first software deal, I think...
Did Small-C have any affect on the BDS C compiler ?
No. I wasn't really familiar with it. I had seen tiny-C and knew the folks there, and in fact tiny-C Associates ended up doing some distribution for BDS C very soon. But I had no first-hand familiarity with any other C compiler out there.
I did know about Whitesmith's, and I think P.J. Plauger and I got on the market within about a month of each other with our CP/M C compilers. People would buy my $110 product for initial development, because the turnaround time was so good, then buy Whitesmith's because it put out slightly better code. I've always kicked myself for not having used a few tricks that seemed obvious in hindsight, and I could have put out tighter code than Plauger's. Oh well. By the way, P.J. (Bill) and I have been friends ever since he became editor of the C Users Journal while I worked for the magazine out in Lawrence, KS for a while.
Did Borland's CP/M version of Turbo Pascal have any effect on your sales?
At that period in microcomputer evolution, ANY compiled language out there was good for EVERY OTHER compiled language out there. I would cheer any time anybody came out with something new. BDS C always looked damn good in the "comparo"s... other than that, I never saw Turbo Pascal, or ever used any Pascal, for that matter. I don't even know the language.
Memory (TPA) was a precious commodity in the CP/M days. What kind of constraints did this put on the compiler?
EVERY kind. I wrote BDS C in assembly language, so I could squeeze every byte out of what I had. Basically, the machine I was working on (an IMSAI 8080) had anywhere between 24K and 48K of total RAM, depending on how many of my 8K RAM boards were cooperating that day. So, I wanted the entire package to at least compile small programs on machines with 32K of RAM. I was told that Whitesmith's wouldn't even start up unless there was 60K (out of a possible 64K) on a machine.
I decided to follow what I saw as the philosophy of C, i.e., only implementing features that could be "close to the machine" in nature. Since the 8080 had no 32-bit or floating point instructions, those were out the window right away. I basically put in as many features as I could before there wouldn't be enough RAM left to hold any source code.
For absolute speed, each of the two "phases" (I can't really call them "passes", because phase one made about six passes over the code, each performing some specific transformation) worked entirely in RAM. The output of each pass would build up from low memory, overwriting the input as it went along. Sometimes I'd be expanding and contracting the intermediate code in memory, like an accordion. The Z80 really sped up compilation, because it had these nice block-move instructions the compiler could use to speed up this in-RAM shifting that was constantly going on...many people with an LED front panel (Altair, IMSAI) would see this via the LEDs...they'd all be flashing randomly, then in a very structured pattern for a split second, then randomly, then structured....each "structured" flash period was a block move happening!
I first heard of BDS C from a number of local CP/M enthusiasts ( who spoke highly of the package ) ... how many users did you have in BDS C's glory days?
I don't know exactly, but I'd estimate somewhere around 50,000 to 100,000 internationally. I sold a lot of copies as "alpha-C" in Japan via OEM contracts to Sony and Sharp for their mass-market downscale CP/M machines. I think they just bundled it in, and I got some nice royalties when it all added up, despite a miniscule per-copy royalty. Those were the days...
I kept a piece of paper pinned up on my bulletin board with the names of countries from which I'd received user feedback. I think the list was up to about forty countries. I once got a note from a Russian user who had used BDS C in Russia when it was still behind the iron curtain; he apologized for not paying for it, but lamented that you couldn't *buy* it in Russia at the time. The only way to get it was from friends who had copied it from friends...
Describe your worst experience related to BDS C? Did you ever release the product with a serious bug?
Ha. That's pretty funny. The part about the "serious bug". There were hundreds. It took about a year before it was really solid. But then, boy, it couldn't be crashed. I just kept plugging away, and basically froze the architecture before it got too far out of hand. That was both a blessing and a curse. A blessing because I could make it rock solid; a curse because it wasn't very standard. There were lots of little deviations from "full" C (C standardization hadn't even begun yet, but the writing was on the wall. I just couldn't read it very well, or chose not to in certain cases for the sake of efficiency and simplicity.)
Worst experience? Realizing after years of an exclusive contract with Lifeboat that they'd not been giving dealers enough of a discount to make it worth their while. Most dealer sales in that period were due to the dealers really loving the product and wanting to provide it, even though the markup was miniscule. BDS C could've sold 2-3 times as many copies if it was marketed less selfishly by Lifeboat. And I was totally clueless for most of that time. Like I said, I didn't have much business sense...
Did you encounter any difficulties in trying to market BDS C?
I thought of myself as "the talent" and figured I'd be better off letting someone else handle the marketing; thus, I gave Lifeboat an exclusive for years. By the time I realized they were basically killing dealer sales by refusing to give a decent dealer discount, I got out of the exclusive and sold it directly for a while, but it was way past its prime. I was right about not having much marketing prowess. I still don't. I'm struggling to market myself as a C/C++/Java instructor now. Anyone need a good on-site training?? Just email firstname.lastname@example.org! See, I'm not proud...
Had there ever been plans for other ports of BDS C? ( MSDOS, Amiga, Mac ...etc. ) Were there any?
Nope. Micro Data Base Systems in Lafayette, Indiana licensed the source code from me and actually developed a 16-bit compiler that was part of their database development system, and sold a few copies, but I suspect that having to deal with my cryptic source code probably drove most of their best programmers to the loony bin and I never heard from them again ;-)
At the time you wrote BDS C, what educational background did you have?
2.5 years at MIT, withdrew ("in good standing", as opposed to being kicked out) midway through my Junior year...on Drop Day 1978, I dropped all my classes.
How did you get your start as a programmer? What were the first languages that you used?
10th grade, Hollywood High School. Heard a funny clackety-clackety sound coming out of math classroom. Poked my head in and asked the teacher, Mr. Gene Robidoux, what it was. The answer, of course, changed my life. Mr. Robidoux was incredibly supportive of me and the other students who were interested, staying for hours after school every day so we could hack on the terminals. If you're still out there, Gene, thanks!
That was an HP2000C timesharing system running BASIC. We had two ASR-33 teletypes at 110 baud. For the next year, I probably logged more hours on those things than the next five or six students put together. Then I explored the computing facilities of area colleges and universities, and discovered free facilities for playing around in Fortran, APL, PL/I, etc., so I learned those languages next.
In my senior year of high school, my physics teacher was a 24-year-old Cal State Northridge grad student named Rick Edelman. It was his first year teaching, and he was a natural. He also happened to work for the Computer Mart of Orange County, the second computer store in the world (the first being The Computer Store of Santa Monica, which sold Altairs). The Computer Mart sold IMSAI's, so that's what I got in 1975 sometime, via Rick.
I've got to relate this story about that computer. It came in kit form (a bag of resistors, a bag of capacitors, IC sockets, etc.). I had never touched a soldering iron before, so of course when I powered the machine up the first time (well, the second...the very first time it smoked because I had crossed some wires on the electrolytic caps in the power supply...fortunately, it didn't fry any chips) it didn't work. I lugged the machine back to the Computer Mart for help. They had this guy there, "The Computer Doctor". He listened to my story, took the machine in, and fixed it (a solder bridge under an IC socket). I heard later from Rick that the guy had spent about eight hours tracking down that solder bridge. I got charged $20, because he knew I was a student.
The computer doctor's name was George Tate. Years later, after BDS C had been on the market about six months, I got a call. "Hi," the voice said, "This is George Tate." I answered, "George! Wow, great to hear from you! I still think about how you fixed my IMSAI for me and only charged me $20 bucks way back!" George sounded puzzled, and didn't seem to know what I was talking about. I refreshed his memory and he slowly remembered me and the machine..."Yeah, but I have this other company now, it's called Ashton Tate?" I had had no clue that the Tate in Ashton-Tate was GEORGE, for God's sake..."That's YOU? Hey, congratulations! Nice company!"
He was calling to find out if I would let Ashton-Tate market BDS C. I sadly announced I couldn't do that because I had an exclusive contract with Lifeboat. Foolish me. I had no trouble getting out of that "exclusive contract" later on when I wanted to change the way the product was being marketed, but at the time I was having that last conversation with George, I didn't know I could do that. Hindsight is always 20/20...
Had you taken courses in compiler design?
Nope, never got that far. Probably a good thing; if I had seen how I was supposed to do it, I probably never would have tried.
Was the entire effort brute-force/self-invented? Did you have any point-of-reference as to implementing a programming language?
Yes, brute-force/self-invented. No, no point of reference. I had written a little pseudo-compiled BASIC interpreter as a warm-up exercise, and cannibalized little parts of it for the C parser, but that's about it. This was entirely a seat-of-the-pants operation. I was rather amused later when, upon describing how the parser worked, I was told by a guy "who knew" that I had basically re-invented something like a "Recursive-descent LALR parser". Oh. Now, of course, I understand recursion well enough, but still don't really know anything formally about how "real" compilers work...
So, you were professionally employed as a C programmer at the MIT lab?
Not much C programming; Here's the full story:
My undergraduate advisor was Joe Weizenbaum. I didn't really deal with him much, but after I withdrew he referred me for the support staff position because the professor in charge of the Real Time Systems Group, Steve Ward, was in the next office over. I got the job, which was mostly "menial" Unix version 7 (running on a PDP 11/70) stuff: backups, account maintenance, etc.
It was while at this job that I discovered C. Bert Halstead, an assistant prof. at the time, wrote this very simplistic implementation of Othello in C. I wanted to try the Othello program on my CP/M system, so I spent a few days trying to translate the C version into 8080 assembly language. That wasn't much fun. The program used only integers, though, and it occurred to me that a subset of C capable of compiling this particular program wouldn't necessarily strain the resources of a typical CP/M system. So, I decided to work on that instead, since it seemed like a more interesting project...
Up to the time it actually compiled Othello (mid-April 1979), I had been planning to publish the entire source code in BYTE, basically giving the compiler away. I didn't think a limited subset of C was necessarily commercially viable, and enjoyed getting stuff published. Two things changed those plans: 1) the package became too big, and 2) a friend of mine suggested selling it, and I liked the idea of working from home on the compiler.
The period of time between April 1979 and August 1979 was magical. I still worked at the RTS lab, but for all intents and purposes I was fully focused on bringing BDS C into a marketable form. That meant fixing bugs/ adding features as necessary, writing the supporting programs (linker, library manager), the libraries (half in C and half in assembler), and the documentation.
What made it possible for all this to happen so quickly was a happy coincidence: at just about this time, Heath/Zenith worked out some sort of partnership agreement with the MIT lab that put H89 CP/M machines in the hands of everyone on the staff. So Steve Ward, Bert Halstead, and several others now had a CP/M machine at home...with no C compiler, as of yet. Mainstream modem technology was still in the 1200/2400 baud era; only two people in the entire Lab for Computer Science had 9600 modems at home (which, at that time, actually required a dedicated phone line): Steve Ward and Mike Dertouzos (head of the entire lab). So while either of those two could use the Unix machine for software development from home, no one else bothered with their slower modems. The H89 systems, however, were everywhere...when I had a working C compiler that ran on those machines, all of a sudden everyone in the lab could do C development at home. I had all the best computer people in the world, the cream of the crop, as my own dedicated beta test team!
Each night Steve Ward would write a new program that stretched the boundaries of what was possible on a personal machine, finding a bunch of BDS C bugs in the process. He'd bring me the bug list; I'd fix some that day, perhaps some more that evening, bring in a new version of BDS C the next day, and the entire cycle would repeat itself. The same went for many others in the lab.
The product matured real fast under these circumstances, to the point where by August I felt it was ready for release. Of course, in hindsight, it was probably just barely out of the alpha-test stage when it hit the market, but people were so blown away by having a C compiler that worked at all on their machines that I got nothing but positive feedback...and a lot of bug reports.
I drove the folks at Lifeboat crazy, because they'd barely have time to make masters in all the different CP/M floppy formats before I'd ship a new version to them. I was cranking out updates at the rate of one every three weeks or so. I just couldn't stand the thought of all the bugs I knew about being in the released version.
Did you leave college specifically to pursue a career as an independent computer programmer?
No, I had no clue what I was going to do. I just knew I liked to play with software. The first roommate I had after I left MIT, as I was writing BDS C (usually between 6pm and 3am with Emerson, Lake and Palmer blasting in the background to keep me energized), told me I was "sublimating". I had no social life (as in girl friends), I was a virgin, and all my energy was going into this project. I heard that, nodded, and basically had to agree with him. I went right back to work.
Actually, I did lots of stuff for R&D, besides the articles. I wrote lots of internal software, like the 2nd class mailing system for all the magazines, order-entry systems, miscellaneous utilities, Unix shell scripts to run the daily DP workload and schedule overnight job spooling. I did hardware and software maintenance and procurement for all the internal PC and Unix systems. I shared XENIX system administration duties with Robert Ward and Kenji Hino (we three were the "technical staff", with Robert also being president of the company, and Kenji the tech department head. I was low on the totem pole my entire time there. I needed that after my runaway-ego experience of being sole BDS C proprietor...). I ran cables all over the place. I even built a wall my first week, after driving from Boston to Lawrence, KS in two days, throwing my back into spasms and making a lot of money for the local chiropractor...
Was "Illustrated C" the first book you had written?
First, and only. It was a collection of articles I had written for CUJ, with some glue and a new project especially written for the book. The whole thing was an experiment; R&D was trying to figure out if they could do books, and I offered some content for their first attempt.
That entire experience taught me one thing: no matter how hard you proofread a book, there are still going to be errors. I now have a real appreciation for books that I get all the way through without finding any errors in them.
I understand that you've developed a Java curriculum. What piqued your interest in Java?
I've always hated MFC, and no matter how much I tried to learn it, I couldn't stay focused. Java's way of doing GUIs just seems so much more elegant, and the language itself is so crisp and "spunky".
The performance issue seems irrelevant for all but the most time-critical tasks: Two years ago, when I was just getting started, I ran a little benchmark comparison and found JIT-compiled Java to be only fractionally slower than purely-compiled C++. That was impressive as hell. The GUI stuff is slower, but CPUs are speeding up more than enough to take up the slack. By the time the dust settles and Java 2.x (or whatever) is the norm, the hardware shouldn't have any trouble making the software look good.
As far Object-Oriented languages go, Java is much closer to the "pure" OO type of language Smalltalk represents, and doesn't have nightmarish things like multiple-inheritance to require endless kludgery to make tenable (Java's interfaces are more than adequate for most things C++ programmers have to use multiple inheritance to achieve). The Write Once, Run Anywhere grail is indeed holy, even though the present reality is still closer to Write Once, Test Everywhere ;-)
Will we see any more products from Brain Damage Software in the future?
I develop and deliver programming courseware/training now, and most of the programming I do is in the context of developing course materials. I've been a training contractor for six years, and would love to start a training company and peddle my courseware and teaching services directly. In the meantime, tell all your friends I teach C, C++ and Java and Unix, have some great course materials, don't charge an arm and a leg, and love what I'm doing enough to be pretty good at it. I still can't do marketing to save my life, so I have to rely upon word-of-mouth to get training business...here's how to get a hold of me: email@example.com, 978-664-9856, or http://www.tiac.net/users/leor/bds for some info on my courses (the Java course isn't in there, so email me for info on that).
And, I'm always eager to speak to contractors who are willing to try and drum up some teaching business for me...
Thanks for your time, Leor! I'm sure that new programmers and old curmudgeons ( like me ) who still try to PIP files will enjoy reading this interview.
Thank YOU. And if there's anyone out there who actually bought a copy of BDS C way back when, thank you especially!
Jimbo's Home Page