Кен Томпсон: живая легенда

image


Людей, внесших значительный вклад в развитие мировой IT-индустрии и вошедших благодаря этому в историю, можно пересчитать по пальцам. Один из них — Кеннет Лейн Томпсон, один из разработчиков Unix, операционных систем Plan 9 и Inferno, создатель языка программирования B, соавтор языка Go. Томпсон принимал участие в конструировании шахматного компьютера Belle, первой машины, достигшей уровня игры мастера с рейтингом USCF 2250. Она пять раз выигрывала чемпионат Северной Америки по компьютерным шахматам ACM и чемпионат мира по компьютерным шахматам 1980 года. В 1983 году Томпсон разделил со своим давним другом и коллегой Деннисом Ритчи премию Тьюринга, неофициально признанную «нобелевкой» в мире компьютерных наук.

Кеннет Лейн Томпсон родился 4 февраля 1943 года в американском городе Новый Орлеан, штат Луизиана. О его юных годах известно не слишком многое. Отец Кена служил в военно-морском флоте, поэтому семья часто переезжала из одного города в другой, и мальчику приходилось регулярно менять школы. «Я учился в разных школах, каждый год в новой», — вспоминал потом Томпсон, — «попадались и неплохие, и откровенно паршивые. Иногда мне приходилось осваивать двухлетнюю программу за год, а весь следующий год я просто бездельничал. Поэтому мое начальное математическое образование можно назвать просто ужасным».

Так продолжалось до седьмого класса, в котором Томпсону показали основы двоичной арифметики. И эта тема внезапно увлекла Кена: он решил изучить действия с числами в двоичной системе глубже, чем это предусматривала школьная программа. Кен прочитал несколько книг по математике, освоил различные типы двоичных вычислений и научился решать задачи, значительно выходившие за рамки учебного курса. Позже он вспоминал, что, будучи школьником, научился пользоваться десятичным арифметическим устройством наподобие счет — скорее всего, Томсон имел в виду Счислитель Куммера. Вместо костяшек там имелся специальный ползунок, указывавший на цифры от 0 до 9. Перемещать ползунок нужно было с помощью стилуса, операция сложения выполнялась с помощью верхнего ряда цифр, вычитания — нижнего. При переполнении разряда следовало переместить ползунок в следующей колонке.

imageЭто устройство настолько впечатлило Кена, что он разработал на его основе приспособление для вычислений в своей любимой двоичной системе. Позже, уже в выпускном классе, Томпсон увлекся электроникой — принялся собирать радиоприемники, паял осцилляторы, усилители и терменвоксы. В то время у него появилась идея собрать аналоговое вычислительное устройство на основе имевшихся в его распоряжении радиодеталей, но этой мечте не суждено было сбыться: поступив на факультет электротехники и информатики в Калифорнийский университет в Беркли, Кен впервые познакомился с настоящими компьютерами. Это знакомство стало для него любовью с первого взгляда — и на всю жизнь.

Получив степень бакалавра в 1965-м и магистра — в 1966-м году, Кеннет Томпсон устроился программистом в компанию Bell Labs. Сам он не стремился занять эту должность. В одном из интервью Кен вспоминал: «один из моих институтских преподавателей буквально натравил на меня рекрутёра из Bell Labs. Тот назначил мне встречу, но я не пришел на нее, потому что проспал. Тогда он заявился ко мне домой и очень настаивал, чтобы я прошел собеседование, даже предложил оплатить мою поездку на Восточное побережье. Тогда я сказал: окей, парень, вот что я отвечу. Мне не нужна эта работа. Но бесплатная поездка — это круто, у меня есть там друзья. К ним и поеду». Томпсон успешно прошел собеседование в Bell Labs, затем взял машину напрокат и навестил старых институтских приятелей, разъехавшихся после окончания Беркли по разным городам Восточного побережья. Вскоре он получил сообщение от Bell Labs о том, что принят на работу для развития одного очень интересного и перспективного проекта.

Multics и Unix

