Первая часть: habrahabr.ru/post/194696/
Вторая часть: habrahabr.ru/post/196276/
Сегодня будет много текста и мало скриншотов, потому что речь пойдет в основном о не взлетевших проектах и глубоких потрохах ОС
Новая надежда
Windows NT 3.1
Microsoft Windows ветки 3.x быстро получили большое распространение, сразу после выхода в 1990 году. Система нового поколения под кодовым названием “Chickago” планировалась к 1993 году, но вышла под именем Windows 95 понятно когда. Одновременно с этим в 1993 году вышла Windows NT — продвинутая ОС для клиент-серверных применений. Из особенностей можно отметить API Win32, вытесняющую многозадачность с планировщиком, поддержку сети, подсистемы совместимости с OS/2 и POSIX, виртуальные машины для DOS и старых 16-битных приложений Windows, новую файловую систему NTFS и поддержку мультипроцессорности.
От Apple явно ожидался ответ, особенно в преддверии выхода Windows 95.
Проекты Pink и Red с этой ролью не справились. Впереди было много попыток создать новую конкурентноспособную ОС.
Star Trek
Была смелая попытка совместно с Novell портировать Mac OS на архитектуру х86. Команда инженеров из обеих компаний очень быстро смогла сделать весьма многообещающий прототип. Проект отменили по различным причинам: грядущий переход на PowerPC, менеджеры боялись разрушения бизнес-модели Apple, неуверенность в поставщиках и так далее. Много лет спустя Darwin работает и на PowerPC, и на x86. Star Trek при загрузке показывал иконку Happy Mac, а Darwin/x86 пишет «Welcome to Macintosh».
Happy mac
После выхода iPhone в список добавился еще и ARM. Darwin — это опен-сорс UNIX, который выпускается Apple и очень примерно представляет собой Mac OS X без интерфейса и части библиотек — прим. перев.
Raptor
Raptor многое унаследовал от проекта Red. Он не привязывался к конкретной архитектуре процессора и предполагал разработку микроядра нового поколения. После отмены Star Trek его наработки планировалось включить в Raptor. В свою очередь, Raptor тоже прожил недолго из-за урезания бюджета, пессимизма сотрудников и других причин.
NuKernel
Так назвали проект разработки современного ядра, которое не потребовалось бы переписывать хотя бы в ближайшее время.
TalOS
Taligent — компания, основанная Apple и IBM в начале 1992 года для продолжения работ над проектом Pink. Pink изначально планировали как объектно-ориентированную ОС, но вместо этого получилась объектно-ориентированная кросс-платформенная среда CommonPoint. Она могла работать на AIX, HP-UX, OS/2 и Windows 95/NT. Поддержку NuKernel поддерживали, но не получилось. Taligent Object Services (TalOS) — это набор сервисов на ядре Mach 3.0. В планах было создать расширямую, портируемую, нетребовательную к ресурсам операционную систему.
ООП в TalOS было везде, от ядра до интерфейса. Модули TalOS назывались фреймворками. Были фреймворки для интерфейса, текста, документов, графики, мультимедиа, шрифтов, печати и низкоуровневых вещей типа драйверов и сетевых протоколов. Такая идеология в сочетании со специфичным инструментарием разработки позволила перенести нагрузку с программистов на системных инженеров.
Следует заметить, что в то время были системы с объектно-ориентированными фреймворками приложений, например NEXTSTEP. Но все равно, разработчику надо было организовать взаимодействие своих объектов с библиотеками нижнего уровня, системными вызовами Unix и Display PostScript. А все они были процедурными. Taligent был объектно-ориентированным сверху донизу. Приложения CommonPoint предполагалось писать без использования API операционной системы вообще.
В 1995 году Taligent перешел под полный контроль IBM. Проект Pink так и не стал следующей ОС Apple.
Copland
В начале 1994 года Apple анонсирует новую версию ОС, Mac OS 8, и обещает внедрить туда нажитый за десятилетие опыт и подвинуть Windows с трона. Кодовое имя проекта — Copland. Работа над ним началась незадолго до того. Примерные планы:
- Окончательно переехать на RISC-архитектуру и окончательно портировать систему на PowerPC
- Усовершенствовать технологии OpenDOC QuickDraw GX, ColorSync, QuickDraw 3D, PowerTalk и PowerShare
- Сделать систему многопользовательской, но при этом сохранить простоту интерфейса.
- Улучшить взаимодействие с DOS и Windows
- Сделать самую лучшую поддержку сети
- Внедрить средства автоматизации широкого круга задач (что-то типа Visual Basic? — прим. перев.)
- Разрешить лицензирование и разработку клонов Mac OS
Для этого надо было внедрить такие компоненты:
- Слой абстракции от железа (HAL). Это поможет создавать совместимые системы
- Микроядро NuKernel
- Поддержку мультипроцессорных систем и вытесняющей многозадачности
- Продвинутую виртуальная память и защита памяти
- Гибкий механизм расширения системы
- Вынесение важных сервисов типа ввода-вывода, сети и файловых систем из ядра
- Поддержку низкоуровневых сетевых служб, например X/Open Transport Interface (OTI), System V STREAMS, Data Link Provider Interface (DLPI)
Работа над Copland ускорилась в начале 90-х, и уже через несколько лет все ждали чуда. Но проект буксовал. Выпустили несколько сырых наборов для разработки драйверов (Driver Development Kit, DDK), но ожидаемый в 1996 году релиз так и не состоялся. В ходе разработки тихо похерили защиту памяти. Джил Амелио (CEO Apple в те годы) сказал, что Copland это набор кусочков, каждый из которых разработан отдельной командой, и все ждут, что они волшебным образом срастутся в одно целое.
Проект окончательно похоронили в мае 1996 года. Амелио сказал, что некоторые особо удачные разработки войдут в следующие ОС, начиная с System 7.6. Наверное, так и вышло. Как минимум, ее переименовали в Mac OS 7.6.
Gershwin
После позорного провала Copland проблема обновления ОС стала еще острее. Ненадолго всплыл проект Gershwin. Из его особенностей можно вспомнить разве что весьма условную поддержку виртуальной памяти. Вполне вероятно, что это была только идея проекта, и над ним вообще никто не работал.
BeOS
В Apple некоторое время обсуждали партнерство с Microsoft для создания новой ОС на базе Windows NT. Еще рассматривали Sun Solaris и BeOS. С Be все почти получилось. Be основал Жан-Луи Гассе, ранее работавший на высокой должности в Apple. Он возглавил команду толковых инженеров, которые разработали весьма впечатляющую операционную систему. Она поддерживала защиту памяти, вытесняющую мультизадачность, многопроцессорность, файловую систему с метаданными и платформу PowerPC наряду с х86. Мультимедиа тоже была на высоте. Но выход на рынок в целом не удался из-за многих недоработок. Например, поддержка сети, принтеров и набор приложений были не особо обширными.
Гассе был уверен в этой сделке, и запросил более 500 мегабаксов. Общие инвестиции в Be на то время были на уровне 20 миллионов, Apple предложили сначала 50, а потом подняли ставку до 125. Be спустилась до 300, но сделка так и не состоялась. В последнем порыве Apple предлагает 200. Жадность победила. Гассе почти согласился, но потом запросил 275 и не получил ничего.
Где-то рядом был более коммерчески успешный NeXT. Его OPENSTEP худо-бедно продавался на корпоративном рынке. Стив Джобс, основатель, явно что-то знал, и утверждал, что OPENSTEP опережает всех конкурентов на много лет.
План A
NeXT не ломался. Apple поглощает его в феврале 1997 года за 400 миллионов долларов. Амелио сказал, что они выбрали план А вместо плана Би.
Поколение NeXT
Стива Джобса выгнали из Apple 31 мая 1985 года. Он запускает стартап и перетягивает туда еще 5 своих бывших сотрудников. Они хотели создать совершенный компьютер для университетов и лабораторий. Незадолго до этого Джобс общался с нобелевским лауреатом по биологии Полом Бергом. Берг одобрил эту идею. Apple в целом была заинтересована вложиться в этот проект, но злость застилала глаза. Были и судебные разборки, но они завершились мирно. Стартап назвали NeXT Computer, Inc.
Начало было вполне успешным. Джобс вложил 7 миллионов из собственного кармана. Были и другие инвестиции, например 20М от Росса Перо или 100М от Canon. В NeXT смогли создать компьютер, идеальный по форме и содержанию. Даже материнская плата была красивой. Магниевый кубический корпус был покрашен в черный матовый цвет. Даже стойку монитора сделали с любовью. На борту был звуковой чип, который поддерживал стерео с приличным качеством. Эти компьютеры выпускались на собственном заводе.
NEXTSTEP
Джобс представил NeXT cube 12 октября 1988 года в Сан-Франциско. Операционная система называлась NEXTSTEP и работала на ядре Mach 2.0 и окружении 4.3BSD. Ядро было доработано и вобрало в себя как специфичные для NeXT особенности, так и обратно портированные функции из новых версий Mach. Оконный сервер был основан на Display Postscript, помеси языка описания страниц и оконной системы. Нечто подобное было у Sun и называлось NeWS.
Основным языком программирования был Objective-C, для разработки интерфейса использовали Interface Builder. Для облегчения труда программистов поставлялись библиотеки-”кИты”, например Application Kit, Music Kit, и Sound Kit.
На момент выхода Куба NEXTSTEP был в версии 0.8. Релиз 1.0 состоялся только через год.
NEXTSTEP 2.0 вышел ровно через год после 1.0. В этой версии добавили поддержку CD-ROM, цветных мониторов, сетевой файловой системы NFS, проверку правописания на лету, подгружаемые драйвера устройств, и так далее.
Осенью 1990 года Тим Бернерс-Ли в ЦЕРНе на компьютере NeXT создал первый браузер, с WYSIWYG и кнопкой “Запостить”. Его сотрудник Роберт Кайо сказал, что программу создали всего за несколько месяцев, благодаря продуманной системе разработки для NEXTSTEP.
В 1992 году состоялась выставка NeXTWORLD Expo. Там показали NEXTSTEP 486 стоимостью 995 долларов, версию для понятно какой платформы.
Последняя версия NEXTSTEP 3.3 вышла в феврале 1995 года. К этому времени уже были мощнейшие средства разработки и множество библиотек для интерфейсов пользователя, баз данных, распределенных объектов, мультимедиа, сетей и т.д. Для разработки драйверов был объектно-ориентированный тулкит Driver Kit. NEXTSTEP работал на платформах Motorola 68k, x86, PA-RISC и SPARC. Поддерживались fat binaries, которые работали на любой поддерживаемой платформе.
Хотя NEXTSTEP была крутой, а железо NeXT стильным, они не выжили. Зимой 1993 года NeXT отказывается от производства собственных компьютеров и сосредотачивается на NEXTSTEP для x86.
Совместно с Sun Microsystems NeXT выпускает спецификации OpenStep, открытого набора API и фреймворков для разработки объектно-ориентированных ОС поверх любого стороннего ядра. Из коробки поддерживались SunOS, HP-UX и Windows NT. Собственная реализация на базе NEXTSTEP вышла в июле 1996 года под названием OPENSTEP 4.0. Вскоре появились обновления 4.1 и 4.2. OpenStep API и OPENSTEP особо не помогли NeXT. Основным продуктом стал WebObjects, фреймворк для разработки веб-приложений. Он перешел Apple при слиянии компаний и достаточно широко используется и по сей день.
Objective-C
Objective-C — это объектно-ориентированный язык, разработанный Брэдом Коксом и Томом Лавом в начале 80-х. Это объектная надстройка над чистым С, с динамическим связыванием и обменом сообщениями по принципу Smalltalk. Этот язык проще в изучении и по функциональности, чем С++. Например, не поддерживаются множественное наследование и перегрузка операторов. Кокс и Лав основали StepStone Corporation и лицензировали язык и компилятор NeXT. В 1995 году NeXT получает все права на интеллектуальную собственность StepStone, которая имеет отношение к Objective-C. Компилятор Objective-C в Mac OS X основан на модифицированной версии GCC.
Числа Маха
В комплекте с операционной системой Apple досталось и ядро Mach. Кратко посмотрим на его историю.
Rochester's Intelligent Gateway
Группа исследователей в университете Рочестера в 1975 году начала разработку продвинутого шлюза RIG (Rochester's Intelligent Gateway). Он был нужен для предоставления единообразного доступа к множеству локальных и удаленных вычислительных ресурсов. Локальными ресурсами могли быть диски, ленты, принтеры, плоттеры, компьютеры целиком, а удаленными — узлы ARPANET или другой сети. Операционная система RIG называлась Aleph и работала на миникомпьютере Data General Eclipse.
Алеф — первая буква таки понятно какого алфавита
Ядро Aleph строилось вокруг межпроцессного взаимодействия IPC. Процессы могли посылать друг другу сообщения с адресацией по номеру процесса и адресу порта. Порт представлял собой очередь сообщений для определенного процесса внутри ядра. У процесса могло быть несколько портов, которые бы слушали эфир в ожидании сообщения. Процесс мог тихо получать копии сообщений, адресованные другому процессу или вмешиваться в обмен и перехватывать все его сообщения, входящие и исходящие.
RIG загнулся несколько лет спустя из-за фундаментальных ограничений. Сообщения могли быть не больше 2 Кб из-за ограниченного адресного пространства. Это привело к неэффективности IPC. Порты были вообще никак не защищены, и доступ к ним никак не контролировался. Не было способов контроля сбоев, и так далее.
Accent
Ричард Рашид, один из разработчиков RIG, в 1979 году перебрался в университет Карнеги-Меллон (CMU). Там он присоединился к проекту ядра сетевой ОС Accent. Подобно RIG, он был основан на IPC, но имел меньше недостатков. Была защита портов и виртуальная память. Можно было пересылать сообщения процессам удаленного компьютера. Accent создавали для двух проектов распределенных вычислений: Spice для персонального использования и устойчивой к сбоям сети датчиков DSN. Название получилось из-за игры слов. Accent — это приправа производства Accent Inc., состоящая только из глутамата натрия, он же monosodium glutamate, MSG. А программисты очень любят обозначать сообщения как msg.
За несколько лет разработки никакого вменяемого результата так и не получилось. Пора было обновлять железо, добавлять поддержку многопроцессорности и портируемость. Были и проблемы с совместимостью с Unix.
Mach
Продолжение Accent назвали Mach. К времени выхода Mach UNIX развивался уже полтора десятка лет. Разработчики Mach осознавали важность и практичность UNIX, но отмечали, что изначальная простота куда-то делась. Ричард Рашид говорил, что ядро превратилось в свалку всего чего только можно.
Mach разрабатывали в пику громоздкости UNIX. Цели были таковы:
- Полная поддержка мультипроцессорных систем
- Поддержка всевозможных особенностей современных архитектур. Например, различных моделей доступа к памяти — NUMA и NORMA
- Прозрачная поддержка распределенных вычислений
- Максимально уменьшить размер ядра и упростить API, но при этом не потерять функциональность
- Полная совместимость с UNIX
- Разрешить ограничения Accent
Mach начали строить на базе кода 4.3BSD. Как примеры использовали и RIG с Accent. Детали реализации виртуальной памяти подсмотрели в Tenex Operating System производства DEC. По мере развития проекта код BSD заменили на самописный, ну и конечно добавляли новые компоненты.
Ричард Рашид вспоминает, что после множества неудачных вариантов приняли название MUCK, Multiprocessor Universal Communication Kernel. Один из его сотрудников, Дарио Джузе, произносил это с итальянским акцентом как Mach — Мак. Так и прижилось.
После выхода Mach в 1986 году его превозносили как “… Новое ядро для разработки UNIX ”. “Новое ядро” на английском весьма созвучно с NuKernel. Ядро шло к некоторому успеху, хотя и не все это заметили.
Ядро Mach строилось на четырех базовых принципах:
- Задача — это контейнер для ресурсов (памяти, портов, процессоров), принадлежащих одному или нескольким потокам
- Базовой единицей выполнения является поток. Они выполняются в среде исполнения, предоставленной задачей. Каждый поток имеет свой набор регистров, но память у них разделяемая и принадлежит задаче
- Порт аналогичен таковому в Accent. Это внутриядерная очередь сообщений для взаимодействия процессов в Mach.
- Сообщение — это набор данных, которые поток может отправить в порт другого потока.
Другой важной абстракцией был объект памяти. Это контейнер для данных любого вида, включая файлы, который отображается в адресное пространство задачи. Mach не мог работать без блока управления памятью, и предоставлял удобный интерфейс pmap для работы с ним. Управление памятью в UNIX предполагало непрерывное адресное пространство, с кучей и стеком, растущими навстречу друг другу. А в Mach система виртуальной памяти разрабатывалась с прицелом на огромные и разреженные виртуальные адресные пространства. Широко поддерживалось разделение операций чтения и записи и копирование при записи для ускорения работы. Абстракция памяти через объекты позволяла использовать внешнюю память, которая могла быть даже на другом компьютере. Из прочих приятных плюшек можно вспомнить относительно свободную лицензию.
Из-за микроядерной концепции само ядро не умеет предоставлять программам ввод-вывод, сеть или доступ к файловым системам. Это все перекладывается на операционную систему. Предполагалось, что так будет проще. Сама по себе операционная система представляет собой одну из задач поверх ядра Mach. В версиях 2.0 и 2.5 это не соблюдалось — BSD и Mach выполнялись в одном адресном пространстве. На основе версии 2.5 Open Software Foundation выпускает ядро для своей системы OSF/1. Еще можно вспомнить применения Mach в Mt. Xinu, NEXTSTEP, OPENSTEP, Omron LUNA/88k, Multimax (Encore) и много где еще.
Mach 3 начали разрабатывать в CMU. а продолжили в OSF. Это была первая истинно микроядерная версия, в которой BSD выполнялось как задача. Ядро Mach было чем-то вроде гипервизора, и на него портировали много операционных систем. Некоторые можно было запускать вообще в режиме пользователя.
Симметричная мульти-серверная операционная система Mach-US предоставляла системные сервисы посредством серверов и библиотек, загружаемых каждым процессом. К сервисам относились межпроцессное взаимодействие, управление процессами, взаимодействие с сетью и локальными устройствами. Библиотеки могли перехватывать системные вызовы и эмулировать другие операционные системы. Были эмуляторы для различных версий BSD, DOS, OSF/1, SVR4, VMS, OS/2, Mac OS, HP-UX и многих других.
Прочие обновления в третьей версии:
- Поддержка реалтайма. Выгружаемое ядро и фреймворк планировщика реального времени
- Низкоуровневая поддержка устройств. Устройство представляется как порт для сообщений с поддержкой синхронного и асинхронного I/O
- Переписанная с нуля реализация IPC
- Перенаправление системных вызовов и вынос их обработки в юзерспейс
- Использование продолжений (continuations). Это служба ядра, которая позволяет процессу блокироваться при определении функции продолжения, которая будет вызываться при работе процесса (??? — прим. перев.)
Ричард Рашид ушел на должность главного по исследованиям в Microsoft, другой лидер Эви Теванян перешел в Apple главным по технологиям.
MkLinux
Apple и OSF (позже Open Group, еще позже Silicomp) начали портировать ядро Linux на железо Power Macintosh и модифицированное микроядро Mach. Получилось ядро osfmk и система под названием MkLinux. Монолитное ядро Linux работало как единственный процесс микроядра. Первый релиз на основе Linux 1.3 вышел в начале 1996 года под названием MkLinux DR1. Более поздние версии основывались на ядрах 2.0. Один из релизов вошел в Apple's Reference Release. Многие наработки по этому проекту вошли в Mac OS X.
О названиях проектов
После приобретения NeXT у Apple появилось два направления развития операционных систем: доработка Mac OS для потребительского рынка и разработка новой продвинутой серверной ОС Rhapsody на базе NeXT.
Apple использовала для проектов не только цветные названия вроде Pink и Red. Были и музыкальные. Copland и Gerswhin назвали в честь композиторов Аарона Копленда и Джорджа Гершвина. «Синяя рапсодия» — это известное произведение Гершвина.
Один вопрос. Уже в процессе перевода этой части наткнулся на уже существующий русский перевод — appleinsider.ru/istoriya-apple/istoriya-operacionnyx-sistem-apple-chast-9.html. Теперь в раздумиях — продолжать или оставить как есть
Автор: BubaVV