Машина на глиняних ногах
10 / 18

Розділ 9. Літо 1969-го (Unix)

Молодий інженер у порожньому офісі

Літо 1969-го. Bell Labs у Мюррей-Гілл, Нью-Джерсі — той самий комплекс, де двадцять два роки тому Бардін і Браттейн зібрали перший транзистор. Тільки тепер у лабораторії все по-іншому: транзистори вже всюди, у бізнесі багатомільярдна індустрія напівпровідників. Bell Labs — найвідоміша промислова дослідницька установа у світі. Тут працює близько п’ятнадцяти тисяч людей. Тут ось-ось присудять Нобелівські премії за космічне фонове випромінювання, за інформаційну теорію Шеннона, за відкриття мовних центрів мозку.

А в одному з кабінетів сидить молодий інженер двадцяти шести років. Звати його Кен Томпсон. Він тільки-но закінчив працювати у проекті, який щойно з тріском провалився.

Проект називався Multics (Multiplexed Information and Computing Service). Це була грандіозна спільна розробка трьох гігантів: MIT, Bell Labs (тобто AT&T) і General Electric. Ідея — створити операційну систему майбутнього. Багатокористувацька, з розподілом часу, з захищеною пам’яттю, з ієрархічною файловою системою, з прозорою мережею. Усе, що сучасна ОС має, Multics мала вже у 1965-му на папері.

На практиці Multics виявився жахливо складним. Десять років розробки, десятки інженерів, мільйони рядків коду на мові PL/I, а система ледь працювала. Bell Labs вирішила вийти з проекту у квітні 1969-го. Кен Томпсон і його колеги залишилися без проекту.

Увесь червень і липень Томпсон не міг знайти собі місця. Його дружина Бонні, з маленьким сином Корі, поїхала у Каліфорнію відвідати її батьків — на чотири тижні. Він залишився сам у будинку у Нью-Джерсі. Спав, гуляв, нудьгував.

І тоді він вирішив: за ці чотири тижні напишу свою операційну систему. Маленьку. Просту. Не таку, як Multics. Таку, якою вона повинна була бути.

DEC PDP-7 у кутку

Першою проблемою була апаратура. Multics крутився на величезному GE-645 — комп’ютері, який займав цілу залу. Звісно, Кен Томпсон не міг отримати його у власне розпорядження для побічного експерименту.

Але в одному з кутів Bell Labs стояв списаний, нікому не потрібний міні-комп’ютер — DEC PDP-7. Виробник DEC випустив його у 1965-му як бюджетний варіант. Маленький, з 8 КБ оперативної пам’яті, без жорсткого диска (тільки магнітна стрічка), без операційної системи — просто залізо з мовою асемблера.

Томпсон зайняв PDP-7 для свого експерименту. Ніхто не заперечував — машина і так простоювала.

Він планував: - 1 тиждень — операційна система (ядро, файлова система, процеси). - 1 тиждень — командний інтерпретатор (shell). - 1 тиждень — текстовий редактор. - 1 тиждень — асемблер для PDP-7.

За чотири тижні — повноцінне середовище для розробки.

І він це зробив. Не до перфекту, але до робочого стану. Коли Бонні з Корі повернулися, у них на столі стояла перша версія операційної системи, яку незабаром назвуть Unix.

Назва, яка стала жартом

Перші кілька тижнів система не мала назви. Її називали “system” або “the new system”. Потім колега Томпсона, Браян Керніган (так, той самий, що написав книжку “The C Programming Language” разом із Денісом Рітчі), запропонував жартівливу назву.

Multics — від “Multiplexed”. Тобто “розрахована на багатьох користувачів одночасно”.

А ця нова система — спочатку могла обслуговувати тільки одного користувача. Тому Керніган запропонував: UNICS — Uniplexed Information and Computing Service. Жарт. “Кастрований Multics.”

Ім’я прижилося. Згодом написання змінили на UNIX (без літери C, бо так коротше).

Дрібниця, яка змінила все: переносність

Перша версія Unix, написана у 1969-му для PDP-7, була повністю на асемблері PDP-7. Тобто прив’язана до конкретного заліза.

У 1970-му Bell Labs закупила нову машину — PDP-11, помітно потужнішу. Томпсон з колегами захотіли перенести Unix на неї. І зіткнулися з проблемою: треба було переписати всю систему на асемблері PDP-11. Це місяці роботи. І як тільки знову буде нове залізо — знову переписувати з нуля.

Ось тут на сцену виходить Деніс Рітчі. Друг і колега Томпсона. Скромний, тихий, з густою бородою. Один з найталановитіших програмістів свого покоління. Рітчі сказав: “Давай напишемо мову програмування, яка буде досить високого рівня, щоб бути переносною — але досить низького, щоб ми могли писати на ній ОС”.

У той час уже існували мови — Fortran для математики, COBOL для бізнесу, ALGOL для академії, PL/I (та сама, на якій провалився Multics). Але всі вони були або занадто високого рівня (повільні, не давали доступу до заліза), або занадто прив’язані до конкретної машини.

Рітчі взяв за основу мову B (яку Томпсон сам написав, для PDP-7), додав типи, структури, краще керування пам’яттю. Так у 1972-му народилася мова C.

У 1973 році Томпсон і Рітчі переписали Unix на C. Усе ядро, усі утиліти, увесь shell. Це була революція. Уперше в історії операційна система була написана не на асемблері, а на мові високого рівня. Тепер, щоб перенести Unix на нове залізо, треба було лише написати компілятор C для цього заліза, а Unix компілювався автоматично.

Цей крок зробив Unix єдиною ОС у світі, яку можна швидко перенести на будь-який новий комп’ютер. У наступні п’ятнадцять років Unix буде портовано на десятки різних архітектур.

Випадок, який зробив Unix безкоштовним

У 1956 році уряд США уклав з AT&T (материнською компанією Bell Labs) антимонопольну угоду. AT&T мала монополію на телефонний зв’язок у США — тому уряд заборонив їй виходити в інші бізнеси. Зокрема, AT&T було заборонено продавати програмне забезпечення.

У 1969-му ця угода ще діяла. Тому коли всередині Bell Labs з’явилась цікава операційна система Unix, AT&T просто не могла нею торгувати. Що з нею робити?

Рішення: роздавати безкоштовно університетам. За символічну плату (вартість магнітної стрічки + накладні витрати), AT&T надавала Unix будь-якому університету, який попросить. Разом з повним вихідним кодом.

Це був абсолютно випадковий, а не ідеологічний крок. AT&T не була “open source ентузіастом” — вона просто не мала вибору. Але ефект був колосальним.

Університети по всьому світу почали отримувати Unix у 1970-х. Студенти, аспіранти, професори вивчали його код, додавали свої правки, ділилися удосконаленнями. Unix став стандартом академічного світу. Кожен майбутній комп’ютерний науковець виріс на Unix.

Особливо активним був Каліфорнійський університет у Берклі. У 1977-му аспірант Білл Джой (так, той самий, хто пізніше засновав Sun Microsystems) почав підготовку Berkeley Software Distribution (BSD) — власну версію Unix з купою власних доповнень. Через кілька років BSD стане окремою сильною гілкою Unix-світу.

Війни Unix

У 1984 році антимонопольна угода 1956 року була переглянута. AT&T розбили на сім “малих Bell” (regional Bell operating companies). Звільнившись від обмежень, AT&T тепер могла продавати ПЗ — і вирішила: ось зараз ми будемо заробляти на Unix.

Народився Unix System V — комерційний продукт AT&T. Дорогий. Закритий. Ліцензія коштувала десятки тисяч доларів.

Але в Берклі вже жила своя версія — BSD. Вона теж походила з AT&T-кодів, але мала вже багато власного. Університети не хотіли платити AT&T — вони використовували BSD.

Почалися Війни Unix (Unix Wars) 1980-х. AT&T судила Берклі за порушення авторських прав. Берклі судилася у відповідь. Sun Microsystems, IBM, HP, DEC, Apollo, Silicon Graphics — кожна компанія робила свою версію Unix (Solaris, AIX, HP-UX, Ultrix, IRIX тощо). Усі несумісні в дрібницях, всі дорогі.

