Skip to content

Latest commit

 

History

History
392 lines (344 loc) · 42.8 KB

1-ForWantOfAPrinter.md

File metadata and controls

392 lines (344 loc) · 42.8 KB

Глава 1. Троянский принтер

Бойтесь данайцев, дары приносящих.
Вергилий, «Энеида»

Новый принтер зажевал бумагу, снова.

Ричард Столлман, штатный программист в Лаборатории Искусственного Интеллекта Массачусетского Технологического Института (AI Lab), понял это пренеприятнейшим способом. Через час после того, как 50-страничный файл отправилася на офисный лазерный принтер, Столлман, прервал продуктивную рабочую сессию чтобы таки получить свои документы. Подойдя к принтеру, он обнаружил лишь четыре страницы в лотке принтера. Чтобы всё усложнить, все эти четыре страницы явно были распечатаны каким-то другим пользователем, значит, распечатка Столлмана и кусок чьего-то ещё недопечатанного файла попали в ловушку в хитросплетении офисной локальной сети.

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

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

Сколько прошло уже с тех пор, как сотрудники AI Lab с восторгом встречали новый принтер? Он стал подарком от Xerox Corporation. Новейший прототип оказался модифицированной версией быстрой фотокопировальной машины Xerox. Вместо того, чтобы просто делать копии, он брал данные, заливаемые в локальную сеть посторонним софтом и превращал их в профессионально выглядящие документы. Созданный инженерами известной лаборатории Xerox в Palo Alto, он нёс в себе дух начала революции в десктопной печати, которая начисто поглотила всю индустрию к концу десятилетия.

Испытывая инстинктивное стремление попробовать новейшее железо, программисты AI Lab мгновенно интегрировали новую машинку в изощренную вычислительную инфраструктуру. Новый принтер Xerox был очень быстр. Страницы вылетали со скоростью одна штука в секунду, а 20-минутная распечатка становилась 2-минутной. Кроме того, новая машина оказалась более точной: круги получались кругами, а не овалами. Прямые линии выглядели как прямые линии, а не низкоамплитудные синусоиды.

Совершенно во всех смыслах, это был такой подарок, от которого сложно отказаться.

Как только машинку начали использовать по-настоящему, начали вырисовываться и настоящие проблемы. Проблемой проблем стала неустойчивость к зажовыванию бумаги. Инженерное мышление программистов быстро привело к причине недостатка. Фотокопировальные машины обычно работают под присмотром живого человека. Как только инженеры Xerox поняли, что человек постоянно нужен для решения проблем с заклиниванием бумаги, они приложили все силы чтобы решить и все остальные назойливые проблемы.

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

Вряд ли Столлман был единственным обитателем AI Lab, заметившим проблемы, но ещё он думал и о решении. Годами раньше, для предыдущего лабораторного принтера, Столлман решил похожую проблему, модифицируя управляющие принтером программы, на маленьком компьютере PDP-10. Столлман не смог устранить само зажевывание бумаги, но смог заставить PDP-11 периодически проверять принтер, и о всех замеченных проблемах уведомлять PDP-10. Столлман добавил в PDP-10 код, который сообщал совершенно всем пользователям, ожидающим распечатки, что принтер заклинил. Это было простое сообщение, что-то вроде «Принтер заклинил, нужно починить», и поскольку подобное сообщение приходило к людям, страждущим получить свою распечатку, кто-нибудь из них срывался и решал проблему вручную.

Это был костыль, но довольно элегантный. Он не исправлял ошибку механики, но решал вопрос ближайшим по эффективности способом, замыкая информационный обмен между пользователем и устройством. Пара строк кода помогла сотрудникам AI Lab перестать тратить по 10-15 минут каждую неделю на беготню до принтера. Говоря по-программистски, костыль Столлмана пользовался возросшей суммарной мощностью всей сети.

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

