Часто ли программисты вставляют «пасхалки» в свой код?

0
704
views
Пасхалки в коде

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

Дэвид Раттер

Обычно автором первого «пасхального яйца» считают Уоррена Робинетта, создателя игры «Adventure» для Atari 2600.

В то время (1979 год) создатели игр оставались неизвестными. И Робинетт захотел спрятать свое имя в игре таким образом, чтобы высокомерный менеджмент Atari ничего не заметил и, следовательно, не заставил бы его это удалить. После включения своей пасхалки Уоррен Робинетт ушел из Atari, а компания продолжила тиражировать игры со спрятанным в них именем создателя. Этим он как бы показал им средний палец за их отношение к создателям игр.

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

Пасхалка в игре Adventure
Так выглядела та самая пасхалка в игре Adventure.
By Atari, Fair use, https://en.wikipedia.org/w/index.php?curid=5505068

Но на самом деле это был не первый случай, когда создатель игры прятал в ней свое имя, просто другие примеры еще до недавних пор оставались секретом. Например, пасхалка Бреда Реида-Сета в Video Whizball была создана на год раньше пасхалки в Adventure, но не была найдена аж до 2004 года. Пасхальное яйцо Рона Мильнера в Starship 1, реализованное еще в 1977 году, обнаружили лишь в 2017.

Дмитрий Мурашенков

Если вы заказываете банковское ПО и платите за него 10 млн. долларов, то последнее, что вы хотели бы увидеть в конечном продукте, это какая-нибудь шутка, показавшаяся разработчику забавной. Многие компании отдельно оговаривают в своих контрактах, что поставки не должны содержать никаких пасхалок.

Кроме того, типичный программист обычно слишком занят, стараясь успеть к дедлайну, а выдумывание и разработка пасхалок требуют времени и вдохновения. Ведь ваша цель не просто спрятать что-то в коде, вы хотите, чтобы это классно выглядело. Довольно мало проектов дадут вам возможность это реализовать.

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

Проблемы из-за пасхалок

Колин Моден

Да, но…

Пасхалки это результат желания разработчиков покуражиться. Есть легенда, что внутри Microsoft Excel спрятана копия игры Doom, которая может быть вызвана особым (незадокументированным) набором действий с клавиатурой и мышью.

Но корпорации, нанимающие программистов, обычно не являются поклонниками пасхалок. Представьте, что легенда о Doom/Exce это правда…

  • Вероятно, Excel потребляет больше памяти, чем необходимо. Сегодня у него нет заметных конкурентов, да и память стоит дешево, но 20 лет назад это могло сыграть большую роль.
  • Возможно, Microsoft не является собственником кода или IP для Doom. Собственники Doom могут подать в суд за нарушение их прав и потребовать себе 30% доходов от Excel.

В любом случае, легко представить, что сделавший это программист будет уволен.

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

Стив Дэдс

Я никогда не вставлял пасхалок в промышленное ПО. Но был случай, когда я делал что-то вроде пасхалки. Я работал в компании, выпускавшей корма для животных, и делал там систему взвешивания кормов. Было это в 1970-е. Каждая смена должна была случайным образом отбирать с линии конвейера 10 банок корма и взвешивать их. Обычно вес колебался в небольшом диапазоне, скажем, отличался на 3-4 грамма. Если отклонение выходило за рамки этого диапазона, компьютер должен был вывести на экран информацию о том, сколько процентов составляет недовес.

Корм для животных

Начальство беспокоилось, что персонал может просто взвешивать несколько раз одну и ту же банку. Поэтому мы написали программу таким образом, что если три взвешивания подряд отклонения по весу будут не больше 0,25г, то вместо вывода на экран «Недовес — 0,35%» должно было появиться «Кого вы пытаетесь надуть?».

Такой случай произошел только один раз и больше никогда не повторялся, поскольку работники подумали, что компьютер следит за ними. Ну, или нашли другой способ обмануть систему…

Родриго Иригоен

Мы слишком заняты, чтобы добавлять в программы еще и пасхалки. Если вам когда-либо посчастливилось найти нечто подобное, то лишь потому, что это было запланировано как часть проекта. В подобных случаях цель пасхалок – привлечь внимание публики. Люди начинают покупать или использовать продукт просто для того чтобы увидеть пасхалку.

Но в большинстве случаев то, что люди принимают за пасхалки, это просто код отладки, который программисты использовали для тестирования и забыли удалить. Никто не хотел, чтоб это было найдено. Я вот тоже допускал «ошибки»:

1. Однажды я был на последнем этапе перед отправкой кода в продакшен, и тут зашла моя жена. Она искала ручку и бумагу, чтобы записать номер телефона. У меня бумаги не было, поэтому я сделал комментарий в своем коде и впечатал туда этот номер телефона. И продолжил писать код. Было уже очень поздно, и я сделал коммит, не удалив свой комментарий. На следующий день код протестировали и отправили в продакшен. А через день жена спросила номер телефона. «Упс! Он в моем коде. А код ушел в продакшен…».

Я сказал об этом своему боссу. Оказалось, мы не можем вносить изменения в код, за исключением случаев, когда у нас на руках user story с требованиями. От лишнего комментария в коде не было никакого вреда, так что мы решили его не трогать. И мы так никогда и не получили требований его убрать. Так что в том коде, наверное, до сих пор есть комментарий: \\Paty: 2233–44–55–66

2. При отладке кода нам приходится писать некоторые комментарии, чтобы увидеть, что делает код. Это особенно верно в многопоточных программах, потому что вы не можете просто идти построчно. Так что вы пишете что-то вроде log («Step1: a =« + a);

Поскольку мы спешим, мы не придумываем настоящие сообщения об ошибках. Нам же просто нужно посмотреть, что делает код. Поэтому появляются сообщения об ошибках типа «упс», «дерьмо», «только не снова». Я обычно добавляю что-то, что напомнит мне о необходимости удаления, и мои сообщения обычно выглядят так: «****** сообщение». Но однажды я забыл добавить «*****» и просто написал: «Тебя здесь не должно быть. Это никогда не должно было случиться».

Это сообщение об ошибке должно было появиться при действительно странных обстоятельствах (если я правильно помню, при одновременном сбое трех служб). Поэтому оно не проявилось ни в моих тестах, ни в тестах QA.

Но однажды из-за перепада напряжения выбило часть сети, а сервер не заметил этого изменения. И у нас появились ТЫСЯЧИ «Тебя здесь не должно быть. Это никогда не должно было случиться» в логах сервера. Мне сделали выговор за то, что я решил шуточки шутить вместо того чтобы написать настоящее сообщение об ошибке. Эта ошибка больше никогда не повторялась за все три года, что я работал в той компании.

Ошибочно добавленные в программу вещи не обязательно пасхалки

Михал Фита

Вопрос исходит из предположения, что большинство разработчиков создают программы, где пользователь может произвольно выбирать, какую функцию выполнить, – как в десктопных приложениях. Но на самом деле большая часть ПО на планете имеет четкие ограничения относительно того, что может делать пользователь. Это касается программного обеспечения в автомобильной и авиакосмической промышленности, медицине, производстве, сетях и многом другом. Игры (хотя это довольно крупная индустрия) и десктопные программы – это лишь малая часть всего создаваемого программного обеспечения.

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

Эндрю Шарп

Я никогда не оставлял никаких пасхалок в программе, идущей в производство. Если бы вы занимались вопросами безопасности столько лет, сколько я (собственно, 41 год уже), вы бы знали, что QA никогда не тестирует пасхалки (даже если знает о них). А вот хакеры их за это очень любят. Так что простите, что порчу вечеринку, но пасхалки это очень плохая идея.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here