The other night a rather nice writer called, and asked me "Where do Easter Eggs come from?". Other than the obvious answer, "From programmers silly!", there is a long a rich history that has lead to what we know today as Easter Eggs. After I answered her, I decided that it really would make a good article -- so now I'll put my spin on things.
How far back do they go?
I remember Easter Eggs from before they were called Easter Eggs -- and they existed way before that.
When I started programming it was not uncommon to do "backdoors" into programs. The idea was that you could walk up to a piece of code you had written and always get through security using your own secret hard-coded password. This was especially common with networking or multi-user systems that had passwords. Backdoors were not uncommon and many passwords were time or date based (or had a time component) so you could tell them to someone the password but they would only be able to get in for a limited amount of time.
Sometimes backdoors were heavily frowned upon (and a violation of company policies) since they were security holes -- and fact a common way to break into systems was to hunt for the backdoor (often code snooping). Sometimes backdoors were accepted and condoned. Imagine the user forgets his password and the whole system is locked out -- of course having a "back door" in was an absolute necessity to help the customer of your system save lots of time. Tech-Support needed them.
Backdoors also grew into "non-networked" apps, and apps that didn't have a password. For them, some unusual set of steps (and a password) would often bring up special test modes, dump more information to a file, or add special features. Usually these were used by field personal to do some debugging or to figure out what was going wrong (when there was a problem) -- or they were at least ways for the programmer to do something that others couldn't.
Backdoors became especially common for games. After all, if you were going to make a program for fun -- why shouldn't you have a little fun yourself? Entering a "God-Mode" was always an way to torment your friends. Besides, it was good for a programmer to just be able to set any value he wanted so that he could test things thoroughly -- but once done, it was easier to just hide it than remove it. So these "cheat modes" became common on their own.
Now backdoors and cheat modes were actually functional -- or at least they had a purpose in there somewhere. But they were still usually there "unofficially" and little "extras" added by programmers. Programmers see themselves as highly creative people (Code Artists) -- even when they jobs they do are terribly mundane. Often Big-Buisiness (or any business) is trying to be professional, and so stifles the creativity of their programmers -- since calling the customer "dolt", or having dancing menus is not what you want in an accounting program. So usually the business people in a company, is at odds with the programmers.
So what do you do programmers do with all this stifled creativity -- surrounded by techno-cretins (besides ridicule them mercilessly behind their backs)? The answer is obvious -- slip things into the code that only they are aware of. The best technical pure features that are free from managerial controls which validates their technical superiority. This is best done when programmers have code-reviews and others breathing down their neck trying to find such things (it makes victory that much more sweet).
So Easter Eggs really nothing more than geeks "tagging" or marking their turf. The software equivalent of "Kilroy was here". Artists sign their paintings -- and programmers have unusual ways of doing the same.
Easter Eggs and backdoors are thumbing your nose at the establishment. The fact that the "establishment" is signing their checks doesn't seem to enter the programmers minds. What the programmers remember is all the super-cool features they added on their spare time that someone in management made them pull out. They remember stupid policies, countless boring meetings, and the challenge of slipping this in. They know that they will one day be gone from the company (maybe sooner if caught). But that also know that their "secret feature" may live on, and they will be able to walk up to the program, years from now, and prove to someone that "they wrote it", because they can pull up their name, their picture or some special sound.
Of course once the Egg is in a shipping product, it is time to let the world know of your brilliance (unless it is at a company where it will mean your job -- then you wait until you have left). But all too often eggs are found on their own.
Other Creative Expressions.
Programmers are always looking for ways to express their creativity.
I've seen very creative use of variables -- like most of Apple's sample code (and others) that used "Foo" and "Bar" as variable or procedure names. This is all from the military acronym FUBAR (Fu... Fouled-Up Beyond All Recognition). But there are often variable names like "Boss_is_a_Jerk", or "CluelessMarketingFeature", and so on. (Those work best in companies that don't have code-reviews -- but I've seen them at companies with them). I can't tell you how many cartoon characters, or various other "themes" I've been subjected to. Often there are variable names that are "secrets" that have to be explained (but mean something to someone). All are just little creative outlets.
Another way for programmers to express their creativity seems to be in the test data they use to exercise (or exorcise) their programs. I personally got bit by one of those once. I was doing a maintenance trainer for the B-1B Bomber, and had all sorts of test data. Like if you lifted up the landing gear (while doing maintenance), it would proudly proclaim, "Congratulations Corporal-Cretin, you just squashed your ground-crew". Or if you did the same thing wrong, three times in a row, it would announce, "Read the Manual you moron!". Of course it was just to test the test programs and not real information yet, and I was thoroughly enjoying testing my own sample data, until one day (when I was gone) the Air-Force had requested a "Status Update" and someone sent them my disk-pack (without my authorization). I learned what a limited sense of humor an Air-Force General can have, when one managed to both squash his ground-crew, and do the same thing wrong three times in a row! Temper, Temper! I felt real bad for the guy who sent out my test disks, for about 5 minutes -- then I learned that shit rolls down hill, and consultants are always in the valleys.
Easter Eggs are just one of the many ways that the oppressed geniuses (in their own minds at least) can rage against the machine, and make little digs at the system (or the individuals that sign their checks). The old, "you paid for me, but you don't own me". Most of these "eggs" are fun an harmless -- and the majority go unnoticed. Unfortunately they are becoming more and more known (as a concept) -- and so management must make more and more official policies for handling them. Many are even starting to enforce those policies. At this rate, it won't be long before all the individuality is crushed by the drones and unimaginative dictators -- but honestly, my money is on the self-righteous know-it-all programmers. Companies can't currently afford to lose their best employees over something so trivial, and many are wise enough to know that. So a few official slaps on the wrist, and life will go on. And so for a while at least, I expect to get an occasional chuckle over hidden surprises in various programs.