У результаті — багато перешкод для розробників, багато прибутку для виробників, але мало інновацій. Кінець 1980-х — кризовий час для Unix.

Лінус, фінський студент

А потім, 25 серпня 1991 року, у новинній групі Usenet comp.os.minix з’явилось повідомлення від невідомого тоді 21-річного фінського студента:

“Hello everybody out there using minix - I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones…”

Студента звали Лінус Торвальдс. Він вчився у Гельсінкі. На дозвіллі писав власне ядро операційної системи. Як хобі.

Він не міг передбачити, що його хобі через тридцять років буде керувати: - Усіма серверами Google, Facebook, Amazon, Microsoft Azure. - Більшістю серверів усього інтернету (~95%). - Усіма Android-телефонами (а це більшість телефонів у світі). - Кожним суперкомп’ютером у топ-500. - Кожним другим вбудованим пристроєм — від роутерів до телевізорів. - Космічними кораблями SpaceX. - Біржами і банківськими системами. - Сучасним штучним інтелектом (усе тренування LLM відбувається на Linux-серверах).

Кодова база Linux — прямий нащадок того, що Кен Томпсон написав у 1969-му за чотири тижні відпустки своєї дружини.

Як Linux переміг

Лінус назвав свою систему Linux (від Linus + Unix). Сама по собі це було лише ядро — потрібні були ще тисячі утиліт, бібліотек, компіляторів. Тут на допомогу прийшов проект GNU.

GNU (рекурсивний акронім: GNU’s Not Unix) був заснований у 1983 році Річардом Столлманом як спроба зробити повністю вільну альтернативу Unix. Столлман і команда написали безліч утиліт — компілятор GCC, текстовий редактор Emacs, оболонку Bash, бібліотеку glibc, тощо. Але ядра вони так і не доробили — їхній проект Hurd вічно перебував “у розробці”.

Linux і GNU зустрілися ідеально. Ядро Linux + утиліти GNU = повноцінна операційна система. Її стали називати GNU/Linux (хоча всі кажуть просто Linux). У 1992 році з’явилися перші дистрибутиви — Slackware, потім Debian (1993), Red Hat (1995), SUSE (1996).

До початку 2000-х Linux уже захопив ринок серверів. Apache web server на Linux обслуговував більшість сайтів інтернету. До 2010-х — захопив мобільні (Android — це Linux). До 2020-х — Linux фактично виграв війну.

Microsoft Windows залишається на десктопах. macOS — теж, але macOS під капотом — Unix (BSD-нащадок через NeXTSTEP, який Стів Джобс приніс із собою, повернувшись у Apple у 1997-му).

Тобто з трьох головних настільних ОС світу — дві з трьох є Unix-нащадками. А якщо рахувати всі пристрої (телефони, сервери, IoT), то Unix-нащадки — близько 95% усього обчислювального заліза в світі.

Що з цього винести

  1. Найважливіша операційна система в історії народилася як побічний проект одного програміста за чотири тижні відпустки його дружини.
  2. Випадковий вибір AT&T (антимонопольна угода) зробив Unix вільним — і це посіяло його по університетах.
  3. Винахід мови C (1972) зробив Unix переносним — і саме переносність стала його найбільшою перевагою.
  4. У “Війнах Unix” 1980-х комерційні Unix-и вбили один одного — а вільний Linux прийшов на готову інфраструктуру.
  5. Сьогодні майже кожне обчислювальне залізо у світі працює на нащадку того, що Томпсон написав у 1969-му.
  6. Урок: прості і вільні рішення перемагають складні і комерційні, але повільно, через десятиліття.

У наступному розділі поговоримо про C — мову, яка зробила Unix переносним. І про те, як ця мова, спроектована для конкретного комп’ютера 1972 року, досі форматує те, як ми думаємо про програмування, навіть у Python, JavaScript і Go. Той PDP-11, на який орієнтувалися Рітчі і Томпсон, давно мертвий — а його привид досі живе у кожній мові програмування, якою ти користуєшся.