Статья напечатана в журнале
Пасхальные яйца уже стали привычным атрибутом современных приложений. Таким образом разработчики напоминают о себе, привлекают внимание к программному продукту, да и просто занимаются ерундой в рабочее время, вместо того чтобы свой проект всячески совершенствовать. Традиционно считается, что в приложениях с открытым исходным кодом не может быть никаких вложений, в том числе и «пасхальных яиц». Так как пишут такие программы только серьезные бородатые дядьки с не улыбчивыми лицами, среди которых нет места шутникам, да и любой желающий может проверить код на чистоту.
«Linux has no Easter Eggs. Linux and Unix applications generally do not have Easter Eggs. We know because we can review the source code.» – именно так сказано на одном из тематических ресурсов. Большинство разработчиков (за редким исключением) на поддержку своего продукта, как правило, тратят свое личное время, которого мало и жалко. Даже как-то грустно становится, неужели среди тысяч программистов не нашлось ни одного шутника, и порадовать своих друзей необычной находкой пользователю Linux, увы, не суждено? Отнюдь!
Начнем, естественно, с самого сердца. Здесь комментарии разработчиков говорят сами за себя:
$ cd /usr/src/linux
$ egrep -ir «(fu?k)|(shit)|(stupid)» *
include/asm/xor.h: Clobber them just to be sure nobody does something stupid
include/linux/fb.h: #define STUPID_ACCELF_TEXT_SHIT
/* Locate record for stupid devices. */
/* I don’t know the range. Put stupid things here */
/* Shit happens… */
lib/vsprintf.c: * Wirzenius wrote this portably, Torvalds f***ed it up
Или вот такой запрос:
$ egrep -ir «(fire)$» *
/* Turn on transmit finished interrupt. Will fire immediately! */
drivers/usb/class/usblp.c:static char *usblp_messages[] = { «ok», «out of paper», «off-line», «on fire» };
Причем принтер действительно ругается в консоль, что он «горит». Также заслуживают внимания и имена функций, параметров и переменных, которые занесены в файл sunhme.c:
$ less drivers/net/sunhme.c
MODULE_PARM_DESC(macaddr, «Happy Meal MAC address to set»);
static struct happy_meal *root_happy_dev;
Встречаются и некоторые другие слова, которые к общеупотребительным отнести можно лишь с большой натяжкой.
В заголовочных и конфигурационных файлах других приложений также есть интересные строки. Например, при компиляции оконного менеджера Enlightenment можно встретить вот такую информацию:
checking for mass_quantities_of_bass_ale in -lFridge… no
checking for mass_quantities_of_any_ale in -lFridge… no
Warning: No ales were found in your refrigerator.
We highly suggest that you rectify this situation immediately.
Не знаю, за что платит Марк Шаттлворт своим ребятам из Canonical Ltd, но они тоже любят тратить рабочее время на развлечения. Например, так выглядят названия релизов Ubuntu в заголовочных файлах:
$ zcat /usr/share/doc/linux-image-`uname -r`/changelog.Debian.gz | egrep -e «Release»
The «Ben got a PowerBook for Christmas» Release.
The «Quickest re-release ever» Release
The «Oh crap, what did I get myself into?» Release.
The «Atomic Artichoke» Release.
The «Crunchy Corn» Release.
The «Crispy Chicken» Release.
$ zgrep «The.*Release» /usr/share/doc/dpkg/changelog.Debian.gz
The «Good, clean fun» Release.
The «Bully’s Special Prize» Release.
The «On like Donkey Kong» Release.
Разработчики PHP тоже сумели отличиться. Добавь следующую строку к php-запросу ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 на любом из сайтов с установленными Apache и PHP. В результате получишь изображение симпатичной собачки, вид которой, как я понимаю, зависит от версии PHP. При запросе ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 будет выведен знак проекта.
Для того чтобы отменить выполнение системного вызова reboot(), необходимо передать ему два параметра, первый из которых 0xfee1dead, а второй один из:
$ grep LINUX_REBOOT_MAGIC include/linux/*.h
include/linux/reboot.h:#define LINUX_REBOOT_MAGIC1 0xfee1dead
include/linux/reboot.h:#define LINUX_REBOOT_MAGIC2 672274793
include/linux/reboot.h:#define LINUX_REBOOT_MAGIC2A 85072278
include/linux/reboot.h:#define LINUX_REBOOT_MAGIC2B 369367448
include/linux/reboot.h:#define LINUX_REBOOT_MAGIC2C 537993216
Посмотрим, что означают эти непонятные числа:
$ printf «%x\n» 672274793
28121969
Именно в этот день (28 декабря 1969 года) в городе Хельсинки родился отец операционной системы Linux – Линус Бенедикт Торвальдс, а уж кому как не ему командовать процессами в ядре. Остальные цифры, я думаю, ты пробьешь уже сам.
Консольные утилиты
Наиболее известное «пасхальное яйцо» вынашивают утилиты apt и aptitude, с помощью которых устанавливаются приложения в Debian, хотя в вариантах Ubuntu, ALTLinux и Knoppix описанное ниже тоже работает на ура:
$ apt-get moo
(__)
(oo)
/——\/
/ | ||
* /\—/\
~~ ~~
….»Have you mooed today?»…
Вот такая симпатичная коровка нас только что обмычала. А вот aptitude (оболочка к apt) никогда не признается в наличии пасхальных яиц (ну, только если хорошо попросить):
$ aptitude moo
There are no Easter Eggs in this program.
Как видишь, тебе честно ответили, что в aptitude нет «пасхального яйца». Ты поверил? Я нет. Если к запросу добавить от двух до шести букв ‘v’ (aptitude -vvvvvv moo), то в итоге получим слона, проглоченного змеей:
-v – There really are no Easter Eggs in this program.
-vv – Didn’t I already tell you that there are no Easter Eggs in this program?
-vvv – Stop it!
-vvvv – Okay, okay, if I give you an Easter Egg, will you go away?
-vvvvv – All right, you win.
-vvvvvv – What is it? It’s an elephant being eaten by a snake, of course.
Кстати, emerge из Gentoo тоже мычит, будь здоров, попробуй «emerge moo», убедись сам. А вот slapt-get из Slaskware – нет. Его, очевидно, создают действительно серьезные ребята, которым действительно не до шуток.
Команда whois, оказывается, может выдать не только информацию, взятую из базы данных Network Information Center, но и отлично ориентируется в более широком спектре жизненных вопросов. Попробуй набрать в Ark Linux «whois the devil» или «whois the antichrist».
Кроме root в некоторых дистрибутивах Linux есть еще один привилегированный пользователь. Не веришь? Создай пользователя tyler с любым паролем. А теперь попробуй ввести команду halt или reboot. Перед остановкой системы будет выведено такое сообщение: «Oh hello Mr. Tyler – going DOWN?».
Под любым другим пользователем такого точно не увидишь. Очевидно, кому-то из разработчиков нравится клип рок-группы Aerosmith «Love in an Elevator», в котором эти слова произносит симпатичная девушка из лифта.
Однажды мне захотелось узнать, какие строки содержит команда sudo:
$ strings /usr/bin/sudo
I feel much better now.
Where did you learn to type?
I’ve seen penguins that can type better than that.
Are you on drugs?
…
Есть и просто программы-шутки, например, с помощью команды ddate можно получать информацию об интересующих числах календаря:
$ ddate
Today is Pungenday, the 38th day of Chaos in the YOLD 3173
$ ddate 01 04 2007
Sweetmorn, Discord 18, 3173 YOLD
$ ddate 01 01 2000
Sweetmorn, Chaos 1, 3166 YOLD
Чтобы увидеть фразу из первой части знаменитой трилогии «Путешествие автостопом по Галактике» Дугласа Адамса, открываем редактор vi и набираем «:help 42″:
$ vi
:help 42
В более ранних версиях vi попадалось еще одно яйцо. Чтобы его увидеть, необходимо было открыть файл programmers.txt, а если его нет, то создать:
$ vi programmers.txt
Далее нажатием клавиши <i> следует перейти в режим вставки, одиннадцать раз нажать на <Enter> и на 12 строке ввести Bram Moolenaar, затем открыть новый буфер, нажав последовательно <CTRL+W> и <N>. Результатом данной операции будет список команды разработчиков.
А вот ребята из Gentoo манией величия не страдают, почти. Чтобы проверить это, достаточно в Gentoo 2005.1 в терминале набрать:
# modules-update you
Error: I don’t understand you
Вроде моя твоя не понимай. Теперь спросим: «Кто тут самый главный»:
# who is god
root pts/0 Dec 19 15:35 (:0.0)
Разработчики Knoppix тоже решили нас немного порадовать. Открываем консоль, набираем bb, и шоу точно обеспечено. Да, и обязательно включи колонки, чтобы не пропустить все интересное. Такой вот портфолио ASCII-арта.
Шутки в дистрибутивах
Наибольшими любителями развлекаться в рабочее время оказались ребята из SUSE, в старых версиях этого дистрибутива было спрятано достаточно яиц. Так при установке SuSE 7.2 Professional, как только будет скопировано ядро и начнется копирование остальных файлов, во второй консоли, куда следует перейти по <Ctrl+Alt+F2>, будет выведено прощальное сообщение из «Путешествие автостопом по Галактике». Выпуск версии SuSE 8.1 как раз совпал с 10-летием компании, которое разработчики пропустить никак не могли. Попробуй во время установки дистрибутива остановить отсчет времени, нажав на одну из клавиш со стрелками и затем <F10>. На экране появится праздничный торт с фирменным логотипом хамелеона, а из динамиков будет раздаваться «Happy birthday to you». В версии SuSE 8.2 они, очевидно, остановиться уже просто не смогли – чтобы увидеть здоровающегося хамелеона, достаточно при установке нажать <F5>.
В дистрибутиве RedHat имеется файл /usr/libexec/redhat-credits, выводящий имена разработчиков, его можно запустить как вручную, так и нажав <Ctrl+Alt+Shift> и трижды щелкнув мышкой по фоновому изображению рабочего стола. В последнем openSUSE 10.3 разработчики не изменили своим традициям и подарили своим поклонникам очередное “пасхальное яйцо”. При нажатии клавиши F8 появляется переливающееся изображение фирменного хамелеона, убрать который можно по F9.
Судя по всему, разработчики веб-браузера Mozilla не очень утруждают себя работой, и если хорошо поискать в любом из браузеров, использующих движок gecko (Mozilla, Mozilla Firefox, Galeon), можно найти много интересного. «И, наконец, зверь пал, и обрадовались неверующие…» The Book of Mozilla, 7:15. Просмотреть эту главу можно, набрав «about:mozilla» в адресной строке любого из этих браузеров. В свое время разработчики IE в версии 4.0 пошутили о том, что Mozilla будет крушить компьютеры. Для этого также необходимо было набрать в адресной строке IE «about:mozilla». Таким образом, команда Mozilla ответила шутникам. Причем текст в старых версиях отличался, там говорилось о том, что «шум миллиона клавиатур подобно большому шторму должен покрыть землю». Ну, что ж – это пророчество уже сбылось.
Не обошлось без скрытой саморекламы. Например, чтобы узнать имена разработчиков, принимавших участие в создании этого браузера, не надо ходить на сайт, достаточно ввести «about:credits», и будет выведен длинный список. А вот если по ошибке набрать вместо www.google.com просто www.goog, сможем просмотреть интересный флеш-мультик на сайте одного из разработчиков по адресу elephanteggs.com/Goog.htm. Аналогичная ситуация произойдет, если в этих браузерах потянуть за любой значок в панели закладок и бросить его в рабочем пространстве. Есть и просто развлечения: установив расширение addons.mozilla.org/firefox/742 и набрав «about:kitchensink», можно долго наблюдать, как из крана течет вода.
Графические приложения
В консольных утилитах нашлось достаточное количество «пасхальных яиц», но и в графических не обошлось без сюрпризов. Например, mIRC был в свое время убран из Debian именно по причине наличия пасхального яйца, причем разработчик этого IRC-клиента постоянно менял секреты, что доставляло искреннюю радость нашедшим их пользователям. Например, щелкнув правой кнопкой мыши по логотипу в окне About, можно увидеть прыгающий мяч, если щелкнуть по значку, он изменялся. В некоторых версиях, чтобы это увидеть, нужно было набрать arnie, а еще в более старых версиях – [Tye TROUT reply]: WHOP! THWHACK! SLAP!. В версии 5.5 и выше необходимо еще в течение 5 секунд подержать <Tab>, а затем <Space>.
Перейдем к более тяжелым приложениям. Работая в GNOME, выбираем пункт меню «Run program» (<Alt-F2>, Выполнить программу), вводим «free the fish», затем нажимаем «Run». Теперь по экрану время от времени будет плавать маленькая рыбка Wanda, прихлопнуть ее можно, только вместе с панелью. Не бойся, панель восстановится. Если щелкнуть по рыбке, она убежит, но через некоторое время обязательно вернется. Есть и другой способ вызвать Wand’у: щелчок правой кнопкой мыши по панели, выбираем «Panel info» и три раза жмем <F>. Убивать так же (если не жалко). Но это еще не все. Повторно вызываем «Run program» и набираем «gegls from outer space», теперь вместе с Wand’oй будем отражать нападение космических захватчиков. Хотя в новых SUSE вместо космических кораблей возможна атака Genetically Engineered Goat Large (GEGL), что в переводе на русский означает «козел».
Клон тетриса Gnometris позволяет установить любой цвет фона или рисунок, чтобы сделать это, достаточно перетащить файл или изображение с Gimp или Наутилуса в окно программы.
Разработчики GNU Gimp тоже время зря не теряли. Чтобы увидеть альтернативный логотип проекта, жмем <Ctrl> и переходим в «Help -> About». Кстати, старые пасхальные яйца Gimp уже перекочевали в разряд фильтров. Это GEE Slime и GEE Zoom.
Хочешь увидеть «пасхальное яйцо» в IDE Anjuta? Создай новый generic/terminal проект с названием «Animation» и именем автора «Horse». В окне описания введи «ShOw Me ThE AnImATiON now». После компиляции по экрану будет бегать лошадь.
Очередь офисных пакетов – StarOffice (от 6.0) и OpenOffice (от 1.0.1). То же думаешь, что разработчики трудятся, не покладая рук? Зря. Открываем текстовый редактор Writer, набираем StarWriterTeam и нажимаем на <F3>. Результат – команда разработчиков собственной персоной.
А разработчики табличного редактора Calc пошли еще дальше. Запиши в любую ячейку «=Game(«StarWars»)», нажми ввод и можешь наслаждаться игрой, спасая планету от нашествия инопланетян. Правда, в некоторых версиях вместо этого сообщат, что «oh no, not again».
Но и этого им оказалось мало, они встроили в Calc даже крестики-нолики. Чтобы поиграть, достаточно в любой из ячеек внутри диапазона A1:C3 ввести «=Game(A1:C3;»TicTacToe»)». Компьютер автоматически сделает следующий ход, и так далее до победного конца.
В музыкальном редакторе Audacity то же не обошлось без сюрпризов. Выбираем меню «Help -> About Audacity» и, держа нажатыми клавиши <Ctrl+Alt>, щелкаем средней кнопкой мышки по логотипу программы. В результате увидим версию wxWidgets и дату сборки.
А вот если в список воспроизведения музыкального проигрывателя Amarok добавить альбом Amarok (кстати, это 13-й по счету) Майка Олдфильда, то в процессе прослушивания 60 минутной смеси электронной музыки можно лицезреть список разработчиков, участвовавших в создании проигрывателя.
Вот такой вот небольшой набор, вероятно, есть еще интересные свойства у любимых программ. Найти их не так-то просто, но главное, что они есть. Здесь, как говорится, гугл в помощь.