Единственный раз я принялся отвечать Эндрю Таненбауму в начале 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 — мое больное место :)
В этой переписке (одной из немногих виртуальных ссор, в которых я участвовал) было еще несколько обменов репликами. Однако основную идею вы уже уловили: у системы с самого начала были противники. (А может быть, основная идея в другом: будьте осторожны, выступая на электронном форуме. Все ваши опечатки и ошибки останутся с вами навсегда.)