Выбрать главу

Знакомый хакер всё правильно сказал. Тогда, в 1991 году, ядро Linux работало только на процессорах семейства Intel 386, и выглядело как копия Unix для бедных. Но теперь многое изменилось. Linux оказался единственным свободным ядром операционной системы, и пока Столлман слушал отчёты о неторопливой работе над Hurd, Торвальдс с сотнями сподвижников захватывали компьютерный рынок с его многообразием платформ.

Наступает 1993 год, проект GNU лихорадит. Разработка ядра Hurd замедляется всё сильнее из-за большого числа проблем. Журнал Wired пишет, что проект GNU “увяз”, хотя многие его продукты очень популярны. [118] Но журнал ещё мягок в формулировках, на самом деле настрой у разработчиков проекта ещё хуже. Успех уже готового свободного ядра Linux подкосил мотивацию хакеров. “Очевидно, что нами двигало желание заполнить пробел в свободной операционной системе, – вспоминает Часселл, – и как только пробел заполнился, нам стало не так интересно работать”. [119]

Уйма работы участников проекта GNU с 1990 по 1993 год пропадает впустую. Многие возлагают вину на Столлмана, но его старый друг Эрик Реймонд считает, что проблема куда глубже. “Фонд свободного ПО оторвался от жизни в своих амбициях, – говорит он, – вместо создания операционной системы он занялся исследованием операционных систем. И что ещё хуже, они думали, что происходящее за пределами фонда не повлияет на них”.

Мёрдок мягче в оценках: “По-моему, тут сыграло роль то, что они питали слабость к глобальным решениям, не обращая внимания на их эффективность. Например, микроядра – на рубеже 80-90-х годов они считались решением всех бед, и проект GNU стал разрабатывать именно микроядро. А теперь, когда проблемы микроядер очевидны, уже слишком много сделано, чтобы выбрасывать всё и начинать с нуля”.

Столлман отвечает на это: “Мнение Реймонда опирается на воображаемые посылки, но в одном он прав: Hurd действительно пошёл не по тому пути разработки. Вместо того, чтобы как можно быстрее сделать рабочее ядро, разработчики постоянно переписывают его огромными кусками, снова и снова, чтобы довести до идеала. Может быть, это и хорошо с академической точки зрения, но очень плохо с практической”.

Ссылается Столлман и на другие проблемы. Судебные войны, развязанные Apple и Lotus, отняли у него много времени и сил, плюс ещё заболевание рук сильно затруднило набор текста, так что Ричард пишет очень мало кода. Отдельная головная боль – согласованность разных частей проекта GNU. “Мы потратили очень много сил на GDB, – говорит Столлман, – и люди, что им занимались с самого начала, неохотно берутся за другие задачи”. Они предпочитают дальше разрабатывать GDB и помогать пользователям этой программы, глобальная цель проекта GNU их уже мало интересует.

Но самой жестокой проблемой Столлман называет сложность разработки микроядра, которую хакеры GNU очень сильно недооценили поначалу. “Отлично, мы наладили взаимодействие микроядра Mach с аппаратными ресурсами, – вспоминает Ричард, – и кажется, что теперь-то работа пойдёт быстрее. Но не тут-то было. Оказалось, настоящие сложности – там, где микроядро асинхронно и многопоточно взаимодействует с программами. Начались сплошные ошибки синхронизации, которые портят файлы, и это ни черта не весело. Мы убили столько времени и сил, чтобы получить очень далёкую от готовности систему”.[120]

Стало понятно, что проект GNU должен запрыгнуть в уходящий поезд – не ждать ядро Hurd, а сконцентрироваться на комбинации программ GNU и ядра Linux. Однако это спорный шаг – сообщество GNU/Linux довольно проблемно с точки зрения философии свободного ПО. Хотя само ядро лицензировано под GPL, многие представители сообщества не стремятся к полностью свободной операционной системе. На конец 1993 года численность пользователей GNU/Linux колеблется от 20 до 100 тысяч человек. [121] Linux вырос из игрушки в серьёзное ядро, и теперь готов к промышленному использованию, и многие не видят ничего плохого в том, чтобы запускать на нём несвободные программы. Неудивительно, что Столлман смотрит на “победу” GNU/Linux со смешанными чувствами – наверное, так же Черчилль смотрел на победу над Гитлером, видя советскую армию в Берлине.[122]

