Перейти до вмісту

Історія операційних систем

Історію ОС зазвичай подають списком дат, і з нього нічого не випливає. Тут вона розкладена інакше: у кожен момент часу чогось бракувало, і система була відповіддю на цю нестачу. Коли нестача змінювалася — змінювалися й системи, а старі не зникали, а йшли туди, де їхня відповідь досі правильна.

Це додаток, а не модуль: тут немає нового механізму, який треба зрозуміти. Він потрібен, щоб покласти на місце те, що курс пояснює по частинах, — і щоб видно було, що майже все, чим ми користуємося, старше за нас.

Шість дефіцитів

Кожна епоха на карті — це не десятиліття, а відповідь на брак конкретного ресурсу. Межі між ними умовні: попередній дефіцит нікуди не зникає, просто перестає бути головним.

1955—1964бракує: машинний час
пакетна обробка
1964—1975бракує: увага процесора
мультипрограмування, поділ часу
1975—1990бракує: ціна заліза
персоналка без захисту
1990—2002бракує: сумісність і мережа
POSIX, вільні ядра, інтернет
2002—2012бракує: утилізація серверів
віртуалізація, потім контейнери
2012—бракує: ядра, батарея, довіра
паралелізм, енергія, ізоляція

Карта

Час іде згори вниз, кожна система — вертикальна лінія від появи до згасання, сусідні колонки — одна родина. Суцільна лінія походження означає спільний код, пунктирна — тільки успадковані ідеї: у Linux немає жодного рядка з Unix, а Windows NT не є нащадком VMS, хоч і написана тими самими людьми. Наведіть або виберіть систему — підсвітиться весь її рід, від пращурів до нащадків.

Наведіть курсор на систему або виберіть її з клавіатури (Tab, далі стрілки) — тут з'явиться, звідки вона взялася і що дала далі.

