«Свидание» закончилось переходом Дэйва в Microsoft, и уже в октябре того же года, он собирал талантливых программистов в свою группу. «Наши цели включали переносимость, защиту от несанкционированного доступа, поддержку POSIX, совместимость, масштабируемую производительность (поддержку мультипроцессорной обработки), расширяемость и легкость интернационализации. Из всех этих целей самой сложной и оказавшей наибольшее влияние на структуру ОС была совместимость. Сотни тысяч проданных систем PDP-11 ничто по сравнению с десятками миллионов персональных компьютеров! Мало того, мы должны были обеспечить совместную поддержку трех разных 16-разрядных сред и добавить новые 32-разрядные возможности, позволяющие освободить приложения для ПК от ограничений виртуального адресного пространства, аналогичным существовавшим в PDP-11. И сверх всего мы хотели поддержать стандартную спецификацию интерфейса UNIX под названием POSIX» - вспоминал Дэйв Катлер, руководитель разработки Windows NT.
С самого начала NT ориентировалась на серверные платформы и высокопроизводительные рабочие станции. Это единственная операционная система Microsoft, существующая на компьютерах, несовместимых с семейством Intel. Переносимость и защищенность - вот главные черты корпоративной операционной системы. Поэтому, большая часть кода реализована на мобильных Си\Си++, и только низкоуровневые компоненты, напрямую взаимодействующие с оборудованием, выполнены на ассемблере. Но переносимость обошлась дорогой ценой, - комфортная работа с Windows NT требует десятков мегабайт памяти и сотен мегагерц процессора.
Но стоимость даже самого навороченного ПК в глазах корпоративных пользователей ничтожна в сравнении с предоставляемыми NT возможностями. Не будет большой ошибкой сказать, что Windows NT - та же UNIX, но построенная по новым технологиям с учетом ошибок своей предшественницы. Базовые концепции UNIX сформировались в тот далекий период, когда никакой стройной теории безопасности не существовало, и разработчики действовали скорее наугад, чем целенаправленно. В главе «Безопасность UNIX» рассказывается о проблемах отладки приложений под UNIX, - во имя безопасности разработчики оказались поставлены в очень невыгодное положение, и частенько решали задачу модификацией ядра, снимая «лишние» (с их точки зрения) защиты.
Защита не должна мешать легальным пользователям, но должна уметь противостоять любому, даже самому хитрому, злоумышленнику, пытающемуся проникнуть в систему. В Windows NT защитные механизмы полностью интегрированы в ядро, а не были добавлены в систему позже, как это произошло с UNIX.
Желая привлечь к себе как можно больше клиентов, Microsoft поставила цель - научить новую систему выполнять приложения, написанные для OS/2, 16-разрядные приложения Windows и обеспечить легкий перенос программного обеспечения UNIX. Но к началу девяностых конфликт между Microsoft и IBM достиг апогея, и Microsoft, наблюдая сокращения рынка пользователей OS/2, внезапно поменяла свои планы.
Отныне она сосредоточилась на Windows - подобных операционных системах, и одела NT в графическую оболочку, визуально неотличимую от интерфейса Windows 3.x. О целесообразности этого шага, аналитики спорят до сих пор. Недружелюбный к разработчикам графический интерфейс вызывал пренебрежение к новой системе всех поклонников UNIX. С другой стороны, он привлек начинающих пользователей и обеспечил легкий переход на Windows NT с Windows 3.x (да только много ли корпоративных клиентов в глаза видело Windows 3.x?).
Программистский интерфейс win32 API, первоначально задумывавшимся одной из подсистем, стал основным способом общения приложений с операционной системой, а стремление компании обеспечить совместимость с программами, написанным для OS/2, исчезло. Операционная система Windows NT стала в первую очередь ориентирована на работу со своими родными 32-разрядными приложениями, и не гарантировала корректного выполнения программного обеспечения, созданного для 16-разрядной Windows и MS-DOS.
Первая публичная версия Windows NT 3.1 появилась на рынке 24 мая 1993 года. Реакция разработчиков была не однозначна. Устойчивость и защищенность системы (не свободной, впрочем, от шероховатостей) противостояли умопомрачительным системным требованиям. Комфортная работа обеспечивалась при наличии, по крайней мере, 16-32 мегабайт оперативной памяти и быстрого процессора (а лучше сразу двух). В начале девяностых цены на микросхемы оперативной памяти еще оставались высокими, и далеко не все считали переход на Windows NT чем-то целесообразным.
Смущала и явная избыточность системных вызовов, - многие функции оперировали десятками аргументов, сложными структурами данных, которые были слишком трудны для запоминания. Однако разработчики осознавали - при такой агрессивной маркетинговой политике Microsoft, переход на Windows NT неизбежен, пускай и растянется на несколько лет.
Рынок «персональных пользователей» вообще проигнорировал появление Windows NT, поскольку мало кто из них располагал аппаратными ресурсами требуемой мощности. Поэтому, Microsoft задумалась о выпуске «облегченной» Windows NT, хотя бы сносно запускающейся на массовых компьютерах. В середине девяностых «массовый компьютер» подразумевал собой 80386 процессор, оснащенный 4 мегабайтами оперативной памяти.
Перед разработчиками стояла задача - втиснуть большинство функций win32 API в это скромное пространство, обеспечивая возможность запуска и работы с 32-разрядными приложениями, созданными для Windows NT. Фактически от NT новая система отличалась бы отсутствием защиты и переносимости.
Действительно, подсистема защиты один из самых «прожорливых» компонентов Windows NT. Выкинув защиту и отказавшись от переносимости, удалось бы значительно увеличить производительность системы, переписав критический код на оптимизированном ассемблере.
Но лимит в четыре мегабайта стал настоящим кошмаром для разработчиков, вынужденных изощряться всеми мыслимыми и немыслимыми способами, лишь бы втиснуться в это крошечное пространство. В результате пришлось пойти на ряд существенных упрощений, значительно ухудшивших совместимость с Windows NT.
В кругу разработчиков новая система была известна под именем «Chicago», но в продажу она поступила под официальным названием «Windows 95». Интенсивная телевизионная реклама не осталась не замеченной и 24 августа 1995 года, в первый день продаж Windows 95 в очереди на ней стояли даже люди, не имеющие ни компьютера, ни отношения к вычислительной технике вообще.
Началась массовая миграция с MS-DOS и Windows 3.x на Windows 95, и очень быстро Windows 95 стала единственной, практически безальтернативной операционной системой, установленной на миллионах компьютеров. «Если вы программируете, - то вы программируете под Windows 95» убеждали программистов пользователи и распространители программного обеспечения. Программы MS-DOS исчезли с прилавков магазинов и страниц компьютерных журналов, - мир окунулся в Windows 95, и не собирался выныривать.
Тем временем, Microsoft поглядывала на “hi-end” рынок серверов и рабочих станций, оснащенных операционной системой UNIX, упорно игнорирующих новики прогресса. Недостаточное быстродействие Windows NT препятствовало ее продвижению на рынок. Тем более, архаичный интерфейс NT 3.x не шел ни в какое сравнение с дружелюбностью Windows 95 и породил конкуренции внутри Microsoft - покупатели, приобретали Windows 95, откладывая покупку NT на потом, выжидая когда компания перенесет в нее новый интерфейс.
И вот 31 июля 1996 года вышла Windows NT 4.0. Это был тот редкий случай, когда очередная версия программного обеспечения требовала аппаратных ресурсов значительно меньше своих предшественниц. Разработчики приложили титанические усилия в оптимизации кода Windows NT, перенесли весь GUI (Графический интерфейс пользователя) в ядро и ускорили вызовы наиболее употребляемых функций.