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


Безудержная радость


Надо отдать должное профессору, он умеет выбирать адресата, время и место для того, чтобы вызвать громкий и продолжительный эффект с помощью простого сообщения, отправленного по электронной почте. Его предыдущим корреспондентом был Линус Торвальдс, а их переписка о монолитном и микро ядре вошла в анналы истории ИТ. Без этого трудно понять, почему Эндрю Таненбаум так экзальтирован из-за мнимого успеха Миникс, которая всего лишь в течении десятка лет обеспечивала работу интеловского бэкдора IME.


Рождение Linux и критика монолитного ядра


26 лет назад программирования для Unix было нетривиальным делом для обычного студента, так как все разновидности Unix были платными. Чтобы освоить эту операционную систему Линус решает поставить Minix. Интернет в ту пору еще только зарождался, заказ ОС шел через обычную почту, так же как и доставка. Ради Minix пришлось раскошелиться на 169 долларов.


У меня возникло множество претензий к Minix. Хуже всего была эмуляция терминала, очень важная для меня программа, потому что именно ее я использовал для подключения к университетскому компьютеру. Я зависел от этой эмуляции каждый раз, когда связывался с университетским компьютером, чтобы поработать с мощной Unix-системой или просто выйти в онлайн.

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


25 августа 1991 г. Линус отправляет свое знаменитое сообщение о том, что работает над бесплатной операционной системой, но это будет не такой крупный и профессиональный проект как GNU. Помимо всего прочего внимание заслуживает тот факт, что этот и другие ранние анонсы свое операционной системы Линус отправляет в конференцию Minix, оттягивая на себя пользователей последней.


Эндрю Таненбаум до поры до времени никак на это не реагировал, но Linux рос как снежный ком. Уже в январе 1992 г. вышла версия 0.12, в котором была реализована страничная подкачка на диск — то чего не было в Minix. Вскоре после этого профессор снизошел до выскочки, чтобы лично ему ответить и вот 29-го января Линус получает сообщение в конференцию comp.os.minix с нравоучительным содержанием. Начало было обнадеживающим.


From: ast@cs.vu.nl (Andy Tanenbaum)
То: Newsgroups: comp.os.minix
Subject: LINUX устарела
Date: 29 Jan 92 12:12:50 GMT

Я тут на пару недель уезжал в США, поэтому не писал особенно о LINUX (не то чтобы я стал писать, если бы и был здесь). Однако теперь хочу сделать несколько замечаний.
Как большинство из вас знает, для меня MINIX – хобби, которым я занимаюсь по вечерам, когда мне надоедает писать книжки, а по CNN не показывают никаких войн, революций или парламентских слушаний. Моя основная работа – преподавание и исследования в области операционных систем.

Далее следовали справочные сведения о монолитном ядре, микроядре и об ОС, исповедующих тот, или иной принцип. Затем следовал несостоятельный с точки зрения логики довод о том, что среди специалистов по разработке операционных систем споры по данному вопросы уже прекратились ввиду явного преимущества микроядра. Дальше декларации о том, что Minix прогрессивна, а Linux — возврат в 1970-е. Кроме того, Linux привязан к одной архитектуре в то время как Minix был перенесен с Intel процессоров на другие платформы: Atari, Amiga, Macintosh, SPARC и NS32016.


Я мог бы многое рассказать о сравнительных преимуществах этих двух подходов, но достаточно сказать, что среди специалистов по разработке операционных систем споры уже закончились. Микроядро победило. Minix – система с микроядром. Файловая система и управление памятью – это отдельные процессы, которые работают вне ядра. Ввод-вывод тоже выполняется отдельно. LINUX – монолитная система. Это большой шаг назад, в 70-е. годы.

Microkernel vs Monolithic


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


Линус принимает вызов


Линус придерживался другого мнения на сей счет. Отдавая должное элегантности и изяществу архитектуры микроядра с теоретической точки зрения, он тем не менее считал микроядро не пригодным для практических целей. Мнимая простота микроядра оборачивается тем, что взаимодействие и интерфейс между простыми частями микроядра создает сложности, которые нивелируют все ее «бумажные» преимущества. В своем ответе он изложил свое видение по данному вопросу. После дерзких выпадов против своего оппонента Линус переходит к сути.


From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Subject: Re: LINUX устарела
Date: 29 Jan 92 23:14:26 GMT
Organization: University of Helsinki

