Linux has modern and promising architecture

Writing a monolithic kernel in 1991 was “a giant step back into the 1970s”. Author of these words was Andrew S. Tanenbaum—a professor of computer science at the Vrije Universiteit, Amsterdam in the Netherlands. Linus Torvalds used (in a quite awkward manner) Tanenbaum’s book when writing Linux. When Tanenbaum looked deeply into the results of Torvalds’ work, he said “I still maintain the point that designing a monolithic kernel in 1991 is a fundamental error. Be thankful you are not my student. You would not get a high grade for such a design.” And indeed, Linux design incorporated many principles from Unix that is an obsolete system. Unfortunately, none made an attempt to look at Linux without prejudice about “modern design”. No initial planning, wrong line of development, no expertise in OS design—all that resulted in Linux being buggy[7], low quality and slow system[8]. Later people began to see hopelessness of Linux—e.g. European Union gave Tanenbaum a grant of €2.5 million to aid in microkernel development. The microkernel concept itself is not new. In the beginning of 80s there were microkernel-based systems on the market. But, unfortunately, they could not gain significant public attention because Torvalds was the person of which mass media created image of romantic and idealistic student instead. Microkernel architecture is a sign of delicate and slim design. Pure microkernel design is rarely used in real life. Such kind of kernel is only 100-200 KiB in size and is very stable, modular and secure. For example, adding or removing a module in Linux kernel is quite complicated, but doing the same with microkernel is a routine task. That’s why microkernel design means stability and flexibility – we don’t have to keep unneeded modules in memory. Any error in Linux driver would lead to complete system crash or allow unauthorized attackers to obtain full system access and destroy your data. This is not possible with microkernel architecture because driver will never get unrestricted privileges and will be immediately unloaded in case of fault. No vulnerabilities were revealed in Tanenbaum’s MINIX microkernel for over 10 years. Supporting monolithic kernel is extremely complicated. I think that country-wide switching to Linux would be a serious loss for all those organizations in terms of support and further development. That’s why that open source yelling about “easy updating” is a kind of sabotage. And what about finding a bug in monolithic kernel? Here is one interesting quotation on this: Andrew Morton, a leading Linux kernel developer and maintainer, is complaining about the development of –mm kernel branch: “It took me over two solid days to get this lot compiling and booting on a few boxes. This required around 90 fixup patches and patch droppings. There are several bugs in here which I know of and presumably many more which I don’t know of. I have to say that this just isn’t working anymore”[11]. The latest 2.6.23-rc6 kernel patch is almost 30 MiB in size. This is equivalent to about 30 thousand pages of source code (assuming a thousand of characters per page). This can be a very long discussion. For example, many people still believe that lack of drivers is just a conspiracy of corporations against Linux. The answer is simple: corporations are not interested in spending many thousands of dollars for writing drivers for Linux due to complexity of this process. Even if a driver will be written, it would require significant amount of time for support and maintenance because Linux does not have stable ABI (Application Binary Interface). This means that the driver will need to be rebuilt with every new release of Linux kernel. It also needs to be said that not only kernel, but also graphics and audio subsystems in Linux are designed and implemented in a very terrible way[12][13]. I’m not offering everybody to switch to MINIX because it is designed mainly for some specific (academic) purposes and for studying theory of system design and architecture of drivers and interfaces. Using pure microkernel-based system at home is not really needed, but still is a giant leap forward. At the same time Windows uses hybrid kernel. It’s difference from microkernel is that it loads layers, not modules.

Linux имеет современную и перспективную архитектуру

