Will Code For Beer
Paw Prints: Writings of the maddog
People ask me why programmers write code and give it away “for free”. There are many reasons, but one I often give is that a programmer might end up at a conference and a grateful user of their code might “buy them a beer, or even a dinner.”
It was February or March of 1995, and the port of Linux to the Alpha processor was well underway. In talking with some of the developers over the Internet, I started to hear rumors that the Alpha port would not have “shared libraries”, but instead would have statically-linked binaries.
For those of you who do not understand the ramifications of statically linked binaries, it means that every program has all of the libraries it needs to run linked as one blob on the disk and even in the main memory of the computer with the rest of the code that the programmer wrote.
In the early days of programming this was not as horrible as it sounds, because few libraries existed that could really be “shared”, but as operating systems became more sophisticated and included math libraries, graphics libraries, security libraries and a variety of other functionality that could be shared between programs, the duplication of this code thousands of times on an individual system by linking it into every program took up huge amounts of disk space and additional memory space that became intolerable.
Additionally without shared libraries every time you issued a patch for the library you had to re-link and redistribute all the applications that used it. Imagine having to re-distribute an entire distribution just because you fixed a bug in a basic library. This would be unheard of today.
Statically linked libraries were so horrible that strange techniques were used to reduce their impact. Several programs were statically linked together to “share” the library code (with different entry points) even if the programs did not share much other functionality.
Statically linked binaries for general purpose systems had become evil.
Ultrix, an operating system created by Digital Equipment Corporation of code originally from BSD 4.1c, never had shared libraries. We had hired a group of fifteen engineers to develop shared libraries for Ultrix, but they kept getting pulled onto other projects, so for about seven years Sun Microsystems would consistently beat us up for the fact that Ultrix did not have shared libraries. It became a chant of their Marketing group, and naturally I was a little sensitive to the issue.
So I was not happy to hear that my little baby, Alpha Linux, would not have shared libraries even though Intel Linux had them. And when I am not happy, I let people know.
One day I was sitting at my desk and I received an email message that said something like this:
“Dear Mr. Hall,
I heard that you are upset that Alpha Linux will not have shared libraries. If you send me some documentation on the Alpha compilers, I will see if I can create shared libraries for you.”
Well, I had never heard of this person, and I doubted that they would be able to do it, but sending documentation to them was easy, as it was all electronic. So I sent it off.
A couple of weeks later I received another email message:
“Dear Mr. Hall,
Shared libraries are coming along nicely, but I would like to talk to someone in your compiler group so I can make sure that the object modules created by the compiler will match up with the object module formats that Digital's compilers use.”
Not willing to believe my eyes, and still questioning if this could be possible, I went to the head of our compiler group at Digital and asked him if he would talk with this voiceless person over email.
A couple of days later the compiler group leader came over to my desk and said:
“Who was that guy? He was one of the most knowledgeable people I ever talked with about compilers!”
I told him that I did not know, he was “someone working on the Alpha Linux project”.
A few days later another email occurred:
“Dear Mr. Hall,
Shared libraries for Alpha Linux are done, and the code is in the pool.”
I could not believe my eyes.....fifteen engineers....seven years, no shared libraries for Ultrix. One guy, five weeks, shared libraries for Alpha Linux....what is wrong with this picture?
Now as I said, there were mitigating circumstances for Ultrix, and I do not “blame” the engineers that were at Digital, but I still was holding my breath until Alpha Linux shipped, in November of 1995.
Later that year, or perhaps early in 1996 I was at a USENIX conference, and of course I was showing off Alpha Linux. Being active in the USENIX organization, and helping to coordinate Digital's Hospitality Suite for that conference, I was running around the hotel trying to get things set for that night.
A young guy (he looked about fifteen years old) with long blond hair and wearing a tie-dye shirt, shorts and sandals waved at me as I ran past. Being a friendly guy, I waved back, but kept on running. Later, as I returned, the same young man (now joined by another college-aged person in white T-shirt, shorts and sandals) waved again, and once again I waved back but kept on moving.
On my third pass the young man stood in front of me and said:
“Mr. Hall, I just wanted to thank you for doing me a favor.”
“What favor was that?”, I asked.
“You sent me some documentation one time.”
“Documentation....” I mused, “I don't remember....OH MY GAWD! YOU ARE MR SHARED LIBRARIES! Do I have news for you! You are NEVER going to pay for any beer or food in my presence EVER AGAIN!”
As it turns out he was over the legal drinking age (he only looked like he was fifteen), and for the rest of the conference every time he tried to pay for drink or food I was there, and I picked up the tab. This was not Digital Equipment Corporation picking up the tab...it was me.
Several times after that I would see him at various Linux events, and every time I saw him trying to buy some drink or food, I would intervene and buy it for him.
Who is this person? His name is Richard Henderson. At that time he was a student at Texas A&M University. Eventually he worked for Cygnus, and now works for Red Hat.
It has been several years since I have seen Richard, but if he were to appear in front of me today, I would still buy him food and drink.
Carpe Diem!comments powered by Disqus
MSBuild is now just another GitHub project as Redmond continues its path to the light.
Malware could pass data and commands between disconnected computers without leaving a trace on the network.
New rules emphasize collegiality in coding.
Upstart lands in the dust bin as a new era begins for Linux.
HP's annual Cyber Risk report offers a bleak look at the state of IT.
But what do the big numbers really mean?
.NET Core execution engine is the basis for cross-platform .NET implementations.
The Xnote trojan hides itself on the target system and will launch a variety of attacks on command.
Spammers go low-volume, and 90% of IE browsers are unpatched.
Adobe scrambles to release patches for vulnerable Flash Player.