Его основным инструментом на новом месте стал компьютер GE-645 производства General Electric. Для этой машины нужна была операционная система, ее разработкой занялась Bell Labs совместно с Массачусетским технологическим институтом (MIT) и компанией General Electric на деньги Агентства перспективных разработок и исследований ARPA, того самого, благодаря которому в будущем появился на свет интернет. ОС получила название Multics, к работе над ней и подключился Кен Томпсон вместе с другим сотрудником Bell — Деннисом Ритчи. Система основывалась на концепции одноуровневой памяти и использовала принцип разделения времени исполнения программ, программы для нее писались на языке PL/1. В 1969 году, экспериментируя с Multics, Томпсон написал графическую игру Space Travel, в которой игрок управляет космическим кораблем, летящим вокруг двухмерной масштабной модели Солнечной системы. В ходе игры он может приземляться на различные планеты и их спутники, меняя импульс тяги двигателя и учитывая силы гравитации, которые действуют на корабль.

image


В том же 1969 году компания Bell Labs свернула свое участие в проекте Multics, но Томпсон решил не бросать свою затею: он переписал Space Travel на Фортране под операционную систему GECOS, работавшую на GE-645, но ни сам компьютер, ни ОС не подходили для этой задачи. Тогда Томпсон оккупировал простаивающий без дела PDP-7 производства Digital Equipment Corporation. Это была относительно недорогая для своего времени машина — она стоила 72 тысячи долларов, и к тому же она считалась компактной: вместе с периферией оборудование компьютера занимало всего лишь несколько шкафов.

image


Игра писалась на кросс-ассемблере на GE-645, компилировалась, а затем переносилась на PDP-7 с помощью перфоленты. Процесс оказался настолько сложным и утомительным, что Кен Томпсон взялся писать новую операционную систему для PDP-7, чтобы упростить эту задачу. Правда, на сей раз он поставил перед собой более амбициозную цель: снизить зависимость ОС от «железа» и облегчить ее переносимость на другие аппаратные платформы.

Томпсон и его коллега Ритчи написали прототип иерархической файловой системы, конвейеры для межпроцессорного взаимодействия, подсистему разделения потоков и интерпретатор командной строки. Новую систему назвали Unics по аналогии с Multics, но в 1970 году присоединившийся к команде разработчиков Брайан Керниган предложил изменить название ОС на Unix, чтобы оно меньше походило на имена других проектов. В своих воспоминаниях Томпсон писал:»В первых версиях Unix я по большому счету экспериментировал с некоторыми концепциями Multics на PDP-7 после того, как этот проект был закрыт. Я работал с такой маленькой командой, какую вы только можете себе представить — она состояла из Денниса Ритчи и Дуга Макилроя. Сейчас это может показаться странным, но в те времена операционные системы были очень компактными — ядро занимало всего несколько килобайт, у ОС не было графического интерфейса. По одной неделе у нас ушло на разработку ядра, файловой системы, редактора кода и компилятора. К концу первого месяца у нас уже имелся вполне работоспособный прототип ОС».

Язык B

Проводя часы за написанием ассемблерного кода на PDP-7, Кен Томпсон пришел к выводу, что для ускорения разработки и отладки ему необходим язык высокого уровня. Фортран для этого не подходил в силу свойственных ему ограничений, и Томпсон взялся за создание собственного языка, а также компилятора к нему. В честь своей жены Бонни он назвал новый язык B (Би).

В ходе этой работы Томпсон опирался на BCPL, процедурный, императивный и структурированный язык программирования, позволяющий писать компиляторы для других языков. Разработанные на BCPL компиляторы могут быть достаточно компактными, кроме того, исходный компилятор, написанный на BCPL, легко переносится на другие платформы. Этот компилятор сначала переводит код в промежуточное представление (intermediate representation (IR)), а уже затем второй компонент компилятора преобразовывает его в исполняемый код для целевой машины. Первая версия Би была бестиповой: единственным типом данных в этом языке был формат слова в памяти базовой машины, каким бы он ни был. В зависимости от контекста слово трактовалось либо как целое число, либо как адрес памяти.