Столлман опоздал к пирушке победителей, но всё ещё очень влиятелен. Фонд свободного ПО объявляет о финансовой и моральной поддержке проекта Мёрдока, и вслед за этим его окатывает волна поддержки из других источников. Мёрдок называет свой проект Debian – сокращение от имени его жены Деборы и его собственного имени Ян – и уже через несколько недель выкатывает первую версию дистрибутива. “Поддержка Ричарда буквально катапультирует Debian к пику внимания сообщества”, – говорит Мёрдок.

вернуться

118

Simson Garfinkel, “Is Stallman Stalled?” Wired (March, 1993).

вернуться

119

Часселл считал, что у проекта GNU есть “окно” размером в 36 месяцев, чтобы представить свою операционную систему, после чего проект станет бессмысленным. И не он один так думал. Несмотря на то, что многие считали различные варианты BSD вроде FreeBSD или OpenBSD более быстрыми, стабильными и безопасными, чем GNU/Linux, эти системы так и не смогли привлечь заметное число пользователей, навсегда оставшись в тени Линукса. То же произошло и с GNU/Hurd. Сравнительный анализ популярности GNU/Linux и других свободных систем в 90-е годы можно посмотреть в эссе новозеландского хакера Лиама Гринвуда: “Почему Linux популярен” (1999), http://www.freebsddiary.org/linux.php[119].

вернуться

120

Источник – речь Столлмана в центре высокопроизводительных вычислений Мауи.

После этой речи я написал Столлману письмо, в котором просил объяснить, что означают эти “ошибки синхронизации”. Столлман ответил, что это лучший способ выразить суть проблем с их микроядром, и объяснил это так:

“Ошибки синхронизации” возникают в системах, где разные части выполняются параллельно, независимо друг от друга. Они могут выполняться в произвольном порядке, и некоторые порядки приводят к проблемам.

Представьте, что программа А делает X, а программа В делает Y, где X и Y это короткие процедуры, меняющие одну и ту же структуру данных. Когда компьютер делает сначала X, а потом Y, или наоборот – проблем нет. Но может случиться и так, что планировщик ядра запускает программу А, в середине процедуры X он её останавливает и запускает программу B с её процедурой Y. Получается, что Y выполнен полностью, а X – только наполовину. Но они работают с одной и той же структурой данных, что приводит к противоречию. Например, X может прочитать эту структуру в свою память и работать с нею, но Y в конце своей работы меняет эту структуру, о чём X и не подозревает, продолжая работать с уже несуществующей структурой данных. Как минимум это гарантирует сбой программы А, причём этот сбой очень трудно воспроизвести, ведь он зависит от массы случайных факторов (например, от того, в каком порядке и на какое время планировщик ядра решит запускать программы).

Такие сбои предотвращают блокировкой, которая исключает запуск процедуры Y, пока не закончила работать процедура X. Но разработчики асинхронных систем часто не реализуют блокировки в конкретных местах по недосмотру или из-за лени. И потому множатся ошибки синхронизации.

вернуться

121

Это число может быть лишь приблизительным, отсюда такой разброс. Так, о 100 тысячах пользователей сообщал сайт компании Red Hat.

вернуться

122

Позже Столлман прислал мне комментарий насчёт этого сравнения с Черчиллем:

Вторая мировая война и связанная с ней воля к победе были очень сильными чувствами, когда я рос. Заявления Черчилля вроде “мы будем биться с ними на суше, мы будем биться с ними на побережье…и никогда не сдадимся” всегда волновали меня.