12 June 2008

Почему MS Windows 7 никогда не сможет стать надежной ОС

Software
Мы живём в post/информационном, глобализированном мире, где компьютеры управляют атомными станциями, военными объектами стратегического назначенияи т.д. И при этом в современных операционных системах (ОС) имеются две характеристики, делающие их ненадежными и небезопасными: они огромны и обладают очень плохой изоляцией сбоев. В ядре ОС Linux содержится более 2,5 миллионов строк кода, а в ядре Windows XP более 5 миллионов строк кода. По данным исследователей университета Carnegie-Mellon, на 1000 строк кода приходится от 5 до 15 ошибок. При таких оценках ядро Linux содержит около 15000 ошибок, а в ядре Windows XP — больше 30000 ошибок. Еще хуже то, что около 70% кода ОС занимает код драйверов устройств, в которых ошибки встречаются в 3-7 раз чаще, чем в обычном коде. Понятно, что просто невозможно найти и исправить все ошибки; более того, при исправлении ошибок часто привносятся новые.

Большой размер современных операционных систем означает, что ни один человек не может понимать систему целиком, в результате чего управление системой становится очень трудным делом. Но то же можно сказать, например, и про авианосец. Ни один отдельный человек не знает, как работает авианосец, но все его подсистемы хорошо изолированы. Проблема засоренного туалета не влияет на подсистему запуска ракет. У операционных систем отсутствует подобная изоляция компонентов. Современная операционная система содержит сотни и тысячи связанных вместе процедур, которые образуют единую бинарную программу, выполняемую в ядре. Каждая из миллионов строк кода ядра имеет возможность записи в ключевые структуры данных, используемые несвязанным с ней компонентом, что может привести к краху системы. [см.: «Эндрю Таненбаума, Джоррита Хердера и Херберта Боса «Можем ли мы сделать операционные системы надежными и безопасными»]

Windows NT:
MS Windows 7 Milestone является развитием ОС MS Windows NT. 1-я коммерческая версия Windows NT была выпущена 27 июля 1993 (скоро исполняется 15 лет). Версия сразу вышла под номером 3.1 только из-за того что к изначальному ядру ОС NT были добавлены Windows API, включая оконный интерфейс от среды MS Windows 3.1 [см.: Microsoft Windows — Материал из Википедии]
»Разработка Windows NT, начатая в ноябре 1988 г. под рабочим названием NT OS/2, велась параллельно с разработкой фирмой IBM собственной ОС, OS/2 2.0, которая окончательно вышла только в апреле 1992 г. Одновременно с этим фирма Майкрософт продолжала разрабатывать свои ОС семейства DOS и Windows, отличающиеся меньшими требованиями к ресурсам компьютера, чем IBM OS/2. После того, как была выпущена Windows 3.0 в мае 1990, Microsoft решила добавить в NT OS/2 программный интерфейс (API), совместимый с Windows API. Это решение вызвало серьёзные трения между фирмами Майкрософт и IBM, которые закончилась разрывом совместной работы. IBM стала продолжать разработку OS/2 в одиночку, а Майкрософт стала работать над системой, которая была в итоге выпущена под названием Windows NT. Хотя эта система не принесла немедленной популярности подобно DOS или Windows, Windows NT оказалась существенно более успешной, чем OS/2.
Интересно заметить, что в качестве программных интерфейсов ОС NT изначально планировались API OS/2, и затем POSIX — поддержка Windows API была добавлена в последнюю очередь. Кроме того, в качестве аппаратной платформы для NT изначально планировались Intel i860, и затем MIPS — точно так же, поддержка Intel x86 была добавлена позднее..." [см.: Windows NT — Материал из Википедии]
То, что сегодня называется Windows Vista, это NT до ужаса обвешенная всякими библиотеками API и интерфейсами придуманными в Microsoft. По информации MS в ОС Windows 2000 содержится 35 – 60 миллионов строк кода, а в Windows XP более 45 миллионов строк кода, который постоянно дорабатывается и модернизируется. Исходный код написан на языках программирования ассемблер, С и С++. Даже в самой Microsoft не совсем точно понимают, что же они разработали. Разбираться в коде очень и очень сложно. Скорее всего Microsoft Windows во всех своих версиях содержит уязвимость, которую исправить невозможно (по мнению некоторых сторонних исследователей в разных версиях подобные Абсолютные Ошибки разные). Лечить её примерно то же самое, как заделывать дыру в середине фундамента, на котором уже стоит многоэтажный дом. Безусловно Microsoft прекрасно осведомлены насчёт наличия Абсолютной ошибки, но не считают её уязвимостью.

