Передо мной стояла типичная для хакера проблема. Как всякий правоверный компьютерщик, взращенный на чипе 68008, я презирал PC. Но когда в 1986 году выпустили 386-й процессор, PC начали казаться привлекательными. Они могли делать все, что мог 68020, а к 1990 году массовое производство и появление недорогих клонов значительно снизило их цену. О стоимости я очень даже беспокоился, потому что денег у меня вообще не было. Поэтому, похоже, нужно было покупать именно PC. Поскольку PC процветали, их было несложно обновлять и дополнять: в продаже было все, что угодно, уж оборудование-то я всегда хотел иметь стандартное.

В итоге я решился на переход в другой лагерь. К тому же мне было интересно сменить ЦП. Тогда я и начал продавать части своего Sinclair QL.

У каждого есть книга, которая перевернула его жизнь. Священная Библия. «Капитал». «Вторники с Мори». «Все, что мне нужно, я узнал в детском саду». У каждого своя. (Искренне надеюсь, что – благодаря моей теории о смысле жизни – вашу жизнь перевернет эта книга.) Меня лично вдохновила на подвиги «Проектирование и реализация операционных систем» Эндрю С. Таненбаума.

Я уже выбрал себе курсы на осень и с нетерпением ждал лекций по языку Си и системе Unix. В предвкушении этих лекций я летом купил вышеупомянутый учебник, чтобы начать готовиться заранее. В этой книге Эндрю Таненбаум, университетский профессор из Амстердама, описывает Minix – учебную программу, которую он написал для обучения Unix. Minix представляет из себя миниатюрную Unix-систему. Как только я прочел предисловие, познакомился с концепцией Unix и узнал, на что способна эта мощная, строгая и красивая операционная система, я захотел купить такой компьютер, на котором сможет работать Unix. Я решил, что поставлю себе Minix – единственную по-настоящему полезную из известных мне версий.

Когда я начал понимать Unix, я страшно загорелся. Честно говоря – горю до сих пор (Надеюсь, что и вы испытываете то же самое по отношению к чему-нибудь).

III

Осенью 1990 года начался первый учебный год, когда в Университете Хельсинки заработала Unix. Эта мощная операционная система родилась в исследовательском центре Bell Labs компании AT&T в конце 60-х годов, но выросла в других местах. Когда я был на первом курсе, у нас стоял VAX с операционной системой VMS. Она была ужасна, про нее никто не сказал бы: «Вот бы и мне домой такую». Она вызывала иную реакцию: «Как вы умудрились сделать такое!» Ею было трудно пользоваться. В ней было мало инструментария. С ее помощью было сложно выходить в Интернет, который работал под Unix. Даже узнать, насколько велик файл, – и то было непросто. Надо признать, что для некоторых приложений – например, для баз данных – VMS была очень хорошо приспособлена. Но она была не из тех операционок, которые вызывают восторг.

В университете наконец поняли, что с ней пора кончать. В научном мире многие тогда увлеклись Unix, поэтому университет приобрел MicroVAX, на котором работала Ultrix – вариант Unix, созданный корпорацией Digital Equipment. Они захотели примериться к Unix.

Мне не терпелось поработать с Unix, чтобы поэкспериментировать с тем, что я узнал из книги Таненбаума. Сколько всего я мог бы сделать, если бы у меня была 386-я машина! Однако взять 18 тысяч финских марок на ее покупку мне было негде. Я знал, что с началом учебного семестра я смогу использовать свой Sinclair QL для выхода на новый университетский Unix-компьютер до тех пор, пока не куплю себе PC – машину, на которой можно будет установить Unix.

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

Университет Хельсинки размахнулся на 16-пользовательскую лицензию для MicroVAX. Это значило, что прием на курс «Си и Unix» ограничивался 32 студентами – видимо, предполагалось, что 16 человек будут использовать ее днем и 16 – вечером. Преподавателю, как и всем нам, Unix была в новинку. Он сразу же об этом сказал, так что проблем не было. Но он обычно знал материал своего курса на одну главу вперед, а студенты иногда уходили вперед главы на три. Это стало своего рода игрой: студенты пытались подловить преподавателя, задавая ему вопросы по будущему материалу, чтобы выяснить, читал он его или нет.

Все мы были младенцами в дебрях Unix; курс создавался по ходу нашего обучения. Однако из него было ясно, что за Unix стоит своя особая философия. Это становилось понятно после первого же часа занятий. В остальное время объяснялись подробности.

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

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

Одной из фундаментальных операций Unix является «операция порождения (fork)». Выполняя «fork», процесс создает свою точную копию. Таким образом вы получаете две идентичные копии. Порожденная копия чаще всего выполняет другой процесс – заменяет себя новой программой. Это вторая базовая операция. Оставшиеся четыре вызова – open (открыть), close (закрыть), read (читать) и write (писать) – предназначены для доступа к файлам. Эти шесть системных вызовов представляют собой простые операции, из которых и состоит Unix.

Конечно, есть еще куча других системных вызовов, которые осуществляют детализацию. Но если вы поняли шесть базовых – вы поняли Unix. Потому что одна из прелестей Unix в том, что для создания сложных вещей не нужны сложные интерфейсы. Любого уровня сложности можно достичь за счет сочетания простых вещей. Для решения сложной проблемы нужно лишь создать связи («каналы» в терминологии Unix) между простыми процессами.

Уродство, когда для любого действия у системы есть специальный интерфейс. В Unix – все наоборот. Она предоставляет строительные блоки, из которых можно создать что угодно. Вот что такое стройная архитектура.

То же самое с языками. В английском 26 букв, и с их помощью можно написать все. А в китайском для каждой мыслимой вещи – своя буква. В китайском вы сразу же получаете в свое распоряжение сложные вещи, которые можно комбинировать ограниченным образом. Это больше напоминает подход VMS: есть множество сложных вещей с интересным смыслом, которые можно использовать только одним способом. И в Windows то же самое.

В Unix, напротив, основная идея: «Чем меньше, тем красивее». Здесь есть небольшой набор простых базовых строительных блоков, из которых можно строить бесконечно сложные конструкции.

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

Простота Unix не возникла сама по себе. Unix со своей концепцией простых строительных блоков была кропотливо разработана Деннисом Ричи и Кеном Томпсоном в Bell Labs компании AT&T. Простоту вовсе не следует отождествлять с легкостью. Простота требует проектирования и хорошего вкуса.

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