Когда Bell Labs приобрела компьютеры PDP-11, стала важной поддержка символьных данных, и бестиповая природа языка стала его существенным недостатком. Томсон и Ритчи разработали расширенную версию языка, которая поддерживала новые внутренние и определяемые пользователем типы данных. Сам по себе язык Би не нашел широкого распространения, хотя на нем была написана часть системных компонентов в ранних версиях Unix, но он послужил основой для языка Си, ставшего в 70-х одним из самых популярных языков программирования. Сам Томпсон впоследствии описывал эту историю так:»В какой-то момент я получил от Мартина Ричардса из Массачусетского технологического института BCPL и немного переработал его, но на самом деле получился иной язык, который я назвал Би. Затем Деннис Ритчи добавил к нему типы данных и назвал его Си в честь своего сына Corey (Кори)». В 1973 году Ритчи и Томпсон полностью переписали ядро Unix на Си, в результате чего ОС стала по-настоящему портируемой и обрела возможность работать на различных аппаратных платформах.

Дальнейшая судьба Unix описана во многих источниках: Томпсон переписал операционную систему на ассемблере PDP-11, и она стала использоваться во многих внутренних проектах Bell Labs — для сбора отчетов о неисправностях в телефонных линиях, для учета подключения кабелей, конфигурация которых непрерывно менялась. Unix понемногу обрастал приложениями, эти приложения требовали поддержки со стороны операционной системы, поэтому в Bell создали специальный отдел под названием Unix Support Group (USL). Со временем он превратился в коммерческое подразделение компании AT&T, занимавшийся развитием операционной системы. Агентство ARPA (Advanced Research Projects Agency) приняло Unix версии 6 в качестве базовой платформы для своей сети ARPANet, ставшей впоследствии основой интернета. Под нее был доработан стек протоколов TCP/IP, в результате чего различные компьютеры под управлением Unix смогли обмениваться информацией по сети. Это послужило началом роста популярности Unix и его версий во всем мире.

Компьютер Belle и Plan 9

Игрой в шахматы Кен Томпсон увлекался с самого детства. Летом 1972 года он занялся разработкой шахматной программы для Unix и компьютера PDP-11, на котором работал в Bell Labs. В том же 1972 году программа Томпсона приняла участие в открытом чемпионате США по шахматам в качестве одного из игроков, но не сумела одержать победу. Томпсон начал совершенствовать своё творение, добавляя в него новые математические алгоритмы. Так, вторая версия программы использовала методику поиска спокойствия (quiescence search), применяемую в некоторых игровых программах, позже добавились таблицы транспонирования (таблицы позиций фигур), которые представляли собой кэш ранее просмотренных позиций и связанных с ними оценок в дереве игры, сгенерированном шахматной программой. Вскоре к разработке присоединился еще один сотрудник Bell Labs — Джо Кондон, который предложил построить для программы Томпсона отдельный компьютер.

image


Эта машина, получившая название Belle (в честь лаборатории, в стенах которой она появилась на свет), была собрана в корпусе PDP-11. Belle пять раз выигрывала чемпионат Северной Америки по компьютерным шахматам ACM и чемпионат мира по компьютерным шахматам 1980 года, а также первой в истории достигла уровня игры мастера с рейтингом USCF 2250. В своей последней версии Belle использовала в качестве аппаратной основы модификацию основной платы PDP-11 под названием LSI-11, более дешевую, но в то же время достаточно мощную для выполнения всех необходимых в ходе шахматной партии математических операций. Сейчас этот легендарный компьютер выставлен в экспозиции Смитсоновского института.

В середине восьмидесятых годов компания Bell Labs начала разработку распределённой операционной системы Plan 9 в составе той же группы, которая изначально занималась разработкой Unix. Помимо Кена Томпсона и Денниса Ритчи в команду разработчиков вошли Роб Пайк, Дэйв Пресотто и Фил Уинтерботтом. Plan 9 должен был заменить Unix в качестве основной платформы в Bell Labs. Название проекта позаимствовали из низкобюджетного фильма ужасов «План-9 из открытого космоса» Эдварда Вуда-младшего. Эта кинолента в своё время получила антипремию «Золотая индюшка» и была названа критиками худшей голливудской кинолентой всех времён. Возможно, в случае с операционкой от Bell сработал известный принцип «как корабль назовёшь, так он и поплывёт». По крайней мере, у Plan 9 пока еще не получилось завоевать такую же всемирную популярность, как у другого детища Томпсона — Unix.