...
Да, linux – монолитная система, и я согласен, что микроядро лучше. Если бы у вашего сообщения не был такой спорный заголовок, я бы, вероятно, согласился с большинством ваших высказываний. С теоретической (и эстетической) точки зрения linux проигрывает. Если бы ядро GNU было готово прошлой весной, я бы и не взялся за свою разработку: беда в том, что оно не было готово тогда и не готово до сих пор. Linux выигрывает прежде всего потому, что она уже готова.

Затем перечисляет проблемы Minix с многозадачностью в файловой системе.


Если бы это было единственным критерием качества ядра, вы были бы правы. Однако вы не пишете о том, что микроядро в minix сделано плохо и возникают проблемы с многозадачностью (в ядре). Если бы я сделал ОС, у файловой системы которой были бы проблемы с многозадачностью, я бы не стал так поспешно осуждать других: наоборот, я бы из кожи вон лез, чтобы все забыли о моем провале. Да, я знаю, что для minix есть масса заплаток, обеспечивающих многопоточную работу, но это лишь заплатки, и Брюс Эванс говорит, что все равно остается множество проблем синхронизации.

Перепалка в конференции продолжается, в спор вступают новые участники. Эндрю Таненбаум и Линус Торвальдсь продолжают спор, но уже более в более сдержанной манере. Ниже вольный перевод избранных цитат.


Эндрю Танебаум: Я нарочно написал Minix таким корявым, чтобы студенты могли гонять его на разнообразном и недорогом компьютерном железе, но дизайн у моей ОС норм., а не то что твой отсталый Linux. Его к тому же невозможно переносить на другие платформы. Я бы тебе на экзамене поставил пару.

David Feustel: Ничего страшного, и у Эйнштейна были плохие отметки по математике и физике.

Ken Thompson: Пользователям до лампочки современное ли ПО у них на компьютере, производительность гораздо важнее. Да, будущее за микроядром, однако монолитное ядро проще состряпать. Впрочем, его и запороть проще, если писать код на скорую руку.

Randy Burns: Системные вызовы Linux совместимы с переносимыми ОС, так что жалобы на привязку к одной платформе неуместны. Наоборот, Linux закрывает брешь, позволяя нам использовать програмы GNU. Может быть через пару лет, когда Hurd и недорогие BSD системы получат распространение Linux и устареет, но сейчас мы можем наслаждаться gcc, bash, bison за бесценок и писать код для лучшей ОС.

Pete French: А разве микроядро и монолитное ядро не являются артефактами языка программирования, на котором написаны. В чем разница между микроядром, написанным на C и монолитным ядром — на OCCAM?

Линус Торвальдс: Ты старался так ради студентов, ну тогда понятно. Но с многозадачностью в твоей ОС все равно беда, как ни крути, а на моем «отсталом» монолитном Linux все летает. С переносимостью больших проблем не будет, так как Linux API переносимо — были бы желающие. А хорошие оценки мне и так не светят, я тут недавно с другим преподавателем архитектуры ОС повздорил.

Lawrence C. Foard: Теоретики такие теоретики. У них прекрасные идеи, но никто их них не удосужился их проверить на деле. Интелосвкие 32-битные процессоры уже почти 10 лет как доступны на рынке, но никто кроме Линуса не написал для них ОС, которую можно пощупать, без необходимости покупать Unix AT&T за 100,000$. Готовая ОС стоит десятка бумажных. Я уже сегодня могу писать код для Linux и экспериментировать как мне вздумается.

peter da silva: Прекрасно, что Linux существует и монолитное ядро — одна из причин того, что он был создан так быстро. Это мощный аргумент в пользу монолитного ядра и однако это не значит, что микроядро обязательно должно быть медленным, или что оно «бумажное».

Аргументы в пользу микроядра в то время действительно перевешивали, но на сегодняшний день опыт использования обоих принципов построения ОС внес коррективы.


Несмотря на возможности Mach, такие потери производительности в реальном мире неприемлемы. По ходу того, как остальные коллективы разработчиков приходили к тем же выводам, их энтузиазм довольно быстро стал улетучиваться. Поэтому большая часть сообщества разработчиков ОС посчитала, что использование IPC в качестве основы ОС изначально провально.

На этом первая часть Марлезонского Балета завершилась. Первый раунд битвы остался за профессором, Линус взял свои слова обратно, первым вышел из спора, однако не изменил своего мнение, так в главном он был прав — его ОС выигрывала, потому что была готова. Спустя 14 лет спор знаменитого теоретика и практика продолжился.


Использованные материалы


  1. Линус Торвальдс, «Just for fun»
  2. The Tanenbaum Torvalds debate

