Except the one thing that it couldn’t do was display messages. Becausewhat it did was, it generated HTML and to display HTML you need anHTML display layer, which wasn’t done and was never finished. Thelayout group just completely went down a rat hole and they were thereason that that project got canceled.

Seibel: So they were presumably wrestling with the—at that time—immatureJava GUI technology.

Zawinski: I don’t think so. Because all the chrome worked. Therewas just this big blank rectangle in the middle of the window wherewe could only display plain text. They were being extremely academicabout their project. They were trying to approach it from theDOM/DTD side of things. “Oh, well, what we need to do is addanother abstraction layer here and have a delegate for this delegatefor this delegate. And eventually a character will show up on thescreen.”

Seibel: Overengineering seems to be a pet peeve of yours.

Zawinski: Yeah. At the end of the day, ship the fucking thing! It’sgreat to rewrite your code and make it cleaner and by the third timeit’ll actually be pretty. But that’s not the point—you’re not here towrite code; you’re here to ship products.

Seibel: Folks engaged in overengineering usually say, “Well, once I’vegot this framework in place everything will be easy after that. So I’llactually save time by doing this.”

Zawinski: That is always the theory.

Seibel: And there are times when that theory is true, when someonehas good sense and the framework isn’t too elaborate, and it doessave time. Is there any way you can tell which side of the line you’reon?

Zawinski: I know it’s kind of a cliché but it comes back to worse isbetter. If you spend the time to build the perfect framework that’sgoing to do what you want and that’s going to carry you from release1.0 through release 5.0 and everything’s going to be great; well guesswhat: release 1.0 is going to take you three years to ship and yourcompetitor is going to ship their 1.0 in six months and now you’re outof the game. You never shipped your 1.0 because someone else ateyour lunch.

Your competitor’s six-month 1.0 has crap code and they’re going tohave to rewrite it in two years but, guess what: they can rewrite itbecause you don’t have a job anymore.

Seibel: There must have been times, perhaps on a shorter timeframe, where you’ve ripped out a big chunk of code because youthought it would be faster to start over.

Zawinski: Yes, there are definitely times when you have to cut yourlosses. And this always feels wrong to me, but when you inherit codefrom someone else, sometimes it’s faster to write your own than toreuse theirs. Because it’s going to take a certain amount of time tounderstand their code and learn how to use it and understand it wellenough to be able to debug it. Where if you started from scratch itwould take less time. And it might only do 80 percent of what youneed, but maybe that’s the 80 percent you actually need.

Seibel: Isn’t it exactly this thing—someone comes along and says, “Ican’t understand this stuff. I’ll just rewrite it”—that leads to theendless rewriting you bemoan in open-source development?

Zawinski: Yeah. But there’s also another aspect of that which is,efficiency aside, it’s just more fun to write your own code than tofigure out someone else’s. So it’s easy to understand why thathappens. But the whole Linux/GNOME side of things is straddling thisline between someone’s hobby and a product. Is this a researchproject where we’re deciding what desktops should look like andwe’re experimenting? Or are we competing with Macintosh? Which isit? Hard to do both.

But even phrasing it that way makes it sounds like there’s someonewho’s actually in charge making that decision, which isn’t true at all. Allof this stuff just sort of happens. And one of the things that happens iseverything get rewritten all the time and nothing’s ever finished. Ifyou’re one of those developers, that’s fine because there’s alwayssomething to play around with if your hobby is messing around withyour computer rather than it being a means to an end—being a toolyou use to get whatever you’re actually interested in done.

Seibel: Speaking of messing around with a computer for its own sake,do you still enjoy programming?

Zawinski: Sometimes. I end up doing all the sysadmin crap, which Ican’t stand—I’ve never liked it. I enjoy working on XScreenSaverbecause in some ways screen savers—the actual display modes ratherthan the XScreenSaver framework—are the perfect program becausethey almost always start from scratch and they do something prettyand there’s never a version 2.0. There’s very rarely a bug in a screensaver. It crashes—oh, there’s a divide-by-zero and you fix that.

But no one is ever going to ask for a new feature in a screen saver. “Iwish it was more yellow.” You’re not going to get a bug report likethat. It is what it is. So that’s why I’ve always written those for fun.They make this neat result and you don’t have to think about themtoo much. They don’t haunt you.

Seibel: And do you enjoy the puzzle of doing some math and figuringout geometry and graphics?

Zawinski: Yeah. What’s this abstract little equation going to look likeif I display it this way? Or, how can I make these blobs move aroundthat looks more organic and less rigid, like a computer normallymoves things? Stuff like that. What do I do to these sine waves tomake it look more like something bouncing?

And then I end up writing all these stupid little shell scripts—selfdefensestuff. I know I could do this by clicking on 30,000 web pagesand doing it by hand, but why don’t I write this script—little timesaverthings. Which barely feels like programming to me. I know topeople who aren’t programmers, that seems like a black art.

I really enjoyed doing the Mac port of the XScreenSaver framework.That was actually writing a lot of new code that required thinkingabout APIs and the structure of the thing.

Seibel: Was that your APIs—how you were structuring your code?

Zawinski: Both. Both figuring out the existing APIs and figuring outthe best way to build a layer between the X11 world and the Macworld. How should I structure that? Which of the Mac APIs is mostappropriate? It was the first time in a long time that I’d donesomething like that and it was just like, “Wow, this is kind of fun. Ithink I might be kind of good at this.”

It had been forever because I got completely burned out on thesoftware industry. That part of it I just couldn’t take anymore—thepolitics of it both in the corporate world and in the free-softwareworld. I’d just had too much. I wanted to do something that didn’tinvolve arguing online about trivia. Or having my product destroyed bybureaucratic decisions that I had no input in.

Seibel: Are you ever tempted to go back and hack on Mozilla?

Zawinski: Nah. I just don’t want to be arguing with people and havingpissing matches in Bugzilla anymore. That’s not fun. That kind of thingis necessary to build big products. If it’s something that requires morethan one person working on it, which obviously Mozilla does, that’sthe way you have to do it. But I don’t look forward to that kind offight anymore. That’s been beaten out of me by too many years of it.And the other alternative, as a programmer, is go work for someoneelse. And I don’t have to do that, so I can’t. My first bad day I’d justleave. And were I to start my own company I couldn’t be aprogrammer—I’d have to run the company.

Seibel: Other than having two million people using your software,what about programming do you enjoy?

Zawinski: It’s a hard question. The problem-solving aspect of it, I guess.It’s not quite like it’s a puzzle—I don’t really play many puzzletype games.Just figuring out how to get from point A to point B—how to make the machine dowhat you want. That’s the basic element that the satisfaction of programmingcomes from.


Перейти на страницу:
Изменить размер шрифта: