«А у меня всё работает»: эволюция легендарного айтишного мема
Если вам доводилось жаловаться инженеру на зависший сайт, капризный принтер или падающее приложение, вы наверняка слышали в ответ скептическое: «Странно, но у меня всё запускается». Если же вы сами работаете в IT, то наверняка произносили эту фразу лично — судя по всему, еще на текущей неделе. Ее произносят и джуны, и лид-разработчики, и фрилансеры, и сотрудники корпораций. Звучит она на любых языках с абсолютно одинаковой интонацией, словно ее выдают в комплекте с корпоративным ноутбуком при трудоустройстве. Я решила проследить ее истоки и обнаружила сорокалетнюю историю, в которой отметились нобелевские лауреаты, громоздкие мейнфреймы, пародии на Windows Vista и мем, знакомый каждому пользователю сети.
Начнем с любопытного документа, который попался мне на глаза и которым я теперь регулярно делюсь. В арсенале программистов есть баг-трекеры — специальные платформы для учета неполадок, где каждая задача проходит путь от обсуждения до финального статуса: «исправлено», «дубликат», «закрывать не будем». Так вот, 28 января 2002 года в 14:13 по UTC разработчик среды NetBeans под ником tpavek перевел тикет № 19839 в статус WORKSFORME («у меня работает»), однако уже в 18:30 того же дня вернул его в работу. Спустя три дня баг окончательно закрыли как устраненный. Что именно произошло за эти четыре часа, история умалчивает, но я склонна полагать, что к tpavek просто подошел коллега с лэптопом и молча развернул экран.
Корень зла — в физике
Самое удивительное, что культовая фраза имеет вполне научное обоснование, уходящее корнями в 1985 год. Тогда Джим Грей, специалист из Tandem Computers, опубликовал фундаментальный отчет «Почему зависают компьютеры и как с этим бороться». Его компания специализировалась на отказоустойчивых системах, падение которых недопустимо, поэтому Грей изучал методы обеспечения стабильности ПО.
В своем труде он классифицировал программные баги на две категории, заимствовав терминологию из квантовой физики. «Борбаги» (в честь модели атома Нильса Бора) — это стабильные, предсказуемые дефекты, которые легко локализуются привычными методами, из-за чего Грей назвал их скучными. «Гейзенбаги» ведут себя подобно принципу неопределенности Гейзенберга: они могут годами ускользать от разработчиков, а попытка их отладить зачастую меняет состояние системы так, что ошибка бесследно исчезает. Это знакомо любому автовладельцу, который приехал в автосервис с загадочным стуком в подвеске, замолкающим ровно в момент осмотра мастером.
Далее Грей сделал вывод, превращающий эту забавную классификацию в суровую реальность. Проанализировав статистику сбоев Tandem, он выяснил, что из 132 зафиксированных падений программ лишь ОДИН случай пришелся на борбаг, тогда как все остальные оказались гейзенбагами. Иными словами, в 131 случае из 132 при повторном запуске ошибка просто не воспроизводилась.
Tandem умудрилась построить на этом уникальную бизнес-модель. Их софт функционировал зеркально: главный процесс выполнялся на одном процессоре, а резервный — на другом. При сбое основного ядра эстафету подхватывал дублер; если падал и он, значит, баг был реальным и воспроизводимым. Если нет — система продолжала работу, а пользователь даже ничего не замечал. Выходит, принцип «на соседнем компьютере всё ок» лежал в основе фирменной надежности Tandem, за которую клиенты готовы были платить огромные деньги.
Ради исторической справедливости стоит уточнить: сам термин «гейзенбаг» придумал не Грей. Хотя авторство часто приписывают ему из-за того самого отчета, Брюс Линдсей из IBM в интервью 2004 года упоминал, что застал момент появления термина, хотя точную дату назвать затруднился. Программистский фольклор, как и любой другой артефакт устной культуры, долгое время передавался из уст в уста, прежде чем попасть на страницы книг.
У крылатой фразы есть близнец
Одним из таких письменных источников стал Jargon File — знаменитый словарь хакерского сленга, где обнаружилась статья, которую можно назвать прямым родственником нашей фразы. Она озаглавлена «Я ничего не трогал!» и описывается как отчаянный вопль, издаваемый разработчиком в момент, когда проверка кода внезапно выявляет критические ошибки. Лучшим контрвопросом составители словаря считают реплику: «И тем не менее, поведение программы изменилось, верно?» Там же приводится жизненное наблюдение, достойное цитирования в любом офисе: после долгих расспросов автор кода обычно сознается в масштабных правках, которые, по его мнению, никак не могли повлиять на логику, но на деле полностью разрушили ее.
Если приглядеться, обе фразы построены по одному принципу. Человек возводит собственное окружение в ранг эталона — будь то индивидуальный сетап или внесенные им правки, — а всё, что отклоняется от этого идеала, автоматически объявляется внешней проблемой. Разница лишь в адресате: «я ничего не менял» служит щитом от гнева руководства, а «у меня работает» парирует претензии тестировщиков и конечных пользователей.
Следующей вехой в эволюции этой отговорки стала экосистема Netscape — компании, подарившей многим первое окно в веб и ставшей прародительницей Mozilla и Firefox. В 1998 году программист Терри Вайсман написал для внутренних нужд компании трекер Bugzilla на замену старой системе. Публичный запуск состоялся 6 апреля 1998 года, а в августе исходный код открыли общественности. Вместе с Bugzilla по миру распространился и стандартизированный набор статусов тикетов, где по соседству с «исправлено», «дубликат» и «отклонено» красовался тот самый заветный статус WORKSFORME.
С этого момента фраза перестала быть просто устной пикировкой. В устном споре оппонент всегда может возразить, продолжив дискуссию. Когда же она превращается в системный статус в базе данных, жалоба считается закрытой, исчезает из аналитики, а график открытых проблем стремительно падает вниз. Иногда встречаются поистине уникальные кейсы: в баг-трекере Apache мне попалась заявка, которую активно обсуждали в конце 2011 года, а закрыли со статусом WORKSFORME лишь в мае 2016-го. Видимо, за четыре с лишним года баг самоустранился, как легкая простуда.
При этом за данным статусом кроется вполне прагматичный смысл. Он означает: «Я попытался воспроизвести сбой, но у меня не получилось, предоставьте больше вводных». Именно так его и использовал tpavek в начале нашей истории: закрыл тикет, получил уточнения, переоткрыл и починил. Единственное, что кажется мне не совсем точным — сама формулировка. Фраза «у меня работает» акцентирует внимание на железе разработчика, хотя корень проблемы кроется на стороне пользователя, из-за чего звучит это как завуалированное «не мешайте». В Jira аналогичный статус называется более корректно — Cannot Reproduce («не удалось воспроизвести»), описывая действия специалиста, который как минимум приложил усилия.
Фирменный знак и кнопка F5
В 2007 году этот фольклор обрел визуальное воплощение. Разработчик Джозеф Куни предложил шуточную программу сертификации софта «Works on My Machine», а Джефф Атвуд (будущий сооснователь Stack Overflow) вместе с коллегой Джоном Гэллоуэем создал для нее иконку, посчитав стандартный серый бейдж Windows Vista недостаточно солидным. Критерии сертификации были максимально демократичными: для прохождения теста достаточно нажать клавишу F5, а подтягивать актуальные изменения от коллег вовсе необязательно. Сувенирная продукция с этим логотипом — футболки, стикеры и кружки — разлетелась мгновенно, а программист Нед Батчелдер отметил в своем блоге, что Куни лишь формализовал реальные рабочие процессы инженеров.
Читая комментарии к посту Атвуда, чувствуешь себя этнографом. Один пользователь вспомнил французский аналог «chez moi ça marche» («у меня дома работает»), другой обрадовался возможности молча указывать на принты на собственной футболке. Кто-то даже запустил шуточную «партнерку» для владельцев виртуальных машин. А некто оставил комментарий, звучащий сегодня как пророчество: многие компании начинают поставлять приложения в комплекте с образами виртуалок, чтобы клиенты получали точную копию рабочей среды разработчика. Угадайте, сколько оставалось до релиза Docker?
Оставалось около шести лет. Для людей, далеких от программирования, Docker проще всего объяснить как переезд со всей своей мебелью: приложение упаковывают в изолированный контейнер вместе с конфигами, библиотеками и зависимостями, гарантируя идентичный запуск на любой машине. Технологию разработала команда dotCloud, а в 2013 году представила ее широкой публике под брендом Docker.
Вскоре по просторам интернета разошелся культовый веб-комикс: расстроенный ребенок жалуется взрослому, что код отказался работать, на что тот парирует: «Тогда мы просто отправим твою машину целиком», — и подпись гласит, что так появился Docker. Комикс давно живет своей жизнью, собирая под каждым репостом забавные дискуссии. Кто-то возмущается баянистичности картинки, на что справедливо замечают: каждую секунду рождаются новые люди, так что этот цикл вечен.
Ирония заключается в том, что Docker в точности воплотил давнюю фантазию того самого комментатора из 2007 года. Впрочем, сама фраза не канула в Лету, а просто поднялась на уровень выше. Теперь инженеры шутят: «Зато у меня контейнер собирается», порождая новые фольклорные мемы о вечном противостоянии локальных сборок и CI/CD-серверов, а также несовместимости архитектур процессоров. Гейзенбаг просто нашел новое убежище — теперь уже в пространстве между контейнером и «железом» хоста.
Почему на русском это звучит больнее всего
Напоследок немного лингвистики, ведь одна деталь упорно не дает мне покоя. В англоязычном варианте фигурирует машина («machine»), адресуя претензию оборудованию. Французское выражение «chez moi» отсылает к дому («у меня дома»), создавая гостеприимную атмосферу: заглядывайте, мол, чаю нальем, всё функционирует. И только русскоязычный вариант обходится без упоминания компьютеров и жилья: конструкция «у меня» грамматически совпадает со словосочетаниями «у меня болит голова» или «у меня температура». Это звучит почти как медицинский диагноз собственному состоянию, после которого собеседнику остается лишь с грустью констатировать наличие хронических проблем.
Суммируя всё вышесказанное, становится очевидно, почему эта фраза успешно пережила четыре десятилетия и смену технологических эпох. Согласно выводам Джима Грея, львиная доля багов зависит от окружения, а значит, заявление «у меня работает» почти всегда технически правдиво. Именно это и вызывает раздражение: оно несет исчерпывающую информацию о конфигурации говорящего, но абсолютно бесполезно для решения вашей текущей задачи.
Поэтому самый рациональный вывод из этой истории довольно прост. Разработчику, не сумевшему воспроизвести баг, гораздо эффективнее сообщить точную версию ПО, параметры среды и задать вопрос о различиях в сетапе — ведь, если верить Грею, разгадка кроется именно в этих нюансах. А пользователю, столкнувшемуся с классическим «у меня работает», не стоит обижаться: лучше оперативно прикрепить скриншот, номер версии и пошаговый алгоритм действий, поскольку неуловимые гейзенбаги капитулируют исключительно под натиском деталей.
А у самой Bugzilla есть красивый тихий эпилог. 27 августа 1998 года Терри Вайсман завел в системе несколько багов, касающихся его собственных недоработок, которые он планировал устранить. Спустя два десятилетия тикет за номером 540 всё еще оставался открытым. За долгие годы ни у кого не поднялась рука закрыть его со статусом WORKSFORME — пожалуй, это высшая форма уважения, которую баг-трекер может проявить к своему создателю. Если в вашей практике тоже случались легендарные истории с этим статусом, поделитесь ими в комментариях, мне искренне интересно, чей рекорд окажется долговечнее.
Принципы работы и схемотехника бесколлекторных двигателей и их драйверов
Как физика помогает разоблачать фальшивые картины: от титановых белил и Геринга до ядерных испытаний
Физика велосипеда: от закона рычага до парадокса систем отсчета
Организовал для юных моделей проектный институт: почему слабое деление на разделы увеличило результат вчетверо — пять главных пунктов
Как свет покорил нейроны: триумф оптогенетики на пути к Нобелевке
FLAC и MP3: какие детали пропадают при сжатии и заметно ли это на слух
Приключения латиницы: венгерские иллюминаты и румынский ренессанс