Rage Against the Machine. It was late. Very late. The place was littered with plastic cups, wine and beer bottles, and pizza boxes. It had cleared out pretty quickly after the intellectual property spill, but that had been hours ago. Hours and hours. Strickland glanced at his watch-then realized he wasn’t wearing one. That he was, in fact, “philosophically opposed to wearing watches.” What a poser he was. Lately he had begun to annoy even himself.
A nearly empty bottle of champagne hung in his hand. No, that wasn’t quite right. He examined the foil label.
Sparkling wine.
The French were sticklers about their intellectual property too. He upended the bottle into his mouth, finishing off the last inch or so, then tossed it against the far wall, where it ricocheted into a trash can.
Not drunk enough by half. He groped among the bottles on the nearest desk until he came away with another half-empty. More of the cheap shit. But then, that’s all he’d be drinking from now on. No first-round-funding- leading-to-an-eventual-IPO for him.
He thought about his student loans. About his other debts. It was nearly a hundred thousand by now. Did he even have a thesis to defend anymore? Did this incident violate the terms of his partial scholarship? Surely, someone could establish that his team really had written the Raconteur code before copies appeared online. Couldn’t they?
He’d started wondering whether they’d actually written the software-and by “they” he meant Prakash. Prakash and Kasheyev. And maybe Koepple.
Strickland had always been the smartest kid in his high school, but when he’d come to Stanford, he was suddenly the slow guy. It was like swimming in white water here-a constant struggle to keep from drowning in knowledge, while for others it was easy. Or at least it seemed easy.
No, scratch that. He knew a lot of people were working hard to keep their place here.
Stop feeling sorry for yourself. You’re no idiot.
The truth was that Strickland sought out supergeniuses-people who were obviously going places. That’s what he’d seen in Prakash, wasn’t it? And Kasheyev? The others just came with the package. Strickland supposed they thought the same of him.
But Strickland did have skills they lacked, didn’t he? Unlike them he was outgoing and persuasive. A motivator of people. He could focus work groups.
He paused for a moment.
He was a parasite, wasn’t he? Fuck. If he was honest with himself, he was the least valuable member of the Raconteur team. If they’d never met him, the software would probably have looked exactly like it did right now- Prakash’s vision. Strickland had spent hours and hours studying the team’s source code, intent on comprehending each class. Each function and subroutine. Damn, their code was elegant. Brief. Tight. Integrated. Epic poetry for machines. Strickland was still trying to understand all its subtle details and interconnections. He couldn’t imagine having actually developed it.
In truth, Strickland’s recklessness with the source code might have sunk all their hopes for youthful success. But was it really that reckless to store the code on their own department’s servers?
What would it have taken to steal the project files from the Leland cluster? Someone with inside access, obviously. The server’s log files might show who and when.
Unless they covered their tracks. But then he realized that these were probably virtual servers-part of a cloud. And even if that wasn’t the case, the computer science department was crawling with arch hackers. People who could design microchips on the back of a cocktail napkin. He wasn’t likely to find evidence they didn’t want found.
And what the hell was he thinking-someone with inside access? What if it was someone who’d stolen the code from a misplaced USB drive? From a laptop or a wireless home network? Who was to say it was Strickland who had screwed up? What if it was Prakash? Judgmental prick.
Strickland slid his tongue across his front teeth. One still felt loose. The swelling on his lips had gone down, but if he weren’t drunk, he guessed he’d probably be in serious pain right now.
Bottom line: There really wasn’t much chance of finding out how the code got out. He was no computer forensics expert. Maybe Prakash and his rich family could hire one, but their hiring a lawyer to sue Strickland seemed more likely.
A thought suddenly occurred to him. What if whoever stole the source code was still stealing it?
Strickland sat upright-suddenly alert.
What if he could insert something in the source code that “phoned-home” if they stole it again? A smile spread across his lips-and he stopped himself as the pain spiked. He slid the wine bottle across the nearest desk and marched unsteadily over to the nearest workstation. Man, he actually was pretty drunk.
Strickland logged on to SUNet, then navigated to his own share on the Leland cluster, where he’d stored several versions of the Raconteur C++ source code. He perused the various “cpp” files. How to go about this? Prakash’s code was so damned tightly integrated, and Strickland was pretty drunk. KISS-keep-it-simple-shithead. That was the best policy. But then, all Strickland had to do was add something that would run whenever the Raconteur service was executed. That meant during initialization, when constants and classes were instantiated.
What about stealth? Screw that. He was in no shape to develop a rootkit. His consciousness felt as though it were swimming hard just to stay above the alcohol line in his skull. He stared unsteadily at the screen. Focus, you asshat. Marshaling a few sober brain cells took all his concentration.
Software connecting to a remote host on start-up wasn’t unusual. Checking for updates is all. Nothing to be alarmed about. He could write a tiny remote procedure call to pass back whatever info he wanted from the client via HTTP-from wherever his software was executing. The IP address of whoever stole the code, for starters. Maybe some details on the offending machine’s operating system and language. Maybe a list of network shares and-
No. Keep-it-simple. Just a small XML-RPC client to send the data. He had a C++ library lying around that he could include in the Raconteur code base; that way he could fold his little messaging routine in without much trouble. Then he’d just set up a companion RPC server running on one of his own Web servers to pick up any XML messages sent from clients. The HTTP traffic would look just like standard Web surfing to the thief’s firewall.
But wouldn’t they notice Strickland’s addition to the code? Perhaps not. If someone had stolen the Raconteur software, that meant they trusted the source, right? And the phone-home code only had to run successfully once. Just the one time to find out where it had been spirited away to.
Strickland launched Emacs and pondered what C++ project file to open first. Where should he make this change? He decided to slip the code into one of Raconteur’s ancillary services-a visual trace library. There he added a new subroutine that formed the XML, gathering client IP address, local time, and local operating system, then issuing it to an RPC server he’d set up next. Lastly, he incremented the Raconteur project version-making a bullshit notation about fixing a possible memory leak. He used Prakash’s initials to avoid arousing suspicion. After all, he’d rarely posted any changes that made it into the final source code. In fact, he’d have to admit he’d never made any meaningful contributions to the code itself. Until now.
Then Strickland took the better part of an hour coding the companion RPC server that would detect and process incoming pings from his phone-home code. It took that long mostly because he was so drunk he had trouble typing. He hosted it on a Web server he’d used as a summer intern at some Cupertino start-up. Error trapping? Bah. But it seemed to work, and it would gather any incoming data into a text file.
Now it was time to post his revised Raconteur source code to the network. Strickland manually copied this version, as he had all previous ones, into a new directory, following his previous folder-naming conventions. He did this outside of the official version control system just as he had in the past, so that this new directory wouldn’t seem unusual to anyone monitoring the share. Strickland had been doing it to avoid Prakash and the others’ knowing how much after-hours analysis of their code he’d needed just to keep up. So in that sense, Prakash had his own judgmental nature to blame for Strickland’s placing the code in jeopardy in the first place-or was that just a rationalization?
That was it, then. The booby-trapped source code had been posted. Strickland stared at the screen, then closed the window with a single click. The die had been cast. Now he found himself staring at the desktop. He was all keyed up, and late or not, he decided he wasn’t ready to head back to his studio apartment-to stare at ironic garage-sale clown paintings. They wouldn’t seem so ironic a few years from now. Instead he decided to build a