«А у меня все работает»: история айтишного фольклора


Если вы хоть раз жаловались айтишнику, что у вас не открывается сайт, не печатает принтер или вылетает программа, то почти наверняка слышали в ответ задумчивое «странно, а у меня все работает». Если вы сами айтишник, то эту фразу вы произносили, и, скорее всего, на этой неделе. Ее говорят студенты и тимлиды, фрилансеры и сотрудники банков, на русском, английском и французском, причем с одинаковой интонацией, будто ее выдают вместе с первым рабочим ноутбуком. Я решила выяснить, откуда она взялась, и выяснилось, что у фразы есть родословная длиной в сорок лет, с нобелевскими лауреатами, мейнфреймами, пародией на Windows Vista и комиксом, который видел, кажется, каждый человек с доступом в интернет.
Начну с документа, который мне попался по дороге и который я теперь показываю всем знакомым. У программистов есть баг-трекеры, то есть журналы жалоб, где каждая проблема получает номер, обсуждение и в конце итоговый штамп: исправлено, дубликат, не будем чинить. Так вот, 28 января 2002 года в 14:13 по UTC разработчик среды NetBeans под ником tpavek закрыл жалобу номер 19839 со штампом WORKSFORME, то есть «у меня работает», а в 18:30 того же дня открыл ее обратно. Через три дня жалобу закрыли уже как исправленную. Что произошло за эти четыре часа, в журнале не написано, но я почти уверена, что к tpavek подошел коллега с ноутбуком и молча развернул к нему экран.
Во всем виноваты физики
Самое неожиданное в этой истории то, что у фразы «а у меня работает» есть научное обоснование, и появилось оно в 1985 году. Джим Грей, исследователь из компании Tandem Computers, выпустил тогда технический отчет под названием «Почему компьютеры останавливаются и что с этим можно сделать». Tandem делала машины для систем, которым падать нельзя, и Грей занимался тем, чтобы программы в них переживали сбои.
В отчете он разделил ошибки в программах на два вида и назвал их в честь двух физиков. Борбаги, как атом в модели Бора, твердые и предсказуемые, их легко поймать стандартными методами, и поэтому Грей называет их скучными. Гейзенбаги ведут себя как частицы у Гейзенберга: они могут годами ускользать от охотника, а сам процесс поиска порой меняет систему ровно настолько, что ошибка пропадает. Знакомо по жизни любому, кто приезжал в автосервис со стуком в подвеске, который ровно у мастера и затихает.
А дальше Грей сделал то, что превращает забавную классификацию в приговор. Он посчитал, каких ошибок у Tandem в реальной работе больше, и оказалось, что за период наблюдений из 132 программных сбоев только ОДИН был борбагом, а все остальные оказались гейзенбагами. Другими словами, в 131 случае из 132 ошибка при повторной попытке просто не воспроизводилась.
Tandem умудрилась на этом построить бизнес. Программы у нее работали парами: основная копия на одном процессоре и запасная на другом. Когда основная падала, работу повторял «брат», и если брат тоже падал, значит, ошибка настоящая и воспроизводимая, а если не падал, система ехала дальше, и клиент ничего не замечал. Получается, что принцип «на соседней машине работает» был у Tandem официальным механизмом надежности, за который заказчики платили очень серьезные деньги.
Ради исторической справедливости стоит сказать, что само слово «гейзенбаг» придумал не Грей. Его часто приписывают Грею из-за этого отчета, но Брюс Линдсей из IBM в интервью 2004 года рассказывал, что присутствовал при рождении термина, правда, дату так и не назвал. Программистский фольклор, как и любой другой, сначала передавался из уст в уста и только потом попадал в книжки.
У фразы есть родная сестра
Одной из таких книжек стал Jargon File, словарь хакерского жаргона, и в нем нашлась статья, которую я считаю родной сестрой нашей фразы. Называется она «Я ничего не менял!», и описывается как обиженный вопль, который раздается, когда при проверке программы вдруг вылезают ошибки. Каноническим ответом словарь считает встречный вопрос: «Тогда оно и работает точно так же, как раньше, правда?» Там же есть продолжение, которое я бы повесила в рамочке в любом опенспейсе: после пристрастного допроса автор обычно признается в крупной переделке программы, которая, по его мнению, ничего сломать не могла, но на деле испортила все целиком.
Если присмотреться, обе фразы устроены одинаково. Человек объявляет свое окружение эталоном, будь то свой компьютер или свои изменения, и все, что с эталоном не сходится, автоматически становится проблемой окружающего мира. Разница только в том, от кого он защищается: «я ничего не менял» отбивает претензии начальства, а «у меня работает» парирует жалобы тестировщиков и пользователей.
Как отговорка получила официальный статус
Следующий шаг фраза сделала в Netscape, компании, чей браузер для многих был первым окном в интернет и из которой потом выросли Mozilla и Firefox. В 1998 году программист Терри Вайсман написал для проекта баг-трекер Bugzilla на замену внутренней системе, которой пользовались в Netscape. Публичная версия заработала 6 апреля 1998 года, а в августе ее исходники открыли для всех. Bugzilla разошлась по миру, и вместе с ней разошелся набор итоговых штампов, среди которых рядом с «исправлено», «дубликат» и «не будем чинить» стоял тот самый WORKSFORME.
С этого момента фраза перестала быть просто репликой в споре. Пока ее произносят вслух, собеседник может возразить, и спор продолжается. Когда она становится штампом в базе данных, жалоба закрыта, из отчетов исчезает, и количество открытых проблем красиво ползет вниз. Попадаются совершенно чудесные экземпляры: в баг-трекере Apache мне встретилась жалоба, которая в конце 2011 года еще обсуждалась, а в мае 2016-го была закрыта как WORKSFORME. За четыре с лишним года проблема, видимо, прошла сама, как насморк.
При этом у штампа есть вполне здравый смысл. Он означает «я попробовал повторить и не смог, принесите подробностей», и именно так его использовал tpavek из начала статьи: закрыл, получил ответ, открыл, починил. Мне только кажется, что у самой формулировки неудачная грамматика. «У меня работает» рассказывает про компьютер разработчика, хотя речь идет о проблеме пользователя, и поэтому звучит как вежливое «отстаньте». В Jira похожий штамп называется Cannot Reproduce, «не удалось воспроизвести», и описывает уже действие человека, который хотя бы попытался.
Сертифицировано, жмите F5
В 2007 году у фольклора появилась собственная эмблема. Разработчик Джозеф Куни придумал программу сертификации приложений «Works on My Machine», а Джефф Атвуд, будущий сооснователь Stack Overflow, вместе с Джоном Гэллоуэем нарисовал для нее значок, потому что скромный серый бейдж Windows Vista, по его мнению, не передавал всей солидности программы. Условия сертификации были гуманными: чтобы ее пройти, достаточно нажать F5, а получать свежие изменения от коллег вовсе необязательно. Очень скоро появились футболки, наклейки и кружки, а программист Нед Батчелдер написал у себя в блоге, что Куни наконец оформил порядок, по которому инженеры и так давно работали.
Комментарии под постом Атвуда я читала как дневник этнографа. Один читатель вспомнил французский сайт с названием, которое переводится как «у меня дома работает», то есть «у меня дома работает», другой обрадовался, что теперь можно просто молча показывать на свою футболку. Кто-то запустил пародийную «партнерскую программу» для тех, у кого работает на виртуальной машине. И еще один человек мимоходом написал фразу, которая сегодня читается как пророчество: многие компании теперь поставляют программы вместе с образом виртуальной машины, так что можно просто получить копию моего компьютера. Угадайте, сколько лет оставалось до появления Docker.
Тогда отправим твою машину
Оставалось около шести. Если вы далеки от разработки, Docker проще всего представить как переезд вместе с квартирой: программу упаковывают в контейнер со всеми ее настройками, библиотеками и привычками, и она везде запускается в одинаковых условиях. Технологию сделала компания dotCloud, а в 2013 году открыла ее для всех под названием Docker.
Вскоре по сети пошел комикс, который вы почти наверняка видели: плачущий ребенок жалуется взрослому, что у него на машине все работает, взрослый отвечает «тогда отправим твою машину», и подпись сообщает, что так родился Docker. Комикс давно живет своей жизнью, и под одним из недавних репостов случился прекрасный диалог: кто-то возмутился, что картинка древняя и не видели ее только младенцы, а ему ответили, что младенцев рождается тысяч по десять в день, так что репостить будут вечно.
Шутка в комиксе в том, что Docker буквально сделал то, о чем фантазировал комментатор в 2007 году. Фраза от этого, однако, не умерла, а переехала этажом выше. Теперь она звучит как «у меня контейнер собирается», и в сборниках шуток для инженеров живут правило о том, что локально все работает, а на сервере сборки нет, и отдельная скорбь про Docker на одних процессорах против Docker на других. Гейзенбаг просто нашел себе новую щель, между контейнером и железом под ним.
Почему по-русски это звучит обиднее всего
Под конец немного лингвистики, потому что одна деталь не дает мне покоя. Английский вариант говорит про машину, и претензия в нем адресована железу. Французский «chez moi» означает «у меня дома», и в нем слышится гостеприимство: заходите, у нас все работает, чаю налить? А русский вариант обходится вовсе без компьютера и без дома, и «у меня» стоит в нем в той же конструкции, что «у меня болит голова» или «у меня температура». Получается почти медицинская справка о собственном здоровье, после которой собеседнику остается сделать вывод, что хроническое что-то у него.
Если сложить все вместе, становится понятно, почему фраза пережила сорок лет и смену всех технологий. Подсчеты Грея говорят, что большинство ошибок зависит от окружения, а значит, фраза почти всегда буквально правдива. Именно этим она и раздражает: она дает исчерпывающие сведения о компьютере говорящего и не сообщает ничего полезного о проблеме, которую вы пытаетесь решить.
Поэтому самый полезный вывод из всей этой истории довольно приземленный. Разработчику, который не смог повторить ошибку, гораздо продуктивнее сказать, на какой версии и в каких условиях он пробовал, и спросить, чем отличается окружение собеседника, ведь по Грею ответ почти всегда прячется именно в этой разнице. А пользователю, который услышал «у меня работает», стоит не обижаться, а прислать скриншот, версию программы и последовательность действий, потому что гейзенбаги сдаются только под тяжестью подробностей.
А в Bugzilla у этой истории есть тихий эпилог. 27 августа 1998 года Терри Вайсман завел несколько жалоб на собственную Bugzilla, про проблемы, которые сам хотел бы исправить, и спустя двадцать лет одна из них, номер 540, все еще оставалась открытой. За все эти годы никто не рискнул закрыть ее как WORKSFORME, и мне кажется, это самый большой знак уважения, который баг-трекер может оказать своему создателю. Если в вашей практике был свой легендарный WORKSFORME, расскажите в комментариях, мне правда интересно, чей рекорд дольше продержится.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.