ное уже было
сделано для оболочки, поэтому, когда она заработала, произошел резкий скачок
от практически нулевой отметки до ста, ведь все составные части уже были на
месте. В какой-то момент готовых компонент оказалось столько, что настал миг
типа "Да будет свет!", потому что до этого ничего по-настоящему не работало.
Я был страшно доволен. Особенно потому, наверное, что в то лето ничем,
кроме программирования, не занимался. И это не преувеличение. С апреля по
август в Финляндии лучше всего. Все плавают на лодках между островами,
загорают на пляжах, сидят в дачных саунах. Я же редко вообще знал, день
сейчас или ночь, рабочий день или выходной. Плотные черные занавески
отгораживали меня от почти круглосуточного солнечного света и вообще от
внешнего мира. В иные дни (или ночи?) я выпрыгивал прямо из постели на стул
перед компьютером, до которого было примерно полметра. Мой отец,
по-видимому, уговаривал маму заставить меня наняться на лето на работу. Но
ей было все равно: я ей не мешал. Вот Сара немного сердилась, что занят
телефон, когда я выходил в онлайн. (Она бы, вероятно, выразила эту мысль
несколько менее дипломатично.) Без всякого преувеличения можно сказать, что
у меня практически не было контактов с миром вне моего компьютера. Ну
хорошо, может, раз в неделю в окно стучал приятель, и если я не просматривал
в это время на экране какую-нибудь важную программу, то впускал его в дом.
(Это всегда был "он" -- вы помните, это было еще до того, как хакеры стали
популярны среди девушек.) Мы садились на часок попить чаю и посмотреть MTV в
нашей кухоньке. Теперь, когда я задумался, то начинаю припоминать, что
иногда выходил выпить пива или сыграть в снукер, если в окно стучался
кто-нибудь вроде Иоуко (я обычно зову его "Авутоном"). Но больше, честное
слово, в моей жизни ничего в то время не происходило.
И я ни в малейшей степени не чувствовал себя жалким бледным яйцеголовым
неудачником. Оболочка работала, а это значило, что я фактически построил
основу работоспособной операционной системы. И я получал удовольствие.
Когда оболочка заработала, я стал тестировать встроенные в нее
программы. Потом я накомпилировал достаточно новых программ, чтобы начать
делать что-то настоящее. Я компилировал все в Minix, но перенес оболочку в
специальный раздел, который создал для новой операционной системы. Про себя
я называл ее Linux.
Честное слово, я никогда не собирался выпускать ее под именем Linux,
потому что это казалось мне слишком нескромным. Какое имя я приготовил для
окончательной версии? Freax. (Поняли? Freaks -- фанаты -- и на конце х от
Unix.) На самом деле некоторые ранние файлы проекта -- файлы, где
описывается, как компилировать исходники -- около полугода содержали
название Freax. Но это не имело особого значения. В то время мне не нужно
было название, потому что я не собирался ее никому показывать.
VIII.
From: torvaldsSklaava.Helsinki.Fi (Linus Benedict Torvalds)
To: Newsgroups: comp.os.inix
Subject: Чего вам больше всего не хватает в minix?
Summary: небольшой опрос для моей операционной системы Message-ID:
<1991Aug25.205708.9541@klaava.Helsinki.Fi>
Привет всем пользователям minix! Я тут пишу (бесплатную) операционную
систему (любительскую версию -- она не будет такой большой и
профессиональной, как gnu) для 386-х и 486-х AT. Я вожусь с этим с апреля, и
она, похоже, скоро будет готова. Напишите мне, кому что нравится/не нравится
в minix, поскольку моя ОС на нее похожа (кроме всего прочего, у нее -- по
практическим соображениям -- то же физическое размещение файловой системы).
Пока что я перенес в нее bash (1.08) и gсс (1.40) , и все вроде
работает. Значит, в ближайшие месяцы у меня получится уже что-то работающее,
и мне бы хотелось знать, какие функции нужны большинству. Все заявки
принимаются, но выполнение не гарантируется : -)
Линус (Torvalds@klaava.Helsinki.fi)
PS. Она свободна от кода minix и включает мультизадачную файловую
систему. Она НЕ переносима (используется переключение задач 386 и пр.) и,
возможно, никогда не будет поддерживать ничего, кроме АТ-винчестеров --
потому что у меня больше ничего нет : - (.
Наиболее рьяные энтузиасты Minix встрепенулись. Мне прислали не так
много заявок по поводу ее функций, но зато были другие сообщения.
>Расскажи поподробней! Ей нужен MMU?
Ответ: да
>Какая часть написана на Си? Какие будут трудности
>при переносе? Кто тебе поверит про машинную
>зависимость ;-) , я вот хочу ее перенести к себе на
>Amiga.
Ответ: она в основном написана на Си, но многие скажут, что это не
настоящий Си. В ней использованы все особенности 386-го, которые я смог
обнаружить, потому что хотел попутно разобраться в его работе. Некоторые из
моих файлов на Си сильно смахивают на ассемблер.
Как я уже писал, она использует MMU как для страничной подкачки (пока
не на диск), так и для сегментации. Именно из-за сегментации она
ПО-НАСТОЯЩЕМУ зависит от 386-го (у каждой задачи есть 64-мегабайтный сегмент
для кода и данных - максимум 64 задачи на 4 Гб. Если нужно больше 64 Мб на
задачу -- будут проблемы).
Несколько человек даже предложили стать бета-тестерами.
В итоге разместить ее в Интернете было просто естественно. Я привык
обмениваться программами именно так. Поэтому вопрос был только один -- на
каком этапе я решусь показать ее людям? Или точнее: когда она будет
достаточно готова, чтобы мне нечего было стыдиться?
Вообще-то мне хотелось иметь компилятор и настоящую среду, чтобы можно
было писать программы прямо в Linux, без помощи Minix. Но я был так горд,
когда у меня заработала оболочка gnu, что был готов всем это показать. И еще
мне хотелось получить отклики.
К тому моменту, как заработала оболочка, у меня было несколько
элементарных бинарников, которые я скомпилировал для операционки. Делать с
ними пока было особенно нечего, но уже было видно, что система похожа на
Unix. На самом деле она работала, как увечная Unix.
И вот я решился ее выложить. Я не делал публичных объявлений, а просто
написал пятерым-десятерым хакерам на личные адреса, что она лежит на
FTP-сайте. В числе прочих я написал знаменитому среди фанатов Minix Брюсу
Эвансу и Ари Лемке. Я выложил исходники самой Linux и еще несколько
бинарников, чтобы можно было хоть что-то делать. Я сказал, что нужно, чтобы
запустить все это хозяйство. На машине должна была стоять Minix (версия 386)
и нужен был компилятор GCC. Причем на самом деле нужна была моя версия GCC,
поэтому ее я тоже выложил.
Существуют правила нумерации версий. Это вопрос психологический. Когда
вы считаете, что программа по-настоящему готова -- это версия 1.0. А до
этого вы нумеруете версии так, чтобы было видно, сколько еще предстоит
потрудиться до выпуска 1.0. Из этих соображений я положил на FTP-сайт версию
0.01. Чтобы все знали, что она мало на что пока годится.
Эту дату я хорошо помню: 17 сентября 1991 года.
Не думаю, чтобы ту версию проверяло больше одного-двух человек. Для
этого нужно было возиться с установкой специального компилятора, выделить
пустой раздел, чтобы использовать его для загрузки, откомпилировать мое ядро
и запустить оболочку. А кроме запуска оболочки, делать было особенно нечего.
Можно было распечатать исходники -- всего 10 000 строк, т.е. меньше ста
страниц, если печатать мелким шрифтом. (Сейчас там уже порядка 10 миллионов
строк.)
Я стал распространять свою операционку прежде всего, чтобы доказать,
что все это не пустая болтовня -- я действительно что-то сделал. В Интернете
много болтают. О чем бы ни шла речь -- об операционке или о сексе -- многие
в киберпространстве просто вешают лапшу на уши. Поэтому важно после того как
ты растрезвонил, что пишешь операционку, иметь возможность сказать: "Вот --
я ее и правда сделал. Я не трепло -- можете сами посмотреть".
Ари Лемке, который организовал для нее РТР-сайт, невзлюбил название
Fгеах. Ему больше нравилось другое рабочее название, которое я использовал
-- Linux. Поэтому он назвал мой каталог pub/OS/Linux. Признаюсь -- я не
особенно сопротивлялся. Но инициатива была его. Поэтому я могу честно -- или
почти честно -- сказать, что не был нескромным. Я тогда подумал, а что --
хорошее название, и всегда можно будет на кого-нибудь свалить. Что я и
делаю.
Как я уже говорил, моя операционка была не очень полезной. Она легко
рушилась, если переполнить память или еще что-то не так сделать. Даже если
вы ничего плохого не делали, система рушилась после более-менее
продолжительного периода работы. Она тогда и не предназначалась для работы.
На нее можно было только любоваться. И восхищаться ею.
То есть просто экспонат для группы людей, которые интересуются
разработкой операционных систем. Для горстки технарей с узкой
специализацией.
Реакция была неизменно положительная, но при этом так же неизменно
звучало: "А вот хорошо бы она еще это делала" или "Смотрится классно, но на
моем компьютере не работает" .
Помню одно сообщение, где говорилось, что автору очень понравилась моя
операционка, он не меньше абзаца описывал, какая она классная. Потом
объяснял, что она только чтоуничтожила его жесткий диск и что мой драйвер
дисковода с придурью. Даже потеряв все свои файлы, он все равно был настроен
очень положительно. Такие сообщения было читать очень приятно. Это был отчет
об ошибках в программе, которая все у него вверх дном перевернула.
Именно таких сообщений я и ждал. Я исправил кое-какие глюки (например,
система перестала зависать, когда кончалась память). И еще я сделал большой
шаг вперед -- перенес в нее компилятор GCC, так что можно было компилировать
небольшие программы. Теперь пользователям не нужно было перед запуском
операционки загружать мой компилятор GCC.
IX.
Вы скорбите о тех временах, когда мужчины были настоящими мужчинами и
сами писали драйверы устройств?
Из объявления о выпуске Linux 0.02
В начале октября была выпущена версия 0.02 с исправлением ошибок и
добавлением некоторых программ. В ноябре я выпустил версию 0.03.
К концу 1991-го я был уже готов остановиться. Я сделал много интересных
вещей. Не все работало идеально, но в программистском мире люди часто теряют
интерес к проекту, когда решены основные задачи. Со мной примерно так и
было. Кому интересно вылавливать блох? Удержали меня две вещи: во-первых, я
нечаянно запортил раздел с Minix, а во-вторых, мне продолжали приходить
отклики.
В те времена я загружался в Linux, но использовал Minix как основную
среду разработки. Под Linux я в основном получал с университетского
компьютера почту и новости с помощью своей программы эмуляции терминала.
Поскольку университетская машина была постоянно занята, я написал программу
автодозвона. Но в декабре я по ошибке позвонил вместо модема на винчестер.
Вместо параметра auto-dial /dev/ttyl (последовательный интерфейс) я указал
/dev/hdal (винчестер). В итоге я нечаянно попортил некоторые важные части
раздела, где у меня сидела Minix. Теперь я не мог ее загружать.
Это был решающий момент: можно было переустановить Minix или принять
вызов и объявить, что Linux может полностью ее заменить. Я написал программы
для компиляции Linux внутри нее самой и каждый раз, когда мне требовалась
Minix, просто добавлял в Linux нужную функцию. Это большой шаг вперед, когда
отказываешься от исходной базовой среды и переходишь на самообеспечение.
Поэтому в конце ноября я выпустил версию 0.10. А еще через несколько недель
-- 0.11.
Вот тут системой стали по-настоящему пользоваться несколько человек. До
этого мне приходили сообщения только о мелких ошибках -- достаточно было
исправить одну строку. Теперь же мне стали присылать заявки на новые
функции. Помню, мне пришлось выйти из дома, чтобы увеличить ОЗУ с 4 до 8
мегабайт. Еще пришлось купить сопроцессор для операций с плавающей точкой,
потому что некоторые спрашивали, поддерживает ли Linux сопроцессоры. Новое
железо позволило проводить вычисления с плавающей точкой.
Помню, в декабре мне написал один немец. Он пытался скомпилировать
ядро, но не мог запустить GCC, потому что у него было всего два мега, а
компилятору тогда было нужно больше мега. Он спрашивал, нельзя ли
компилировать Linux какой-то другой программой, которая не требует столько
памяти. И хотя у меня таких проблем не было, я решил написать новую функцию
специально для него. Это называется страничной подкачкой на диск и дает
возможность в дополнение к имеющейся памяти использовать винчестер. Дело
было в канун Рождества 1991 года. Помню, как 23 декабря старался реализовать
подкачку. К 24-му она вроде заработала, но время от времени сыпалась.
Наконец, 25-го все было готово. Это была первая возможность, которую я
добавил по чужой заявке.
Я очень этим гордился.
Конечно, я ничего не сказал родным, когда мы собрались у папиной мамы
(Фармор) на праздничный обед с окороком и селедкой. Каждый день полку
линуксоидов прибывало, и я стал получать сообщения из таких стран, в которых
мечтал побывать (вроде Австралии и США). Не знаю почему, но мне не хотелось
обсуждать эти дела с родителями, сестрой или другими родственниками. Они же
не разбирались в компьютерах. Наверное, я думал, что они ничего не поймут.
С их точки зрения, я просто занимал телефон своим модемом. Раньше в
Хельсинки ночью был пониженный тариф, поэтому я старался большую часть
делать дома по ночам. Но иногда я занимал телефон целый день. Я пытался
раздобыть второй номер, но мы жили в старом доме, и запасных линий у них не
было, а новые проводить они не собирались. В то время Сара только и делала,
что разговаривала с друзьями по телефону. По крайней мере, мне так казалось.
Поэтому у нас периодически возникали стычки. Виртуальные. Во время ее
разговоров я принимался дозваниваться модемом, и у нее в трубке слышалось
звяканье. Это ее раздражало, но так я давал ей понять, что мне очень-очень
нужно считать почту. Я и не говорю, что был хорошим братом.
Подкачка на диск была довольно значительной вещью -- в Minix ее не
было. Я включил ее в версию 0.12, выпущенную в первую неделю января 1992-го.
Linux тут же стали сравнивать не только с Minix, но и с Coherent, небольшой
Unix-системой, выпущенной компанией Mark Williams. Добавление подкачки сразу
вывело Linux вперед.
Тут-то и начался ее стремительный взлет. Люди стали переходить от Minix
к Linux. В то время Linux еще многого не умела из того, что умела Minix, но
самые ходовые вещи в ней были. Да еще эта новая возможность, которую все
сразу оценили: подкачка позволяла запускать такие большие программы, для
которых фактически не было памяти. Когда память кончалась, можно было взять
использованный кусок, сохранить его на винт, запомнить, куда, и снова
использовать кусок памяти. Это было важным событием в начале 1992 года.
Именно в январе пользоваться Linux стали не только те 5, 10, 20
человек, с кем я переписывался и кого знал по именам, но и сотни неизвестных
мне людей. Среди пользователей Linux появились незнакомцы, и это было
прикольно.
Примерно в это время по Интернету гуляла утка. Какой-то мальчик по
имени Крейг якобы умирал от рака, и люди рассылали по цепочке письма,
призывавшие поддержать его, послав ему открытку. Похоже, это был просто
черный юмор: не думаю, что Крейг вообще существовал, а тем более болел
раком. Но этот призыв породил миллионы открыток. Поэтому я -- наполовину в
шутку -- попросил пользователей Linux присылать мне не деньги, а открытки.
Это была своего рода пародия на цепочные рассылки ("О боже, неужели еще один
мейл с просьбой слать открытки?"). В мире PC тогда были очень популярны
"шаровары" (условно-бесплатные программы): скачал программу -- пошли автору
долларов 10. Меня многие спрашивали, не послать ли мне долларов тридцать.
Нужно было что-то ответить.
Оглядываясь назад, я понимаю, что деньги не помешали бы. На мне висело
тысяч пять долларов в студенческих ссудах и примерно 50 долларов в месяц
надо было выкладывать за компьютер. Остальные расходы шли в основном на
пиццу и пиво. Но Linux отнимала у меня столько времени, что я очень редко
куда-нибудь выходил -- раз в неделю, не чаще. На девушек мне деньги не
требовались, но на дополнительные железки пригодились бы. Хотя можно было
обойтись и без них. Возможно, другой сын попросил бы за свою программу
денег, чтобы помочь оплатить квартирные расходы своей одинокой работающей
матери. Мне это и в голову не пришло. Можете меня судить.
Меня больше интересовало, где люди используют Linux. Я предпочел
деньгам открытки. И они посыпались лавиной -- из Новой Зеландии, Японии,
Нидерландов, США. Почту обычно вынимала Сара, и она очень поразилась, что ее
задиристый старший брат получает весточки от друзей из таких дальних краев.
Это впервые навело ее на мысль, что в те долгие часы, когда я занимал
телефон, я делал что-то потенциально полезное. Открыток накопилось много
сотен, и я не знаю, куда они делись. Наверно, пропали во время одного из
переездов. Авутон говорит, что я "самый несентиментальный человек на свете".
Я не хотел получать деньги по целому ряду причин. Когда я впервые
выложил Linux в свободный доступ, я чувствовал, что иду по стопам всех тех
ученых, которые столетиями строили свои теории на базе других -- на плечах
гигантов, говоря словами Исаака Ньютона. Я хотел не просто дать людям
возможность воспользоваться плодами моих трудов, но и получить от них
обратную связь (ну хорошо -- и признание тоже). Мне казалось неправильным
брать деньги с тех, кто мог бы помочь мне в улучшении программы. Возможно, я
подошел бы к вопросу иначе, если бы не вырос в Финляндии, где на каждого,
кто выказывает малейшие признаки жадности, глядят с подозрением, если не с
завистью. (Все несколько изменилось с тех пор, как телефоны Nokia стали
распространяться по всему свету, увеличивая банковские счета бесчисленных
финнов.) И безусловно, я бы совсем по-другому смотрел на бесплатное
распространение программы, если бы не вырос под влиянием упертого
дедушки-профессора и упертого коммуниста отца.
В любом случае я не хотел продавать Linux. И не хотел терять своей
власти над ней, то есть не хотел, чтобы ее продавал кто-то другой. Это я
четко сформулировал в уведомлении об авторских правах, помещенном в файл
COPYING первой версии, которую выложил еще в сентябре. Благодаря принятой в
1800-х годах Бернской конвенции тебе принадлежит авторское право на все
созданное тобой до тех пор, пока ты это право не продал. Как владелец
авторского права я должен был сформулировать правила: операционную систему
можно использовать свободно, пока ты ее не продаешь, а если ты внес какие-то
исправления или улучшения, то должен сделать их всеобщим достоянием в виде
исходников (в отличие от бинарников, которые недоступны). Кто не согласен с
этими условиями, тот не имеет права ни копировать, ни изменять программу.
Поставьте себя на мое место. Вы потратили полгода жизни на эту штуку и
хотите, чтобы все могли ею пользоваться, чтобы вам что-то перепало и чтобы
никто другой ею не завладел. Я хотел, чтобы люди могли ее видеть, изменять и
улучшать в свое удовольствие. А для себя хотел иметь возможность знать, что
они делают: иметь доступ ко всем исходникам, чтобы самому пользоваться их
усовершенствованиями. Мне представлялось, что Linux может стать самой лучшей
программой на свете, если только отсечь все коммерческие интересы. Деньги
все испортили бы. А туда, где нет денег, не потянутся жадные люди.
При том, что сам я не стремился заработать на Linux, другие не
стеснялись просить вознаграждение за копирование ее на дискеты. К февралю
многие приносили на собрания юниксоидов дискеты с Linux. У меня стали
просить разрешения брать за них долларов по пять, чтобы покрыть временные
затраты и стоимость дискет. Трудность была в том, что это нарушало мои
авторские права.
Пришла пора пересмотреть мой девиз: Linux не продается. К тому времени
о Linux было столько разговоров в онлай-не, что я уже не сомневался: никто
не может просто забрать программу себе -- чего я больше всего боялся
вначале. По крайней мере, такой поступок вызвал бы бурю негодования. Если бы
кто-то попытался присвоить Linux и превратить ее в коммерческий продукт, он
столкнулся бы с сильным противодействием: куча фанатов Linux -- а их
становилось все больше -- закричала бы: "Эй, это же Linux! Так нельзя!",
только не так вежливо.
Мы уже набрали скорость. Каждый день хакеры со всего мира присылали
свои изменения. Мы коллективно разрабатывали самую лучшую операционную
систему, и с этим уже трудно было что-то сделать. Из-за этого, а также из-за
того, что Linux стала всем известна, я мог позволить людям ее продавать.
Чтобы вы не думали, что я становлюсь в позу благодетеля человечества,
хочу указать еще на один важный мотив моего решения. Дело в том, что при
создании Linux я использовал множество свободно распространяемых по
Интернету инструментов -- пристроился на плечи гигантов. Самым важным из
этих инструментов был компилятор GCC. Авторские права на него оговорены в
Универсальной общественной лицензии (GPL), которую еще называют "левым
правом" (copyleft) и которую изобрел Ричард Столман. В условиях этой
лицензии речь не идет о деньгах. Можно получить хоть миллион баксов, если
кто-то готов его заплатить, главное -- открыть исходники. И тот, кому ты
даешь или продаешь исходники,
имеет те же права, что и ты сам. Это замечательная схема. Но в отличие
от многих ярых фанатов GPL, которые требуют, чтобы всякая программная
новинка становилась достоянием человечества на условиях этой лицензии, я
считаю, что автор программы имеет право сам решить, что с ней делать.
Итак, я отказался от собственного описания авторских прав и перешел к
GPL, которую Столман составил при участии юристов. (Из-за этого она и
занимает несколько страниц.) Новое уведомление об авторских правах было
включено в версию 0.12. Помню, как после этого лежал ночью без сна -- все
думал, как отразятся коммерческие интересы на Linux. Теперь мои тогдашние
страхи кажутся смешными, поскольку коммерческий интерес был сравнительно
невелик. Что-то заставляло меня быть очень осторожным. Я, в частности,
боялся (да и сейчас боюсь), что кто-нибудь просто заграбастает Linux себе,
наплевав на авторские права. В то время меня волновало, что будет невозможно
засудить какого-нибудь американца за нарушение авторских прав. Меня это и
сейчас волнует. Очень легко возбудить против кого-то иск за такие нарушения,
но обидно, что кто-то будет продолжать делать это, пока его не вынудят
остановиться.
Кроме того, я опасаюсь, что компании в таких странах, как Китай,
проигнорируют GPL. Тамошнее законодательство по существу никак не защищает
авторские права, и преследовать их нарушителей нет никакого смысла. Крупные
производители программного обеспечения и музыкальной продукции пытались это
делать, но особых успехов не достигли. Реальность опровергает мои страхи.
Пусть отдельные нарушители и встречаются, но преобладают люди, уважающие
авторские права; именно они присылают изменения в ядро и помогают его
совершенствованию. Они полноправные участники его модернизации. А те, кто не
считается с GPL, не смогут воспользоваться новыми версиями и потеряют
клиентов. Я так надеюсь.
Вообще говоря, я смотрю на проблему авторских прав с двух сторон.
Возьмем человека, который зарабатывает 50 долларов в месяц. Можно ли
ожидать, что он заплатит за программу 250 долларов? Я не считаю, что он
поступит аморально, если нелегально скопирует программу, а сэкономленную
сумму, равную своей зарплате за пять месяцев, потратит на еду. С моральной
точки зрения это вполне допустимо. И было бы аморально, да и просто глупо,
преследовать такого "нарушителя". Что касается Linux, то кому какое дело,
соблюдает ли человек GPL, если он использует программу для собственных нужд?
Вот когда кто-то собирается на ней зарабатывать, игнорируя GPL, -- это я
считаю аморальным, будь то в США или в Африке. Но и тогда все зависит от
масштабов. Жадность всегда отвратительна.
X.
Minix и Linux
Не все отклики были положительными. Хоть по натуре я и не борец, но
когда Эндрю Таненбаум начал нападать на мою операционную систему, которая
вытесняла его собственную, пришлось защищать Linux и свою честь. Как и
положено хакерам, мы грызлись по мейлу.
У него были все основания кипятиться. До появления телеконференций
Linux я постоянно использовал конференцию Minix для объявлений о Linux и
поиска тех, кого моя операционная система могла бы заинтересовать. Любого бы
это зацепило.
Во-первых, Эндрю не понравилось мое вторжение в его конференцию. И
естественно, ему не нравилось, что его операционная система начинала
вытесняться этим новым созданием, явившимся со снежных просторов Финляндии,
и что к проекту присоединялось столько новых разработчиков. Кроме того, у
него были другие взгляды на построение операционных систем. В то время Эндрю
входил в лагерь сторонников микроядерного подхода к операционным системам.
Minix была сделана в виде микроядра, и Amoeba, над которой он в то время
работал, тоже содержала микроядро.
В конце 80-х -- начале 90-х это направление было очень популярным. А
успех Linux угрожал ему. Поэтому Эндрю регулярно выступал с язвительными
репликами.
Теоретически необходимость микроядра обосновывается следующим образом.
Операционные системы сложны. Для их упрощения применяется модульный подход.
Вся соль микроядра в том, чтобы оставить у ядра, которое является основой
основ, как можно меньше функций. Его главная задача -- обмен информацией. А
все возможности компьютера реализуются в виде сервисов, которые обеспечивают
коммуникационные каналы микроядра. Предполагается, что вы разбиваете
проблемы на такие мелкие части, что вся сложность пропадает.
Мне это казалось глупым. Да, каждая отдельная часть получается простой.
Но при этом их взаимодействие становится гораздо более сложным, чем при
включении ряда сервисов в состав ядра, как это сделано в Linux. Представьте
себе человеческий мозг. Каждая его составляющая проста, но их взаимодействие
превращает мозг в очень сложную систему. В этом-то все и дело: целое больше
частей. Если взять проблему, разделить ее пополам и сказать, что каждая
половинка вполовину проще, то при этом вы игнорируете сложность интерфейса
между половинками. Сторонники микроядра предлагали разбить ядро на пятьдесят
независимых частей так, чтобы каждая часть была в пятьдесят раз проще. Они
умалчивали о том, что взаимодействие между частями окажется сложнее исходной
системы -- при том, что и части сами по себе не будут элементарными.
Это самое главное возражение против микроядра. Простота, обеспечиваемая
микроядром, является мнимой.
Исходно Linux была намного меньше и намного, намного проще. Она не
навязывала модульность, поэтому многое делалось гораздо проще, чем в Minix.
Вот, например, что мне не нравилось в Minix: если у тебя одновременно
работает пять разных программ и они хотят прочесть пять различных файлов,
эти задания будут выполняться последовательно. Другими словами, пять
различных процессов пошлют файловой системе запросы: "Можно мне прочесть
файл X?" Демон файловой системы, который занимается чтением, примет один из
них и пошлет ответ, потом другой -- и так далее.
В Linux, где ядро монолитно, каждый из пяти процессов пошлет системный
вызов ядру. Ядро должно действовать очень осторожно, чтобы не перепутать
вызовы, но при этом оно очень естественно готово к обслуживанию любого числа
процессов, выполняя все, что им нужно. Поэтому Linux работает намного
быстрее и эффективнее.
Плохо было и то, что с исходниками Minix -- согласно лицензионному
соглашению -- почти ничего нельзя было делать. Вот, например, Брюс Эванс
провел коренную переделку Minix, которая ее значительно улучшила. Однако
нельзя было намертво встроить эти изменения в систему. Разрешалось только
приделывать заплатки. Просто кошмар какой-то! По закону он не мог сделать
загрузочный модуль, чтобы облегчить людям модернизацию. Поэтому для
получения сколько-нибудь полезной системы модернизацию приходилось проводить
в несколько этапов, что было крайне неудобно.
Единственный раз я принялся отвечать Эндрю Таненбауму в начале 1992
года. Представьте себе, что в одно вьюжное утро вы получаете такое
нелицеприятное письмо:
From: ast@cs.vu.nl (Andy Tanenbaum)
То: Newsgroups: comp.os.minix
Subject: LINUX устарела
Date: 29 Jan 92 12:12:50 GMT
Я тут на пару недель уезжал в США, поэтому не писал особенно о LINUX
(не то чтобы я стал писать, если бы и был здесь) . Однако теперь хочу
сделать несколько замечаний.
Как большинство из вас знает, для меня MINIX - хобби, которым я
занимаюсь по вечерам, когда мне надоедает писать книжки, а по CNN не
показывают никаких войн, революций или парламентских слушаний. Моя основная
работа -- преподавание и исследования в области операционных систем.
По роду своей деятельности, мне кажется, я знаю кое-что о будущем
операционных систем в ближайшие лет десять. Здесь возникают две проблемы:
1. МИКРОЯДРО ИЛИ МОНОЛИТ
Раньше большинство операционных систем были монолитными, то есть вся
операционная система представляла собой единый исполняемый файл "a.out",
работающий в режиме ядра. В этот бинарник входит управление процессами,
управление памятью, файловая система и все остальное. Примерами таких систем
могут служить UNIX, MS-DOS, VMS, MVS, OS/360, MULTICS и многие другие.
Альтернативой является система с микроядром, в которой большая часть
операционной системы разбивается на отдельные процессы, находящиеся вне
ядра. Они обмениваются между собой сообщениями. В задачи ядра входит
управление передачей этих сообщений, обработка прерываний, управление
процессами низкого уровня и, возможно, ввод-вывод. Примерами такой
архитектуры служат RC4000, Amoeba, Chorus, Mach и еще не выпущенная Windows
/NT. Я мог бы многое рассказать о сравнительных преимуществах этих двух
подходов, но достаточно сказать, что среди специалистов по разработке
операционных систем споры уже закончились. Микроядро победило. Minix --
система с микроядром. Файловая система и управление памятью -- это отдельные
процессы, которые работают вне ядра. Ввод-вывод тоже выполняется отдельно.
LINUX -- монолитная система. Это большой шаг назад, в 70-е. годы.
2 . ПЕРЕНОСИМОСТЬ
MINIX задумана как переносимая система и была перенесена с машин на
базе Intel-процессоров на 680x0 (Atari, Amiga, Macintosh), SPARC и NS32016.
LINUX тесно связана с 80x86. Тупиковый путь.
Поймите меня правильно. Я ничего не имею против LINUX. Она снимает с
меня заботу о тех, кто хочет превратить MINIX в BSD UNIX. Но я с полной
ответственностью заявляю, что те, кому нужна **СОВРЕМЕННАЯ** **бесплатная**
ОС, должны искать переносимую ОС на базе микроядра, типа GNU или чего-то в
этом роде.
Энди Таненбаум (ast@cs.vu.nl)
Я знал, что должен защитить свою честь, поэтому написал ответ.
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Subject: Re: LINUX устарела
Date: 29 Jan 92 23:14:26 GMT
Organization: University of Helsinki
На сообщение с таким заголовком нельзя не ответить. Прошу прощения у
пользователей minix, которые уже досыта наслушались о linux. Я хотел бы
просто *проигнорировать вызов*, но ... Настало время серьезного спора!
В сообщении <12595@star.cs.vu.nl> ast@cs.vu.nl (Энди Таненбаум)
пишет:
>Я тут на пару недель уезжал в США,поэтому не
>писал особенно о LINUX (не то чтобы я стал
>писать, если бы и был здесь) . Однако теперь я
>хочу сделать несколько замечаний.
>Как большинство из вас знает, для меня MINIX --
>хобби, которым я занимаюсь по вечерам, когда мне
>надоедает писать книжки, а по CNN не показывают
>никаких войн, революций или парламентских
>слушаний. Моя основная работа -- преподавание и
>исследования в области операционных систем.
Вы хотите этим оправдать ограниченность minix? Извините, но вы не
правы. У меня оправданий гораздо больше, и все-таки linux побеждает minix
почти по всем параметрам. Не говоря уж о том, что большая часть хороших
кодов для minix, похоже, написана Брюсом Эвансом.
Re 1: Для вас minix хобби -- но ведь minix приносит доход, a linux
раздается бесплатно. Теперь по поводу хобби. Поместите minix в свободный
доступ, и одна из моих главных претензий к ней отпадет. Linux для меня в
большой степени хобби (серьезное хобби, самого высшего сорта). Я не беру за
нее денег, и она даже не является частью моей учебной работы. Я сделал ее в
свободное время на собственной машине.
Re 2: Вы работаете преподавателем и исследователем. Прекрасное
объяснение для умственной неполноценности minix. Остается надеяться, что
Amoeba не такая фигня, как minix.
>1. МИКРОЯДРО ИЛИ МОНОЛИТ
Да, linux -- монолитная система, и я согласен, что микроядро лучше.
Если бы у вашего сообщения не был такой спорный заголовок, я бы, вероятно,
согласился с большинством ваших высказываний. С теоретической (и
эстетической) точки зрения linux проигрывает. Если бы ядро GNU было готово
прошлой весной, я бы и не взялся за свою разработку: беда в том, что оно не
было готово тогда и не готово до сих пор. Linux выигрывает прежде всего
потому, что она уже готова.
>MINIX -- система с микроядром [пропущено, но без >потери смысла]
. LINUX -- монолитная система.
Если бы это было единственным критерием качества ядра, вы были бы
правы. Однако вы не пишете о том, что микроядро в minix сделано плохо и
возникают проблемы с многозадачностью (в ядре) . Если бы я сделал ОС, у
файловой системы которой были бы проблемы с многозадачностью, я бы не стал
так поспешно осуждать других: наоборот, я бы из кожи вон лез, чтобы все
забыли о моем провале. Да, я знаю, что для minix есть масса заплаток,
обеспечивающих многопоточную работу, но это лишь заплатки, и Брюс Эванс
говорит, что все равно остается множество проблем синхронизации.
>2 . ПЕРЕНОСИМОСТЬ
"Переносимость нужна людям, которые не умеют писать новые программы" --
это я только что придумал. В шутку.
На самом деле linux легче переносится, чем minix. Что? -- слышу я ваш
возглас. Это верно, но не в том смысле, какой имеет в виду ast: я сделал
linux в максимальном соответствии со стандартами (хотя у меня перед глазами
не было стандарта POSIX). Перенос программ в linux обычно гораздо проще, чем
перенос их в minix. Я согласен, что переносимость -- хорошее дело, но только
если она имеет реальный смысл. Нет причин делать операционную систему
полностью переносимой: достаточно, чтобы она была согласована с переносимым
API. Основная идея операционной системы заключается в том, чтобы
воспользоваться аппаратными возможностями, спрятав их под слоем обращений
высокого уровня. Именно это и делает linux: она просто использует больше
возможностей 386, чем другие ядра. В результате само ядро, конечно,
становится не переносимым, но зато существенно упрощается архитектура.
Вполне приемлемый компромисс, который и сделал возможным появление linux. Я
согласен, что в linux машинная
зависимость доведена до предела: я купил себе 386-й в январе прошлого
года и занялся linux отчасти для того, чтобы его изучить. Многие вещи нужно
было бы сделать более машинно-независимыми, если бы это был настоящий
проект. Но я не особенно оправдываюсь: это было конструктивное решение, и
когда в апреле прошлого года я начинал писать linux, то не думал, что
программой захочет воспользоваться кто-то другой. К счастью, я ошибся, а
поскольку мои исходники всем доступны, каждый может попробовать перенести
ее, хотя это будет и непросто.
Линус
PS> Прошу прощения за слишком резкие высказывания: minix -- неплохая
система, если нет ничего другого. Amoeba, может быть, неплоха, если у вас
валяется 5--10 лишних 386-х, но у меня их нет. Обычно я не вступаю в
перепалки, но linux -- мое больное место :)
В этой переписке (одной из немногих виртуальных ссор, в которых я
участвовал) было еще несколько обменов репликами. Однако основную идею вы
уже уловили: у системы с самого начала были противники. (А может быть,
основная идея в другом: будьте осторожны, выступая на электронном форуме.
Все ваши опечатки и ошибки останутся с вами навсегда.)
Оставив родных и друзей на стоянке, мы с Линусом отправляемся в поход
вдоль ручья. Наш лагерь расположился в парке "Гровер-Хот-Спрингс" в
восточной части Сьерра-Невады. Дело происходит в выходные по случаю Дня
независимости (4 июля). Место настолько живописное, что кажется картинкой из
географического журнала "National Geographic". "Это момент для "Кодака", --
провозглашает Линус, окидывая взглядом заросший полевыми цветами луг и
суровые скалы на заднем плане. Мы усаживаемся возле ручья, и я прошу его
рассказать о том времени, когда чары Linux стали распространяться далеко за
пределы исходного сообщества участников телеконференции, с некоторыми из
которых Линус даже встречался.
"Вот было классно, наверное, -- говорю я. -- Столько лет ты сидел без
всякой связи с внешним миром, с головой погрузившись в процессор. И вдруг
люди из разных уголков планеты признают, что ты занимаешься важным делом. Ты
становишься центром растущего сообщества, которое смотрит на тебя, как
на..."
"Не помню, чтоб это для меня много значило, -- отвечает Линус. -- Вряд
ли. Я все время об этом думал, но в основном потому, что постоянно возникали
проблемы, требовавшие разрешения. Думал-то я много, но без особых эмоций.
Мне нравилось, что множество людей подталкивают меня к продолжению работы. Я
думал, что конец уже виден -- момент, когда практически все будет готово. Но
этот момент все не наступал, потому что мне подкидывали все новые стимулы и
новые проблемы.
Поэтому работать было интересно. Иначе я бы, наверное, занялся чем-то
другим, потому что мне нравилось работать именно так. А эмоций у меня больше
вызывал мой нос или еще что-нибудь в этом роде".
Через несколько недель мы бродим по Стенфордскому торговому центру, где
Линус выбирает себе кроссовки, поражаясь их разнообразию. "Сколько миль в
неделю вы обычно пробегаете?" -- спрашивает его продавец. Линус улыбается --
за последние десять лет он не пробежал и мили. Физкультура не входила в
сферу его приоритетов. Но в минуты слабости Линус признается, что хотел бы
избавиться от лишнего веса.
"Это, наверное, Туве попросила тебя помочь мне сбавить вес", -- шутит
он, поглаживая свой животик.
"Передай ей, что на этой неделе я еще не получил от нее чека", --
откликаюсь я.
Вскоре мы начинаем кружить по Стенфордскому городку в поисках места для
стоянки. Примерно через полчаса нам удается втиснуть свой автомобиль. После
небольшой разминки мы принимаемся бежать по грязным тропинкам вдоль
высохшего озера в глубь леса к нашей цели -- огромной спутниковой тарелке на
холме. Нам так и не удается ее достичь. Я беру слишком высокий темп и с
удивлением отмечаю, что километра полтора Линус умудряется бежать прямо за
мной. После этого он теряет дыхание. Через несколько минут мы растягиваемся
на траве возле озера.
"А как реагировала твоя семья на происходящее с Linux? -- спрашиваю я.
-- Они, наверное, пришли в восторг".
"Вряд ли они что-то заметили, -- отвечает он. -- Я не хочу сказать, что
никому не было дела. Просто я почти в