Такие умные исправления и были отличительной чертой AI Lab и их гениальных программистов. Действительно, лучшие программисты в AI Lab пренебрежительно относились к термину «программист», предпочитая более сленговый вариант – «хакер». Такая работа подразумевала множество занятий — что угодно от изощренных развлечений и вплоть до улучшения сложнейшего легаси кода и компьютерных систем. Неявным образом этот титул как бы напоминал о стародавней изобретательности янки. Для хакера, написание кода программы, который просто запускался — это только начало. Хакер должен попробовать продемонстрировать свой ум (и поразить им других хакеров), выполняя испытания более высокого уровня: нужно написать программу, которая будет быстрой, маленькой, элегантной, или чтобы она удивляла всех каким-то другим умным способом.

Компании вроде Xerox избрали политикой дарить свои продукты (и программы) в те места, где обычно собираются хакеры. Если хакер воспользуется этими продуктами, то возможно, в будущем, он пойдёт работать в эту компанию. В 60-х и ранних 70-х годах, кроме всего прочего, хакеры частенько писали программы, которые оказывались полезны производителю настолько, что он начинал распространять их среди собственных клиентов.

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

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

Недружелюбная политика Xerox резко контрастировала с устоявшимися практиками хакерского сообщества. Например, чтобы разработать программу для PDP-11, управлявшую старым принтером, и программу PDP-11 для управления терминалами, AI Lab понадобился кросс-ассемблер, позволяющий собирать программы для PDP-11 на основном компьютере PDP-10. Хакеры лаборатории могли бы написать такой кросс-ассемблер сами, но Столлман, студент из Гарварда, нашел такую программу на компьютере Гарвардской лаборатории. Эта программа была написана для запуска на похожем компьютере, PDP-10, но с другой операционной системой. Столлман не узнал, кто же написал программу, ведь в исходнике этого указано не было. Но он принес копию исходника в AI Lab, после чего они изменили исходник, что позволило ему запускаться на их собственной ITS (Incompatible Timesharing System). Без лишних хлопот и суеты, у AI Lab появилась программа, необходимая для работы их инфраструктуры. Столлман даже добавил парочку фич, которых не было в изначальной версии, сделав программу более полезной. «Мы постоянно использовали её на протяжении многих лет» — вспоминает Столлман.

С точки зрения программиста эры 1970-х годов, такая передача кода была программным эквивалентом соседа, который зашел чтобы попросить на время дрель или немного сахара у соседа напротив. Вся разница в том, что, когда Столлман позаимствовал копию кода для AI Lab, изначальный хозяин не потерял возможности продолжать пользоваться ей. Даже напротив, другие хакеры кое-что приобрели в процессе, ведь Столлман добавил дополнительные возможности, которые другие хакеры точно так же могут одолжить себе. Например, Столлман вспоминает о программисте в частной инженерной компании, Bolt, Beranek & Newman, который тоже позаимствовал у них программу. Он запустил её на Twenex и добавил еще несколько дополнительных возможностей, которые Столлман впоследствии интегрировал в исходный код, хранящийся в AI Lab. Два программиста решили скооперироваться и вместе поддерживать общую версию, что позволило коду запускаться как на ITS, так и на Twenex, в зависимости от предпочтений пользователя.

«Программа развивается как город» — рассказывает Столлман, вспоминая программную инфраструктуру в AI Lab. «Какие-то части нужно заменить и перестроить. Нужно добавлять новые фичи. Но всегда можно посмотреть на отдельные части и сказать: хм, судя по стилю, это было написано в начале 60-х, а вот это было написано уже в 70-х».

Благодаря этому интеллектуальному единству, хакеры в AI Lab и других местах построили очень устойчивые конструкции. Не каждый программист, принимавший участие в этой культуре, смог бы назвать себя хакером, но большинство вполне разделяло настрой Ричарда Столлмана. Если программа или исправление в софте достаточно хороши для решения твоих собственных проблем, они вероятно, достаточно хороши и для решения чужих проблем. Почему бы ими не поделиться, хотя бы из соображений хорошей кармы?

