Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #100, АПРЕЛЬ 2007 г.

Пингвиньи яйца

Сергей «grinder» Яремчук

Хакер, номер #100, стр. 100-102-1

(grinder@ua.fm)

Easter Eggs в приложениях Linux

Пасхальные яйца уже стали привычным атрибутом современных приложений. Так разработчики напоминают о себе, привлекают внимание к программному продукту, а иногда просто занимаются ерундой в рабочее время, вместо того чтобы всячески совершенствовать свой проект. Традиционно считается, что в приложениях с открытым исходным кодом не может быть никаких вложений, в том числе и пасхальных яиц, так как такие программы пишут только серьезные бородатые дядьки с неулыбчивыми лицами, среди которых нет места шутникам, да и любой желающий может проверить код на чистоту.

Пингвинье сердце

«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)$" *

/* Tu 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

Waing: 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.

Содержание  Вперед на стр. 100-102-2
ttfb: 2116.5280342102 ms