Выходом из сложившегося тупика являются Микроядерные ОС, которые могут обрести новую жизнь благодаря потенциальной возможности обеспечивать более высокую надежность:
Надежность Микроядрных ОС происходит из разных источников. Во-первых, размер кода, выполняемого в ядре, составляет около 4000 строк, и общее число ошибок — всего около 24 (на примере микроядра ОС Minix 3). Небольшой размер ядра позволяет верифицировать его код вручную или на основе формальных методов. Особенности IPC позволяют избежать потребности управления буферами в ядре. Кроме того, для каждого процесса ограничены доступные примитивы IPC, включая адреса назначения и события, о которых происходит уведомление. Например, пользовательские процессы могут использовать только принцип рандеву и посылать сообщения только Posix-серверам. В дополнение к этому, все структуры ядра являются статическими. Все эти свойства значительно упрощают код и устраняют ошибки в ядре, связанные с переполнением буферов, «утечку памяти» (memory leak), несвоевременные прерывания и т.д. Конечно, перемещение большей части операционной системы в процессы, выполняемые в режиме пользователя, не устраняют неизбежные ошибки в драйверах и серверах, но это ограничивает их воздействие на систему в целом. Ошибочный код в ядре может испортить критичные структуры данных, записать на диск ненужные данные и т.д.; ошибочный же код в большинстве драйверов и серверов не может принести такого вреда, поскольку эти процессы строго разделены и очень ограничены в своих возможностях.
Еще одной особенностью, повышающей надежность, является использование раздельных пространств команд и данных. Даже если ошибочный код или вирус вызовут переполнение буфера и поместят чужой код в пространство данных, этот код будет невозможно выполнить путем перехода на него, поскольку ядро не запустит код, не находящийся в пространстве команд процесса (доступном только по чтению).
Среди других особенностей, способствующих повышению надежности, наиболее важным является свойство самовосстановления. Если драйвер производит запись по неверному указателю, впадает в бесконечный цикл или дурно ведет себя каким-либо другим образом, то сервер реинкарнации автоматически заменит его, часто без влияния на другие процессы.