Вся эта система кооперации была подорвана коммерческими секретами и жадностью, ведущими к разнообразным комбинациям секретности и кооперации. Например, ИТ-учёные в Беркли построили крутую операционную систему под названием BSD, основывавшуюся на системе Unix, приобретенной в AT&T. Беркли выложила BSD за стоимость, равную стоимости копирования плёнки, но выдавала эти плёнки только школам, которые могли показать лицензию AT&T, стоившую 50.000$. Хакеры Беркли продолжали делиться всем, чем могли, но лишь насколько AT&T позволяли им делать это, и не видели конфликта между этими двумя практиками.

Так же и Столлман, расстроенный тем, что Xerox не предоставили исходников, всё ещё не был зол на это. Он даже не думал о том, чтобы попросить копию исходников у Xerox. «Они уже подарили нам лазерный принтер» — говорит Столлман. «Я не мог бы прийти и сказать, что они нам должны что-то ещё. Тем не менее, очевидно, отсутствие исходников — решение неслучайное, и просить их изменить решение, скорей всего, будет бесполезно».

Но тут пришли и хорошие новости: слух о том, что копия исходников для лазерного принтера есть у учёного из департамента компьютерных наук Университета Карнеги-Меллона.

Связь с Карнеги-Меллоном не предвещала ничего хорошего. В 1979 году Брайан Рейд, докторант из этого университета, шокировал сообщество отказом поделиться своей программой для форматирования текста, впоследствии получившей название Scribe. Эта программа была первой, имевшей команды разметки, ориентированные на отражение желаемой семантики (такие как «выдели слово» и «этот параграф – цитата»), а не простые низкоуровневые детали форматирования («напиши это курсивом» и «увеличь отступы этого параграфа»). Вместо этого, Рейд продал Scribe в Питтсбургскую софтверную компанию Unilogic. По сути, по окончании аспирантуры, Рейд просто искал способ сгрузить программу на команду разработчиков, которые возьмут на себя ответственность и боль, чтобы программа не просочилась в публичный доступ. (Почему кому-то может казаться нужным добиться такого неприятного исхода — неясно.) Чтобы подсластить пилюлю, Рейд согласился добавить несколько функций, учитывающих время — «временных бомб», выражаясь на программистском сленге — которые деактивировали свободно скопированные версии программы через 90 дней после истечения срока. Чтобы избежать деактивации, пользователи должны были заплатить компании, которая сразу после оплаты выпускает код, обезвреживающий скрытую внутри временную бомбу, эдакую анти-фичу.

Для Столлмана это было предательством программистской этики, чистым и неприкрытым. Вместо уважения идеи «бери и делись с другими», Рейд придумал способ, которым компании смогут вынуждать программистов платить за доступ к информации. Но он не особо задумывался над этим вопросом, поскольку почти не использовал Scribe.

Unilogic разрешили AI Lab бесплатно пользоваться копией Scribe, но они не убрали временную бомбу и ничего не сообщили о ней. До какого-то момента всё работало, пока однажды какой-то пользователь не рассказал, что Scribe перестал запускаться. Системный хакер Говард Кэннон потратил на отладку бинарника многие часы, в какой-то момент обнаружил временную бомбу и закрыл её заплаткой. Кэннон был в ярости и совершенно не постеснялся донести до всех хакеров вокруг своё негодование по поводу того, что Unilogic потратили столько времени на исправление бага, который они же туда и добавили намеренно.

Столлман, по причинам, связанным с делами AI Lab, пару месяцев назад посещал кампус Карнеги-Меллона. В ходе этого визита он постарался найти человека, про которого говорили, что у него есть исходники софта для принтера. К счастью, он был в своём офисе.

В чисто инженерной манере, разговор оказался открытым и резким. После небольшого приветствия, представившись гостем из МТИ, Столлман попросил копию софта для лазерного принтера, в которую хотелось внести изменения. К досаде, исследователь отказался сделать это.

«Он сообщил, что его заставили пообещать, что он не отдаст мне копию» — сказал Столлман.