В основу новой операционной системы легла идеология Unix «всё есть файл», также она унаследовала иерархическую файловую систему, но при этом ОС изначально была ориентирована на рабочие станции и встраиваемые устройства. Основным отличием Plan 9 от других системных платформ является то, что пользователь получает доступ не к ресурсам конкретного компьютера, а к некой вычислительной среде, пространство которой физически может располагаться на удалённом сервере или в локальной сети. Позже схожий принцип будет реализован в современных облачных средах. Например, устройство /dev/mouse в идеологии Plan 9 — это мышь на компьютере, с которого вызывается процесс приложения, использующего это устройство. ОС поддерживала множество сетевых протоколов, файловые серверы в качестве сетевых хранилищ данных, а также графический интерфейс Rio.

image


Со временем Bell прекратила разработку, и развитием ОС занялась владеющая активами Bell компания Lucent Technologies. На основе кодовой базы Plan 9 попытались разработать ОС Inferno, которая должна была составить конкуренцию платформе от Sun Microsystems со встроенной поддержкой Java, но этот проект тоже не сумел добиться каких-либо значительных успехов на рынке. В 2000 году исходники Plan 9 были опубликованы под открытой лицензией. Окончательный официальный релиз этой системы состоялся в начале 2015 года.

Google и Go

В конце 2000 года, спустя 34 года после своего трудоустройства, Кен Томпсон покинул Bell Labs и перешел в компанию Entrisphere, а затем стал сотрудником Google, где вошел в группу разработчиков языка Go. В эту же команду вошел Роберт Пайк, с которым Томпсон работал в Bell Labs над проектом операционной системы Plan 9, а также Роберт Гриземер, создавший для Google собственный интерпретатор JavaScript. По воспоминаниям Кэна Томпсона, основной причиной, побудивший его заняться разработкой языка Go, стало желание «вернуть в программирование удовольствие и продуктивность».

Одно из главных увлечений Кена Томпсона — коллекционирование музыкальных записей. Еще до появления стандарта MP3 в Bell Labs был разработан алгоритм сжатия аудио PAC (Perceptual Audio Coding), который и использовал Томпсон при создании своей коллекции. Сейчас она насчитывает более 20 тысяч записей, для управления и катологизации которых он написал специальную программу, позволяющую выбирать треки по жанру, исполнителям, годам и неделям. Сам Томпсон писал, что не может обнародовать свою коллекцию из-за ограничений, связанных с авторскими правами, поскольку собранная им музыка может использоваться только в личных или исследовательских целях. Кроме того, Кен Томпсон — пилот-любитель, он часто поднимается в небо на небольших частных самолетах и даже посещал Россию, чтобы полетать на истребителе «МиГ-29».

image

Влияние Кена Томпсона на развитие IT-технологий трудно переоценить. Он является создателем одной из самых популярных операционных систем в мире, послуживший фундаментом для развития целого семейства системных платформ. Во многом благодаря ему возник язык программирования Си, а также он оказал значительное влияние на развитие языка Go, который сейчас активно используется в разработке программ и поддерживается множеством операционных систем. Кен женат, воспитывает сына. Если верить интервью, которое он дал 2009 году, в настоящее время Кен Томпсон активно использует операционные системы на базе Linux.

yum0upvqpmb1rcchboht0xncbsw.png

Источники:
https://en.wikipedia.org/wiki/Ken_Thompson
https://www.thefamouspeople.com/profiles/ken-thompson-15474.php
https://amturing.acm.org/award_winners/thompson_4588371.cfm
https://www.britannica.com/biography/Kenneth-Lane-Thompson
https://www.chessprogramming.org/Ken_Thompson
https://www.thecrazyprogrammer.com/2023/01/ken-thompson-biography.html
https://computerhistory.org/profile/ken-thompson/
https://www.computer-museum.ru/articles/galglory_inostranci/2867/
https://en.wikipedia.org/wiki/B_(programming_language)
https://en.wikipedia.org/wiki/Belle_(chess_machine)
https://gunkies.org/wiki/LSI-11
https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs

© Habrahabr.ru