Departments


Editor's Forum


I just got a sobering lesson in programmer hygiene. Seems I agreed to serve as an expert witness in a rather messy piece of litigation involving software copyright infringement. The story is all too familiar to many of us. A programmer left company A, having worked on a successful software product, on less than friendly terms. He said he took no source code, and even signed a statement to that effect. But (by his own admission, eventually) he took it anyway.

Some time after his non-compete agreement lapsed, the programmer ended up at company B. Before you knew it, company B was in the same business as company A. Only their competing product sold at half the price and didn't demand a copy-protect button on the parallel port (a "dongle" in the trade). You can guess what happened to sales at company A. Suspecting infringement, company A got a court order and raided company B to seize backup disks and computers.

There was clear similarity — almost identity — among a handful of functions. You'd think that just this taint would be enough to convince a judge of malfeasance, but that was not the case. The judge was scared to death of software, and was easily intimidated into inaction. After five months of legal shenanigans, company B was still selling product and company A was still hurting.

I was astonished to find that experts were willing to assert that this amateur programmer could have "reinvented" all these functions practically verbatim years later. Other experts hired by company A, including me, could only marshall arguments to the contrary. But how to convince a reluctant judge?

Then fortune smiled. The judge disqualified himself, to be replaced by one of the sharpest Federal magistrates I've ever seen in action. She put an end to the stalling and brought the matter to trial. She also knew nothing about computers, but refused to be intimidated.

In the end, I believe that an invisible space character tipped the balance. A space before a tab seldom shows up on the screen or the printed page, but it copies just like any other character. And it's hard to explain why you "reinvented" the gratuituous space along with the rest of the code. Particularly if you did that sort of thing in a dozen places.

The moral of this story is to keep your code clean. No, I'm not talking about tidy white space (though that is a good idea for other reasons). I mean you should bend over backwards to keep the boundaries of ownership clear. If it's your code, protect it. If it's not yours, don't take it with you.

I got to play knight in shining armor, and that made me feel good. But I'll never forget the look on that programmer's face (and his wife's face) when company B's lawyers abandoned him. Victory is not always sweet. Getting caught never is.

P.J. Plauger
pjp@plauger.com