Память — удивительная вещь. Двадцать лет спустя, мысленная лента событий Столлмана полна пустых мест. Он не только не вспомнил мотивации отправиться в это путешествие, время или год событий, но и имя человека на другом конце стола. По словам Рейда, человек, который, скорей всего, отказал в запросе Столлмана, был Роберт Спроулл, бывший исследователь в Xerox PARC и директор Sun Laboratories, исследовательского подразделения техноконгломерата Sun Microsystems. В 1970-х годах в Xerox PARC, Спроулл был основным разработчиком софта для лазерных принтеров, о которых идёт речь. Примерно в 1980-х годах, Спроулл устроился на должность научного сотрудника в Карнеги-Меллон, среди других проектов продолжив и работу над лазерными принтерами.

Когда мы напрямую спросили об этом запросе, Спроулл ничего не ответил. «Я не могу прокомментировать по существу» — написал Спроулл в переписке по электронной почте. «Совершенно не помню об этом случае».

«Код, который хотел Столлман, был совершенно новаторским, мастерски написанным кодом, который Спроулл написал в течение года или около того до того, как попал в Карнеги-Меллон» — вспоминает Рейд. Если это так, всё это может оказаться возникшим недопониманием, ведь Столлман просил исходник для программы, которую MIT уже когда-то использовали, а не о какой-то новой версии. Но такой вопрос так никогда и не возник в той мимолётной беседе.

Беседуя с аудиторией, Столлман постоянно ссылается на этот инцидент, подмечая, что нежелание того человека отдавать код вытекает из договора о неразглашении, контракта между ним и Xerox Corporation, предоставляющее подписавшему его получить доступ к исходникам в обмен на обещание секретности. Сейчас ставшие обычной частью бизнеса в индустрии разработки ПО, договоры о неразглашении, или в английском варианте — NDA, тогда были новейшей разработкой, отражение как коммерческой значимости для Xerox самих лазерных принтеров, так и информации, необходимой для управления ими. «Xerox в то время как раз пытались превратить лазерные принтеры в коммерческий продукт» — вспоминает Рейд. «Для них было бы полным безумием раздавать исходники».

Для Столлмана, тем не менее, NDA было чем-то совершенно другим. Это был отказ, со стороны какого-то исследователя из Карнеги-Меллона, участвовать в обществе, вплоть до этого случая поощрявшем программистов относиться к программам как к общественным ресурсам. Как будто крестьянин, чей оросительный канал многовековой давности внезапно высох, Столлман шёл вдоль канала и дошёл до источника, только чтобы обнаружить новенькую фирменную гидроэлектростанцию с логотипами Xerox.

Для Столлмана потребовалось время, чтобы осознать и прочувствовать, что Xerox вынудил коллегу-программиста участвовать в подобной свежеизобретённой системе вынужденной секретности. В самом начале он думал об отказе только в контексте личных отношений. «Я был настолько зол, что просто не выразить. Я просто развернулся и молча вышел» — вспоминает Столлман. «Возможно, я хлопнул дверью. Кто знает? Всё что я помню — желание как можно быстрей выбраться оттуда. Я пришел к ним в офис, уверенный в том, что мне помогут, поэтому даже не задумывался, как отреагирую, если мне откажут. И когда он это сделал, я был поражён, онемевший, одновременно разочарованный и злой».

Двадцать лет спустя, злость всё ещё жива в нём, и Столлман каждый раз рассказывает об этом событии как о поворотном моменте, который заставил его столкнуться с этической проблемой — впрочем, этот случай был не единственным. По сравнению с рядом событий, которые через считаные месяцы выпадут на долю Столлмана и вообще всего хакерского сообщества AI Lab, те 30 напряженных секунд в далёком офисе Карнеги-Меллона покажутся незначительными. Тем не менее, разбираясь в порядке событий, превративших Столлмана из хакера-одиночки, инстинктивно подозрительного относящегося к централизованной власти, в рыцаря крестового похода, активиста, применяющего традиционные идеи свободы, равенства и братства в мире разработки программного обеспечения, сам Столлман уделяет этой конкретной стычке в Карнеги-Меллоне отдельное внимание.

«Это было моё первое сражение с договором о неразглашении, и оно мгновенно научило меня, что в таких договорах бывают жертвы» — жёстко говорит Столлман. «В том случае жертвой стал я. И моя лаборатория.»