MS Singularity:
Цитата Эндрю С. Таненбаума: «…Microsoft тоже интересуется микроядрами. Она как никто другой отчётливо понимает все проблемы сопровождения монолитных ядер. Windows NT 3.1 была нерешительной попыткой создания микроядерной системы, однако попытка эта была реализована не совсем корректно. Да и производительность ОС на оборудовании начала 90х годов также была недостаточно хороша, поэтому Microsoft на время отказалась от этой идеи. Но недавно Microsoft попыталась сделать это снова, но уже на новом оборудовании, что привело к появлению ОС Singularity. Сегодня, как я вижу, многие полагают, что если Microsoft делала это, то она явно сошла с ума. Но руководившие проектом Singularity Гален Хант (Galen Hunt) и Джим Ларус (Jim Larus) – очень умные ребята и они-то как раз хорошо понимают, какую мешанину на самом деле представляет собой ОС Windows и насколько компании Microsoft необходим совершенно новый подход для её дальнейшего развития. Даже работающие над Vista люди видят, что у них имеются серьёзные проблемы. Поэтому-то они и переносят драйверы в пространство пользователя, то есть делают именно то, что я и рекомендую.» [см.: «Вторая часть «Марлезонского балета». Дискуссия Таненбаума и Торвальдса: часть II»]
Проект Singularity разработанный в в Microsoft Research предлагает наиболее радикальный подход к разработке надежной ОС построенной на микроядре. Но к Singularity никак не возможно прикрутить Windows API и не возможно перенести Soft написанный под Windows API на эту систему, так что этот теоретический по своему уникальный проект никак не сможет помочь рядовым пользователям MS Windows:( [ см.: «Эндрю Таненбаума, Джоррита Хердера и Херберта Боса «Можем ли мы сделать операционные системы надежными и безопасными»]

Микроядро L4:
L4 построено таким образом, что на его базе можно построить практически любой API. Оно абстрагируется от конкретных алгоритмов управления памяти и прочих стратегий, но предоставляет механизмы для реализации их (стратегий) в произвольном виде. Также оно поддерживает много аппаратных платформ, имеет поддержку многопроцессорности (SMP) в ядре. Поддерживаются драйверы в user space и запуск одновременно нескольких ОС на одном микроядре. Кроме того, поддерживается создание как ОС реального времени, так и обычных ОС с разделением времени; как ОС для embedded применений, так и desktop OS; можно реализовать различные стратегии планировщика процессов (и управления памятью).
Если сравнивать Mach и L4, то микроядро Mach было очень громоздким, у него было больше сотни системных вызовов, оно содержало в себе порядка 100000 строк кода, занимало около 500 Кбайт на диске. L4 же на 1-2 порядка компактнее. Оригинальная реализация L4 содержала всего 7 системных вызовов, сложность его была порядка 10000 строк кода, на диске оно занимает примерно 100 К (формат ELF, платформа Intel; данные для L4Ka::Pistachio), а вот в памяти оно занимает всего 12 Кбайт! (По другим данным — 32 Кбайт, это зависит от версии ядра). Поэтому L4 также часто называют наноядром (nanokernel), поскольку его размер на 1-2 порядка меньше классического микроядра.
NICTA — Национального исследовательского центра информационно-коммуникационных технологий, который занимается развитием ядра L4, создал коммерческую компанию под названием Open Kernel Labs (OK Labs), для продвижения на рынке решений (в основном, встраиваемых) на базе L4. OK Labs разрабатывает собственную коммерческую реализацию NICTA::Pistachio- embedded, вместе с Wombat и Iguana. Эта собственная версия L4, Wombat и Iguana носит название OKL4. „Коммерческость“ OKL4 не отменяет свободности ее лицензии. OKL4 лицензируется под BSD лицензией и ее исходники открыты. OK Labs обещает примерно к середине 2009 года выпустить первое микроядро с математически доказанным отсутствием ошибок (formally-proven bug-free microkernel)!

Apple MacOS X:
В NICTA кроме проектов Kenge/Iguana/Wombat, существует проект под названием Darbat, или L4/Darwin. Это ни что иное как порт ядра Darwin, на котором основана MacOS X, на микроядро L4. Darbat пытается улучшить производительность Darwin за счет использования IPC L4, которое намного более производительное, чем IPC микроядра Mach, на котором основан Darwin. Также Darbat содержит порт IOKit на L4, который стремится получить выгоду от использования user-level драйверов (в Darwin многие драйвера работают в режиме ядра, а в Darbat они выносятся в userlevel). Одной из целей является поддержка немодифицированных драйверов Darwin в userspace. Darbat не стремится полностью удалить Mach из Darwin, а взамен этого получить версию MacOS X, почти без изменений работающую под L4, и использующую выгоды, которые дает L4 по сравнению с Mach.
Цитата Эндрю С. Таненбаума: «Mac OS X также является разновидностью микроядерной ОС. Изнутри она представляет собой Berkeley UNIX, функционирующий поверх модифицированной версии микроядра Mach. Однако, поскольку всё это запускается в режиме ядра (для того, чтобы выбрать всю возможную производительность), Mac OS X не является истинно микроядерной. Тем не менее, поскольку Университет Карнеги-Меллона (Carnegie Mellon University) уже много лет назад запускал Berkeley UNIX в пространстве пользователя поверх микроядра Mach, то это, вероятно, могло бы быть сделано снова, хотя и с небольшой потерей производительности, как в случае с L4Linux. В частности, существует проект Darbat по портированию кода Apple BSD (Darwin) на L4 с тем, чтобы сделать её истинно микроядерной ОС.» [см.: «Вторая часть „Марлезонского балета“. Дискуссия Таненбаума и Торвальдса: часть II»]
Говорят, что в Apple параллельно с текущей системой-наследником Mac OS X 10.6 Snow Leopard, ведется разработка, новой системы „большого скачка“. Возможно именно о ней, Джобс упомянул в интервью в 2007 году, по случаю официального выпуска „Леопарда“. В ней, судя по тщательности зачистки „Снежного барса“, будут уже „открытия“. И не простые открытия, а весьма серьезные. Учитывая одержимость Apple простотой и элегантностью решений, логично было бы предположить, что новая система (Apple OS X 11, или еще какая-нибудь), в своей основе будет построена на уникальном Микроядро L4, и будет использоваться на всей, без исключения, продукции Apple. От смартфонов iPhone до серверов. Это достаточно красиво, чтобы могло прийти в голову Стива Джобса. А превращать сумасшедшие мысли в изделия, которые имеют сумасшедший успех, у Джобса обычно получается. [см.: «Возможно, следующей будет Mac OS 10.6 „Snow Leopard“»]
И если это случиться, то Apple OS X 11 будет иметь непревзойденную надежность и универсальность!

И вывод напрашивается сам собой у MS Windows нет будущего. При современном подходе в Microsoft к разработке ОС, будущая MS Windows 7 к сожалению так и останется с 10-ми тысяч багов и с раздраженными пользователями. И я бы ни за что не стал разрабатывая большие и требующие надежности программные проекты, выбирать за базовую ОС творение компании Microsoft:(
Tags:Win7Habrmicrosoftwindowswindows 7applemac os xos xSingularityMinixL4микроядрооперационные системы
Hubs: Software
+53
10.5k 38
Comments 286