Комментарии (21)


  1. CodeRush
    15.12.2017 20:08

    которая всего лишь в течении десятка лет обеспечивала работу интеловского бэкдора IME.

    Опять не в лотерею, а в карты, и не выиграл, а проиграл.
    Minix используется только на МЕ10+, дебютировавший на платформе Skylake, так что десяток лет — это на самом деле два с небольшим, т.е. ее официальный анонс состоялся 5 августа 2015 года. До этого использовалась ОСРВ ThreadX.
    Во-вторых, термин «бэкдор» для Management Engine — слишком сильный. Софт намного дешевле железа, поэтому на МЕ и повесили столько всего с момента его появления в сетевых картах. Да, теперь МЕ занимается чем попало от загрузки микрокода из FIT до эмуляции устройства TPM 2.0 и поддержки шифрованного А\В канала для HDMI, но это все исключительно потому, что в железе все эти вещи было бы сделать тупо вдесятеро дороже, а процессоры для ПК должны стоить дешево, иначе конкуренты сожрут. Думаете АМД себе в Ryzen добавили PSP от хорошей жизни, или просто потому, что софт дешев, а железо дорого? Вот то то и оно.
    Фанатам открытости и свободы посоветую изначально открытые архитектуры вроде RISC-V и OpenPOWER, ибо на x86 и ARM ни того, ни другого уже давно нет.


    1. khim
      15.12.2017 22:11

      Фанатам открытости и свободы посоветую изначально открытые архитектуры вроде RISC-V и OpenPOWER, ибо на x86 и ARM ни того, ни другого уже давно нет.
      Но и MINIX'а на ARM'е никакого нет, так что про «самую популярную ОС на свете» профессор самую малость «загнул» (hint: ARM-процессоров в мире на порядок больше, чем x86, а даже если забыть про всякие стиральные машины — то смартфонов в мире больше, чем серверов и персоналок вместе взятых).


  1. Sdima1357
    15.12.2017 21:11

    Не убедили. Не упомянутый тут QNX например, вполне прилично работал. У микроядра все равно есть свои очевидные преимущества перед большой лапшой, несмотря на проблемы с эффективной реализацией IPC. Так что вопрос окончательно не закрыт. Микроядро ещё вернётся :)


    1. isden
      16.12.2017 10:24

      Apple mobile application processors beginning with the A7 contain a Secure Enclave coprocessor running an L4 operating system based on the L4-embedded kernel developed at NICTA in 2006. This implies that L4 is now shipping on all iOS devices, the total shipment of which is estimated at 310 million for the year 2015.
      Внезапно :)


  1. jaiprakash
    15.12.2017 21:18

    Ходили слухи будто виндовс 7 на микроядре. Врут?


    1. Sdima1357
      15.12.2017 21:26

      Она наследница Windows NT с «гибридным ядром» смотрите вики на эту тему


  1. sotnikdv
    15.12.2017 22:27

    ИМХО если бы Танненбаум не вел себя, как высокомерный м… к, то развитие Линукса от этого бы только выиграло.

    А так, несмотря на то, что идея микроядра достаточно интересная, микроядерные ОС так и не стали массовыми.

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

    Понятно, что у Танненбаума теперь некоторая обида за упущенную возможность, но даже сейчас он, вместо того, что бы начать работать с Hurd или Linux проектами, упорно пытается доказать (сделать уже не получилось), что Minix всех победил в итоге.

    При всем моем уважении к Танненбауму.


    1. gban
      16.12.2017 02:05

      del


    1. phponelove
      16.12.2017 10:35

      ИМХО если бы Танненбаум не вел себя, как высокомерный м… к, то развитие Линукса от этого бы только выиграло.

      Тут проблема не в том, что он высокомерный, не в том, что minix «лучше», а в том, что он попросту не работает и ничего не может, а никому в реальности не рабочее не нужно.

      С самим заявлением о том, что «используется minix» то же всё темным-темно. По какой причине был выбран minix? Случайно не из-за того, что она свободна, жива и кодовая база на порядки меньше, чем у linux? Случайно не по тому, что там bsd?

      Что осталось от этой minix? Какую часть её интел переписал и сколько дописал. Вопрос так же открытый.

      И Энди остался в истории, как твердолобый заносчивый теоретик, который может и знает, как лучше

      Очень спорно. Мы знаем, что микроядро лучше, как и Энди знает. Что дальше? Его попросту не существует в природе. Существуют некие макеты, которые могут запускаться, но чем-то рабочим их сложно назвать.

      В конечном итоге у нас есть то, что лучше, но реализаций чего в реальном мире не существует, и есть то, что хуже, но что существует. Попросту нельзя сравнит то, что есть и то, чего нет.

      А так, все мы знаем, что хороший код лучше плохого, только вопрос не в этом. Вопрос в том, как нам получить этот рабочий код. Не на моделях, а в реальном мире. Это и есть проблема.

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


      1. RPG18
        16.12.2017 16:02

        Разработчикам QNX удалось таки сделать востребованное ядро.


    1. oldbie
      16.12.2017 18:25

      Энди остался в истории, как твердолобый заносчивый теоретик

      Справедливости ради Линус тоже не самый компанейский товарищ. Так что думаю дело не только и не столько в софт скилз конкретных личностей.


  1. ne_zabudka
    16.12.2017 02:14

    Монолитное ядро это диктатор операционной системы, когда нибудь оно выйдет из под контроля и захватит мир. Помойму тема должна называться «Таненбаум против!»


  1. si1n3rd
    16.12.2017 13:02

    Цитата Столлмана из книги «Отъявленные программисты»:
    «Когда ОС Linux еще не существовало в природе, в своем «Манифесте GNU» мы поставили перед собой амбициозную цель — разработать собственную свободную Unix-совместимую систему, которую в итоге назвали GNU. И уже к тому моменту, когда разработка Linux только
    начиналась, разработка GNU была практически завершена. Здесь хочу отдельно подчеркнуть: GNU не был и не является проектом по разработке набора утилит или пакетов программ, как думают некоторые, и тем более это не проект по разработке компилятора языка С (хотя мы сделали и это). Поскольку наш проект изначально поставил перед собой комплексную цель «разработать полную свободную ОС, совместимую с Unix», мы с самого начала составили скрупулезный список программ для того, чтобы наша будущая система была самодостаточной.
    Таким образом, работая поступательно, к началу 90-х мы по частям сложили все воедино, реализовав весь запланированный список программ и компонент. Было готово все, кроме ядра. И с этой исходной точки мы приступили к написанию ядра GNU Hurd. К сожалению, его
    разработка затянулась на больший срок, нежели мы ожидали. Тут-то и появилось ядро Linux, которое было использовано в нашей системе.»

    Используется монолитное ядро Linux, а разработка микроядра Hurd затянулась, да так затянулась, что и сейчас практически все дистрибутивы GNU/Linux, а не GNU/Hurd.


    1. khim
      16.12.2017 13:40

      Используется монолитное ядро Linux, а разработка микроядра Hurd затянулась, да так затянулась, что и сейчас практически все дистрибутивы GNU/Linux, а не GNU/Hurd.
      А это называется — положительная обратная связь. Под GNU/Hurd не то, чтоб сильно сложнее программировать, но… к моменту, когда под GNU/Hurd можно было запустить «Hello, world!» под GNU/Linux уже разворачивали программно-аппаратные комплексы за миллионы долларов. Соотвественно и проблемы, которые там возникали и решались, отличались, так что со временем — отставание только нарастало…


  1. McAaron
    16.12.2017 14:03

    QNX на микроядре и все у нее с производительностью отлично.


    1. khim
      16.12.2017 14:18

      Есть опыт использования на серверах? Потому как «всё отлично» — понятие растяжимое. Тот же MINIX вполне справляется с поддержанием Intel ME, а вот хотя бы поставить на него NGINX и раздать статику — никто даже не пробует…

      P.S. И нет — это не сарказм. Мне действительно интересно — может QNX реально обслужить пресловутые 32 ядра или нет. То, что в своей нише он хорош — я знаю…


    1. P6i
      18.12.2017 10:51

      QNX — система реального времени, где главное предсказуемое время выполнения задачи, да и вообще — это ОСь для встраиваемых систем по большей части, глупо ее сравнивать в разрезе производительности с ОС общего назначения.


      1. acmnu
        18.12.2017 12:08

        глупо ее сравнивать в разрезе производительности с ОС общего назначения.

        Blackberry 10 основано на QNX. Ось, имхо, получилась толковой — провал на рынке связан с другими бедами (не техническими). Хотя конечно никто не запускал на ней Nginx.


  1. olartamonov
    16.12.2017 17:10
    +1

    Может быть через пару лет, когда Hurd и недорогие BSD системы получат распространение


    Знал бы он, как это будет читаться четверть века спустя.


    1. acmnu
      18.12.2017 12:10

      Ну это как закон Мура: самосбывающееся предсказание. Hurd провалился не в последнюю очередь из-за того, что Linux и BSD закрыли то нишу, куда он только собирался.


      1. olartamonov
        19.12.2017 00:41

        Он до сих пор туда собирается, если что. Пару лет назад версия 0.9 вышла, ещё десятилетие — и до релиза доживём.