Карта операційних систем: 55 систем у п'яти родинах, час згори вниз від 1955 до сьогодні, зі зв'язками походження МейнфреймиМейнфреймиUnix і нащадкиUnix і нащадкиLinuxLinuxПерсональніПерсональніВбудовані йВбудовані йдослідницькідослідницькібракує: машинний часбракує: увага процесорабракує: ціна залізабракує: сумісність і мережабракує: утилізація серверівбракує: ядра, батарея, довіра1960197019801990200020102020GM-NAA I/O, 1956—1962. Перша програма, що керувала іншими програмами: сама зчитувала наступне завдання з черги, і оператор між задачами став непотрібний.GM-NAA I/OCTSS, 1961—1973. Перший працездатний поділ часу. Кільком терміналам роздають кванти процесора так часто, що кожен вважає машину своєю.CTSSAtlas Supervisor, 1962—1971. Сторінкова віртуальна пам’ять і підкачка на барабан — уперше й одразу в тому вигляді, у якому вони працюють дотепер.Atlas SupervisorOS/360, 1966—1974. Одна ОС на цілу лінійку машин замість своєї на кожну модель. Ціна — зрив термінів, з якого написали «Міфічний людино-місяць».OS/360CP/CMS, 1968—1972. Замість ділити одну ОС між користувачами, кожному видали власну віртуальну машину. Віртуалізації тут понад пів століття.CP/CMSMultics, 1969—2000. Кільця захисту, сегментація, права на файли, динамічне зв’язування. Майже все, що ми вважаємо звичайним, є вже тут — і майже все запізно.MulticsVM/370 → z/VM, 1972—дотепер. Гіпервізор у промисловій експлуатації з 1972 року. На ньому досі працюють банківські системи.VM/370 → z/VMMVS, 1974—2000. Кожному завданню — власний адресний простір. Назва так і читається: Multiple Virtual Storage.MVSVAX/VMS → OpenVMS, 1977—дотепер. Акуратна комерційна ОС від DEC. Її архітектор потім прийшов у Microsoft і побудував там ядро NT — спорідненість чути навіть у назвах підсистем.VAX/VMS → OpenVMSz/OS, 2001—дотепер. Пряме продовження OS/360 у 2020-х. Архітектура, закладена за життя перфокарт, обробляє платежі за картками сьогодні.z/OSResearch Unix, 1969—1990. Реакція на складність Multics: маленькі програми, текст як інтерфейс, усе — файл. У 1973-му ядро переписали на C, і воно поїхало на чуже залізо.Research UnixBSD, 1978—1995. Берклійська гілка. Звідси сокети, віртуальна пам’ять із підкачкою на диск і TCP/IP-стек, який потім розійшовся геть усюди.BSDXenix, 1980—1989. Unix від Microsoft, на початку 1980-х найпоширеніший Unix у світі. Компанія проміняла його на DOS і повернулася до Unix-сумісності аж у 2016-му.XenixSunOS, 1982—1994. Робоча станція, для якої мережа — штатний режим, а не додаток. NFS і mmap у сучасному вигляді родом звідси.SunOSSystem V, 1983—1995. Комерційна гілка AT&T. Розкол System V проти BSD — причина того, що досі існують два несумісні набори прапорців у ps і два стилі init.System VHP-UX, 1984—дотепер. Один із класичних комерційних Unix. Живий, але лише на власному залізі виробника.HP-UXMach, 1985—1994. Спроба винести з ядра все, що можна, лишивши пам’ять і обмін повідомленнями. Мікроядро вийшло повільним, але ідея пішла далі за код.MachAIX, 1986—дотепер. Unix від IBM. Тут у 1990-му з’явилася перша комерційна журнальована файлова система — JFS.AIXMINIX, 1987—дотепер. Навчальне мікроядро Танненбаума. Саме через його обмеження студент із Гельсінкі почав писати власне ядро.MINIXNEXTSTEP, 1989—1996. Мікроядро Mach, оточення BSD і графіка на Objective-C. Комерційно провалилася — і саме через це стала основою macOS.NEXTSTEP386BSD, 1992—1994. Перенесення BSD на дешевий 386-й. Позов AT&T заморозив його рівно на ті два роки, за які встиг вирости Linux.386BSDSolaris, 1992—дотепер. ZFS, DTrace, зони. Три речі, які решта світу відтворювала наступні п’ятнадцять років.SolarisFreeBSD, 1993—дотепер. Ядро й userland розробляються одним деревом. Тут з’явилися jail — ізоляція без віртуальної машини за тринадцять років до Docker.FreeBSDNetBSD, 1993—дотепер. Ставить за мету запускатися будь-де. Найкращий доказ, що межу «ОС — залізо» можна тримати чистою.NetBSDOpenBSD, 1996—дотепер. Форк заради безпеки. Звідси OpenSSH, а також pledge і unveil — спроба обмежити програму рівно тим, що їй справді потрібно.OpenBSDMac OS X → macOS, 2001—дотепер. Mach і BSD в одному адресному просторі ядра. Найпоширеніший сертифікований Unix на планеті — і мало хто з користувачів про це знає.Mac OS X → macOSiOS, 2007—дотепер. Те саме ядро, але кожен застосунок замкнений у пісочницю, а доступ до камери чи файлів питають у користувача. Модель прав із мейнфреймів сюди не годилася.iOSядро Linux, 1991—дотепер. Написане з нуля, без жодного рядка з Unix, — і саме тому пережило судові позови. Монолітне ядро з модулями, які завантажуються на ходу.ядро LinuxSlackware, 1993—дотепер. Найстаріший живий дистрибутив. Принципово без автоматики: збирається так, ніби менеджера пакетів іще не винайшли.SlackwareDebian, 1993—дотепер. Показав, що дистрибутив — це передусім менеджер пакетів і суспільний договір, а не набір файлів.DebianRed Hat Linux, 1994—2004. RPM і думка, що за вільне ядро можна брати гроші — за підтримку, а не за код.Red Hat LinuxSUSE, 1994—дотепер. Європейська гілка, що виросла з німецької збірки Slackware й лишилася на ринку підприємств.SUSEArch, 2002—дотепер. Rolling release і система, зібрана руками з мінімуму. Найкоротший шлях побачити, з чого дистрибутив насправді складається.ArchRHEL, 2002—дотепер. Десятирічний цикл підтримки й SELinux за замовчуванням. Те, що дає банкам підписувати на Linux свої регламенти.RHELFedora, 2003—дотепер. Полігон, де systemd, Wayland і cgroups v2 стають типовими раніше, ніж деінде.FedoraUbuntu, 2004—дотепер. Debian із передбачуваним розкладом випусків. Дистрибутив, з якого більшість починає й на якому опиняється більшість серверів.UbuntuAlpine, 2006—дотепер. musl замість glibc, BusyBox замість coreutils — образ на кілька мегабайтів. Через контейнери став одним із найпоширеніших userland у світі.AlpineAndroid, 2008—дотепер. Ядро Linux без GNU-оточення. Кожен застосунок — окремий користувач ядра: класичні права Unix використали як пісочницю.AndroidChromeOS, 2011—дотепер. Кореневий розділ лише для читання, підписане завантаження, два розділи для оновлення. Ремонтопридатність обміняли на непошкоджуваність.ChromeOSCP/M, 1974—1988. Перша ОС, що не залежала від виробника мікрокомп’ютера. Задала і формат A:, і саму ідею окремо продаваної системи для персоналки.CP/MMS-DOS, 1981—2000. Один користувач, одна програма, жодного захисту пам’яті. Будь-яка програма могла писати куди завгодно — і писала.MS-DOSMac System → Mac OS 9, 1984—2001. Графіка для всіх, але з кооперативною багатозадачністю: процесор програма віддавала сама. Одна зависла — зависли всі.Mac System → Mac OS 9Windows 1.0 → 3.11, 1985—1995. Оболонка поверх DOS, а не система. Захист і витісняльна багатозадачність з’являлися частинами й лише в захищеному режимі 386-го.Windows 1.0 → 3.11OS/2, 1987—2006. Спільна спроба IBM і Microsoft зробити нарешті захищену систему для ПК. Технічно вдала, ринково — ні.OS/2Windows NT → 11, 1993—дотепер. Гібридне ядро, написане з нуля людьми з DEC: захист пам’яті, витіснення, списки доступу. Уся сучасна Windows — це воно.Windows NT → 11Windows 95 → Me, 1995—2001. Компроміс: нова оболонка й витіснення поверх старого 16-бітного коду заради сумісності з іграми. Синій екран як побутове явище — звідси.Windows 95 → MeXerox Alto, 1973—1981. Вікна, миша, шрифти на екрані й мережа — за десять років до того, як усе це стало товаром. Xerox не продав нічого, зате показав усім.Xerox AltoQNX, 1982—дотепер. Мікроядро, що працює й досі — в автомобілях і медичних апаратах. Доказ, що ідея Mach була не хибна, а невчасна.QNXVxWorks, 1987—дотепер. Жорсткий реальний час: важлива не швидкість, а гарантія верхньої межі затримки. Літає на марсоходах.VxWorksPlan 9, 1992—2015. Ті самі автори довели «усе — файл» до кінця: мережа, вікна й процеси стали файловими системами. Ідеї розійшлися по світу, система — ні.Plan 9L4, 1993—дотепер. Мікроядро, переписане заради швидкості обміну повідомленнями. Живе в мільярдах пристроїв — усередині модемів мобільних телефонів.L4FreeRTOS, 2003—дотепер. Планувальник на кілька кілобайтів для мікроконтролера. Тут ОС — це бібліотека, з якою програму зібрано в один образ.FreeRTOSseL4, 2009—дотепер. Перше ядро з математичним доказом, що реалізація відповідає специфікації. Не «не знайшли помилок», а «їх там немає».seL4Zephyr, 2016—дотепер. Сучасна відповідь FreeRTOS: та сама ніша, але з драйверами, мережею й деревом пристроїв із коробки.ZephyrFuchsia, 2016—дотепер. Мікроядро Zircon без Unix-спадщини: ні глобального простору імен, ні POSIX за замовчуванням. Найсерйозніша спроба почати з чистого аркуша.Fuchsia