«Написание монолитного ядра в 1991 г. было гигантским шагом назад в 1970-е годы». Автором этих строк является профессор Амстердамского университета Эндрю Танненбаум. Именно руководствуясь (впрочем, неудачно) его книгой, Линус Торвальдс написал Linux. Когда Танненбаум более детально ознакомился с плодом мысли своего невдумчивого читателя, он заявил следующее: «Я по-прежнему считаю, что создавать монолитное ядро в 1991 году — фундаментальная ошибка. Скажите спасибо, что вы не мой студент: за такой дизайн я бы не поставил высокой оценки». Действительно, дизайн Linux дублировал допотопные принципы Unix, которая, как всем известно, является морально устаревшей системой. Но, к сожалению, никому не хватило здравомыслия посмотреть на Linux без пафосного предрассудка о «современном дизайне Linux», внушаемого массам. Отсутствие изначального плана работ, неверно взятое направление развития, отсутствие опыта проектирования операционных систем, — всё это сделало Linux крайне кривым, некачественным и медленным. Слепота длилась достаточно долго — пока шла волна истерии вокруг Linux. Однако осознание бесперспективности всего Linux понемногу стало доходить до людей. Так, в 2009 году Эндрю Таненбаум получил грант от Евросоюза в размере 2,5 миллионов евро на развитие концепции микроядерной архитектуры. Сама концепция «микроядра» не нова. В начале 1980-х годов на рынке присутствовали системы, использующие подобную архитектуру. Но, к сожалению, им не удалось выйти на рынок просто потому, что им не хватило рекламы и пафоса, ведь именно из личности Торвальдса пресса сделала романтический идеал студента, написавшего операционную систему. Микроядерная архитектура — признак тонкого и стройного дизайна. В реальной жизни редко используется чистая микроядерная архитектура. Чистые микроядра обычно имеют очень малый размер — в пределах 100-200 KiB и тем самым обеспечивают высокую надежность и модульность ОС. Так, к примеру, подключить в Linux необходимый модуль ядра достаточно сложно, а в концепции микроядра подгрузка или выгрузка модуля представляет собой штатное действие. За счёт этого достигается высокая производительность и гибкость, так как нет нужды держать загруженными ненужные модули, а возможность динамической выгрузки модулей обеспечивает очень высокую надежность. Так, любая ошибка в драйвере Linux может привести к краху всей операционной системы с неопределённым результатом (например, злоумышленники могут захватить контроль и похитить или уничтожить ваши данные). В микроядерной же системе подобная ситуация практически исключена. Драйвер мало того, что не сможет получить привилегии для доступа к данным, так ещё и будет выгружен в случае, если в нём произойдет ошибка. К примеру, в ядре системы Эндрю Танненбаума ОС Minix не было найдено ни единой уязвимости в ядре за целых десять (а то и больше) лет. Поддержка монолитного ядра крайне сложна. Я считаю, что любое внедрение Linux в масштабах страны будет серьезным ударом по всем организациям, использующим эту систему, как только речь коснётся дальнейшей поддержки и развития Linux. Поэтому все призывы опенсорсщиков, в которых они кричат о возможностях «лёгкой модификации» Linux, являются чистой воды саботажем. А как насчёт того, чтобы найти ошибку в монолитном ядре? По этому поводу приведу одну интересную цитату: «Второй человек в Linux, Andrew Morton, горько сетует по поводу состояния разработки -mm ветки ядра (напомню, что именно в неё сначала добавляются экспериментальные патчи, а только потом, после тестирования, они имеют шанс попасть в основное ядро): «У меня ушло двое полных суток на то, чтобы всё это скомпилировать и загрузить на нескольких моих компьютерах. Чтобы добиться положительного результата в этом процессе, я написал около девяноста исправляющих патчей и патчей по отбрасыванию ненужного. Уже сейчас я наблюдаю несколько известных мне багов, но, полагаю, на самом деле их гораздо больше. Я должен сказать, что [такая модель разработки] больше не работает». Последний патч для ядра 2.6.23-rc6 весит почти 30 мегабайт. Говоря по-русски, это около тридцати тысяч страниц исходников (если подсчитывать оптимистично — по тысяче символов на страницу). Тут можно рассуждать очень долго. К примеру, для многих недалеких людей до сих пор отсутствие драйверов под Linux кажется злым заговором корпораций против Linux. На самом деле, всё гораздо проще. Корпорации не заинтересованы тратить сотни тысяч долларов на написание драйверов под Linux в виду колоссальной сложности данного процесса. Даже если драйвер и будет написан, то для его поддержки неминуемо потребуется целая команда разработчиков просто потому, что ядро Linux не имеет стабильного ABI (Application Binary Interface). А это означает, что с каждым выходом нового ядра будет необходима переделка под него драйвера. Нужно сказать, что в Linux ущербно не только ядро. Графическая и аудио подсистемы тоже реализованы просто ужасно. Я не предлагаю всем переходить на Minix просто потому, что она преследует другие (академические) цели и служит для обучения проектировки систем, драйверов и интерфейсов. Также, идеальное соблюдение микроядерной архитектуры для домашних Операционных Систем нецелесообразно, но это, безусловно, большой шаг вперед. В то же время, в Windows используется гибридное ядро, которое отличается от микроядра тем, что подгружает не модули, а слои.