Впоследствии, Столлман объясняет: «если бы он отказал мне в сотрудничестве по личным причинам, это не привело бы ни к каким далекоидущим последствиям. Я просто решил бы, что он урод, не больше. Но факт того, что его отказ является не личным, что он кому-то заранее пообещал не оказывать сотрудничества, не только мне, но вообще кому угодно — вот это стало куда большей проблемой».

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

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

Когда же лазерный принтер хитростью пробрался в сеть AI Lab, кое-что изменилось. Машина работала отлично, за исключением зажованной бумаги, чего в ней не хватало, так это возможности изменять программы по своему вкусу или по усмотрению сообщества. С точки зрения индустрии разработки ПО, программы для управления принтером отражали тактику ведения бизнеса. Софт стал настолько важным активом, что компании перестали считать публикацию исходников чем-то необходимым, особенно когда такая публикация означает для потенциальных конкурентов возможность что-то быстро скопировать. С точки зрения Столлмана, принтер оказался троянским конём. После десятилетия неудач, софт, который пользователи не могут изменять и распространять — в будущем, хакеры назовут такой софт «проприетарным» — грязными ногами вторгся в AI Lab наиподлейшим из подлых способов. Его замаскировали как подарок.

Тот факт, что Xerox предложили кое-кому доступ к другим подаркам в обмен на секретность — был не менее унизительным, но Столлман с болью замечает, что если бы ему преподнесли подобные подарки в более юном возрасте, он, возможно, и принял бы всё, что предлагала Xerox Corporation. Гнев, произошедший из стычки в Карнеги Меллоне, тем не менее, произвёл укрепляющий эффект на моральные качества Столлмана и погасил возникшую было апатию. Он не только дал ему достаточный заряд гнева, чтобы впоследствии смотреть на будущие подарки сквозь призму подозрений, но и заставил его взглянуть на ситуацию с другой стороны: а вдруг, внезапно, завтра коллега-хакер придёт в его офис, и уже работой Столлмана станет отказываться показать код?

«Когда кто-то предлагает мне предать всех коллег подобным образом, я вспоминаю ярость, когда в такую ситуацию поставили меня и мою лабораторию» — говорит Столлман. «Поэтому я говорю: “Спасибо большое за предложение мне этого чудесного программного пакета, но я не могу принять его на условиях, которые вы просите, поэтому обойдусь и без него».

Это урок, который Столлман пронесёт с собой сквозь бурные 80-е годы, десятилетие, в течение которого множество коллег ушли из AI Lab, только чтобы подписать договоры о неразглашении. Возможно, они убеждали себя, что это необходимое зло, и они смогут работать над лучшими проектами. А для Столлмана, NDA означали лишь то, что моральная легитимность проекта — под сомнением. Чего хорошего может технологический проект прятать от общественности?

Столлман быстро понял, что отказ от таких предложений означает больше, чем личную жертву. Это означает проводить черту между им самим и товарищами-хакерами, которые, несмотря на похожую нелюбовь к секретности, имеют тенденцию выражать это отвращение более морально гибкими способами. Отказ показать исходник, как решил Столлман, является не только предательством научной миссии, которая питала разработку софта начиная со Второй Мировой, но ещё и нарушением Золотого Правила, базовой моральной установки относиться к людям так, как хотелось бы, чтобы относились к тебе.

Отсюда и важность лазерного принтера и стычки, которая произошла благодаря нему. Без него, как говорит Столлман, его жизнь могла пойти по-другому, более стандартному пути баланса между материальным комфортом коммерческого разработчика и предельной фрустрацией, сопровождающей жизнь программиста, пишущего невидимый код. Не было бы чувства ясности и неотложности решения проблемы, которую никто больше не пытается решить. Что важнее, не было бы праведного гнева — основной эмоции, которая, как мы скоро увидим, продвинула Столлмана в карьерном плане не хуже политической идеологии или этических убеждений.

Copyright © 2019 Oleg Chirukhin. Based on "Free as a Freedom 2.0" by Sam Williams and Richard M. Stallman. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".