На вузькому екрані карта ширша за нього — її можна посунути вбік.

Найпомітніше на карті — не те, скільки систем померло, а те, скільки живих ліній починається до 1995 року. З усього, що працює сьогодні на серверах, телефонах і в машинах, майже нічого не спроєктовано в цьому столітті: змінювалися реалізації, а не рішення.

Що звідки взялося

Механізми, які курс розбирає по модулях, з'явилися не там, де ми з ними зустрічаємося. Колонка «модуль» веде туди, де механізм пояснено по-справжньому: додаток дає дату, курс — пояснення.

ЩоКолиДе впершеМодуль
Пакетний монітор1956GM-NAA I/O1. Що таке ОС і навіщо вона
Поділ часу1961CTSS7. Планування CPU
Сторінкова віртуальна пам’ять1962Atlas11. Пейджинг
Віртуальна машина1968CP/CMS17. Віртуалізація і контейнери
Кільця захисту й сегментація1969Multics16. Захист і безпека
Ядро мовою високого рівня1973Unix V4 на C3. Ядро і межа user/kernel
Конвеєр як спосіб композиції1973Unix6. Процеси
Сокети як інтерфейс мережі19834.2BSD13. Підсистема вводу-виводу
Мікроядро1985Mach, далі L4 (1993)3. Ядро і межа user/kernel
POSIX як писаний стандарт1988IEEE 1003.14. Unix, Linux, дистрибутиви
Журналювання файлової системи1990JFS в AIX15. Файлові системи
Потоки в стандарті1995POSIX threads8. Потоки і конкурентність
Ізоляція без віртуальної машини2000FreeBSD jail, далі cgroups (2007)17. Віртуалізація і контейнери
Формально верифіковане ядро2009seL418. Куди рухаються ОС
Програмованість ядра без модулів2014eBPF у Linux18. Куди рухаються ОС

Три лінії, що дожили

З усього розмаїття на карті до масового вжитку дійшли три родоводи, і кожен відповідав на своє питання.

Unix виграв переносимістю. Ядро мовою високого рівня в 1973-му дозволило переносити систему між машинами, і далі гілка розійшлася на BSD і System V, а через NEXTSTEP дійшла до macOS та iOS. Сучасний Mac — сертифікований Unix, а не «щось схоже».

Linux виграв ліцензією й темпом. Коду Unix у ньому немає — є Unix-інтерфейс, написаний наново, і GPL, через яку внески вигідніше віддавати вгору, ніж тримати у форку. Сьогодні це те саме ядро на суперкомп'ютері, у телефоні й у кавоварці — різні лише конфігурація й оточення.

Windows NT виграв сумісністю. Лінія DOS із Windows 9x закінчилася 2001 року, а поточна Windows — це ядро, написане з нуля в 1993-му за досвідом VMS, з захистом пам'яті й списками доступу від першої версії. Те, що на ньому досі запускаються програми 1995 року, — не випадковість, а зобов'язання, яке визначило його архітектуру.

Четверта лінія на карті не перемогла, але й не зникла: мікроядра. Mach виявився надто повільним для настільної машини, зате L4 живе в модемах мільярдів телефонів, QNX — в автомобілях, а seL4 став першим ядром із математичним доказом коректності. Куди це рухається — умодулі 18.

Джерела

  • The Unix Heritage Society — архіви коду й документації Research Unix
  • Салус, A Quarter Century of UNIX — розкол BSD і System V з перших вуст
  • Брукс, Міфічний людино-місяць — OS/360 очима її керівника
  • Multicians.org — Multics, зібраний його ж авторами
  • Torvalds, Diamond, Just for Fun — про перші роки Linux
  • Computer History Museum — дати, машини й усні історії