Абсолютно каждый современный человек пользуется функциями многозадачности на своих устройствах. И не важно, что это: смартфон, планшет или домашний компьютер. Большинство людей даже не задумываются над тем, как устроена работа системы с несколькими процессами одновременно: мы просто общаемся в сети, работаем с разными документами, слушаем музыку и смотрим сериалы, ловко перемещаясь между множеством запущенных программ. Данная история, автором которой является Энди Герцфелд, не содержит объяснения сложных тем по распределению памяти и других скучных технических руководств, но рассказывает о том, как и благодаря чему многозадачность появилась в компьютерах компании Apple.

Первым коммерческим продуктом, над которым я работал после ухода из Apple в марте 1984, был Thunderscan — достаточно дешевый сканер для Macintosh. Его создание проходило в сотрудничестве с крошечной компанией Thunderware. Работа началась в июне 1984 года, а к началу октября проект был практически завершен.

Том Петри, один из двух руководителей Thunderware (вторым был Виктор Булл, с которым я работал над термопринтером Silentype, ставшим первым проектом, созданным мной для Apple), устроил несколько презентаций для различных компьютерных журналов, чтобы снискать положительные отзывы, необходимые для продвижения продукта. 11 октября 1984 года я с Тимом отправился в офис в Хиллсборо, чтобы продемонстрировать Thunderscan для журнала Byte.

Рецензентом Byte был Джон Маркоф. Он же был автором рубрики о технологиях в San Francisco Chronicle. Джон считался одним из лучших журналистов, освещающих индустрию персональных компьютеров. Том рассказал о Thunderscan, а позже начал демонстрационное сканирование. Джон задал несколько вопросов, записанных в текстовом редакторе его IBM PC. Во время моего очередного ответа у него зазвонил телефон.

Извинившись, Джон нажал комбинацию клавиш на клавиатуре, после чего на экране компьютера текстовый редактор быстро сменился на другое приложение. Он разговаривал по телефону в течение минуты или двух, а затем, закончив беседу, вернулся к списку вопросов про Thunderscan с помощью всё той же комбинации клавиш.

«Что ты только что сделал? — я заинтересовался его программным обеспечением, — как ты смог переключиться на другую программу так быстро?»

«О, я использую Memory Shift. Разве ты с этим не сталкивался? — отвечал Джон, — Это утилита DOS, которая позволяет держать в памяти несколько приложений и быстро переключаться между ними. Я очень часто пользуюсь ей в последнее время». Он продемонстрировал процесс переключения несколько раз, чтобы показать мне скорость работы этой утилиты.

«Знаете, думаю я смогу сделать что-то подобное для Macintosh», — выпалил я, прежде чем осознанно всё обдумал.

Поставки Macintosh 512K начались несколько недель назад. Я пробовал запустить несколько приложений одновременно на 512K, но был загнан в угол конфликтами памяти и другими потенциальными подводными камнями. Но теперь, после увиденного перераспределения памяти в действии, мне пришла в голову идея, которую, как казалось, не слишком сложно реализовать.

«Да, было бы здорово», — согласился Джон. Я продолжал демонстрацию Thunderscan, но не мог полностью сконцентрироваться, думая о переключении между приложениями. Мне казалось, что создание такой утилиты — вполне выполнимая задача, результат которой будет чрезвычайно полезен.

Том Петри заметил моё волнение из-за новой идеи. После презентации он отвёз меня домой и напомнил о моих обязательствах, взяв с меня обещание закончить альфа-релиз Thunderscan как можно скорее, прежде чем начинать что-то новое. Мы договорились о списке задач, которые я должен был выполнить за две ближайшие недели. Как только альфа-версия была готова, я смог взять небольшой перерыв для работы над переключателем приложений, чтобы позже вновь погрузиться в работу над Thundescan, готовя версию 1.0 к концу ноября.

Полируя Thunderscan, я обдумывал нюансы разработки переключателя программ. Выбирая между загрузкой приложений в единую область, которая оптимально бы использовала память, и использованием отдельных зон для лучшей изоляции каждой программы, я остановился на втором варианте, хотя и не был уверен в правильности этого выбора.

Предстояло решить много маленьких проблем. Самым важным было то, что приложения хранят в памяти достаточно глобальных переменных, которые должны быть заменены во время переключения, так как каждая программа имеет собственный набор таких переменных. Далеко не все моменты оказались для меня очевидными. Я знал, что мой первый опыт не будет идеальным, но я уверенно справлялся с отладкой всех неизбежных проблем.

Через несколько дней после начала завершающей стадии работ над Thunderscan я получил очень интересный телефонный звонок от Джеффа Харберса который был менеджером приложений Macintosh в команде Microsoft. Он сообщил, что в Microsoft разрабатывается очень важный стратегический проект, и они думают, что я был бы идеальным кандидатом для его реализации. Джефф не стал раскрывать других подробностей по телефону, но предложил прилететь в Сиэтл, чтобы обсудить всё лично. Я был достаточно заинтригован, чтобы прекратить работу над Thunderscan и сесть в самолёт.

Джефф подобрал меня в аэропорту, и мы направились в главное здание компании Microsoft, где к нам присоединился Нил Конзен — талантливый 23-летний программист под Macintosh. Я знал его со времен нашей совместной работы над добавлением функций к языку Ассемблер. Ему на тот момент было всего 16 лет.

Джефф спросил меня, над чем я сейчас работаю. Я рассказал ему про Thunderscan, но когда упомянул об экспериментах с утилитой для переключения приложений у него отвисла челюсть. Джефф не мог поверить, что я действительно сказал это.

«Это именно то, о чём мы хотели поговорить! Здорово, что Вы уже над этим работаете!», — воскликнул Джефф.

Он объяснил, что необходимо приложить много усилий, чтобы заставить работать приложения стабильно в небольших областях памяти Macintosh 128K. К тому же, Lotus недавно объявила о новом пакете программ Jazz для Macintosh 512K, который позволяет легко и быстро переключаться между его функциональными областями. Целью визита было убедить меня написать аналогичное приложение-коммутатор по контракту с Microsoft.

Нил Конзен представил потенциальный проект разрабатываемой утилиты на доске. Он предложил использовать единую зону памяти, что я сразу отверг, рассказав об альтернативном подходе с отдельными областями, дающими наибольшую надёжность.

Мой день в Microsoft завершился закрытым заседанием с Биллом Гейтсом. Джефф отвёл меня в его кабинет и, извинившись, оставил нас наедине.

После дежурного обмена любезностями Билл посмотрел мне в глаза и спросил: «Ты действительно хороший программист, не так ли? Я думаю, ты действительно должен быть хорошим программистом».

«Думаю, да», — ответил я, не понимая, почему он мне льстит.

«Я тоже так думаю. Как ты считаешь, сколько времени потребуется, чтобы реализовать этот проект? Месяц или два? Мне кажется, хороший программист должен управиться с этим за пару месяцев».

«Понятия не имею, — ответил я, — даже не понимаю, возможно ли это реализовать».

«Давай разберёмся, — ответил он немного снисходительным тоном, — это не должно занять более десяти тысяч строк кода, а действительно хороший программист в состоянии писать не менее тысячи строк в неделю. Думаю, это займёт у тебя не более десяти недель».

Я не знал, что ему ответить, поэтому просто молчал и слушал.

«А как ты думаешь, сколько денег может заработать хороший программист? Мы платим нашим лучшим сотрудникам около двух тысяч долларов в неделю. Тебе не кажется, что тебе должны платить больше?»

«Не знаю», — ответил я. Стало понятно, что Билл пытался настроить меня на очень быстрое написание этой утилиты.

«Если ты будешь получать около четырёх тысяч долларов в неделю, — продолжил он, — то в итоге за десять недель ты можешь получить сорок тысяч».

Я сказал ему, что сделаю всё возможное для того, чтобы эта утилита хорошо работала с приложениями от Microsoft. Я хотел добиться этого в любом случае и без этого предложения, ведь программы Microsoft были очень популярны среди пользователей. Мы пожали друг другу руки, и я покинул кабинет на позитивной ноте.

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

В конечном итоге я должен был создать пользовательский интерфейс для этой утилиты. Я работал без перерыва 20 часов подряд, разрабатывая ядро программы. Невероятно приятно было наблюдать постепенно улучшающуюся стабильность этой утилиты, решая очередные проблемы с памятью.

Работая над своим проектом, я заметил Бада Триббла, вернувшегося в Apple в июле 1984 года на должность менеджера программного обеспечения после врачебной стажировки в университете Вашингтона и жившего недалеко от меня.

Я пригласил Бада к себе, чтобы продемонстрировать быстрое переключение между MacPaint, MacWrite и MacDraw. Он был впечатлён, но, к моему удивлению, пожаловался, что переход происходит слишком быстро.

«А если кто-то осуществит это переключение случайно? Это может вызвать путаницу, — сказал он мне, — может быть можно использовать анимацию для создания плавных переходов?».

Эта идея показалась мне действительно хорошей. Мы решили, что меняющиеся программы должны прокручиваться по горизонтали, а все запущенные приложения могут быть наглядно представлены в небольшой области экрана. Я быстро написал необходимый код и был поражен тем, насколько здорово программы проносились по экрану.

Я демонстрировал этот концепт своим друзьям из Apple и некоторым простым пользователям. Абсолютно все положительно восприняли мой проект. К сожалению, мне катастрофически не хватало времени на доработку Thunderscan, но я всё-таки выполнил обещанное и он был готов в конце ноября.

switcher_about

После короткого отпуска пришло время вернуться к разработке утилиты для переключения приложений, которую я стал называть Switcher. В начала декабря у меня была реализована большая её часть, включая пользовательский интерфейс.

В начале января 1985 года я получил телефонный звонок от Гая Кавасаки, который сказал мне, что компания Apple заинтересована в покупке Switcher. Первым этапом было проведение презентации продукта для Стива Джобса.

Войдя в его кабинет, я немного волновался, оценивая свой проект в четверть миллиона долларов, но был уверен, что Стив никогда не заплатит мне столько. Я гордился своим детищем, и мне была интересна реакция Джобса на него. Запустив MacWrite, MacPaint, MacDraw и Finder, я преднамеренно продемонстрировал Switcher с выключенной анимацией, чтобы позже произвести более эффектное впечатление. Я быстро переключался между приложениями в обоих направлениях.

«Хорошо, я увидел достаточно, — прервал меня Стив, — это здорово. Мы бы хотели интегрировать этот проект в Mac».

На мгновение он застыл и посмотрел на меня так пристально, будто хотел меня напугать.

«Я не хочу, чтобы ты воспользовался Apple».

«Что ты имеешь в виду?», — озадачившись его словами, я задал ему вопрос.

«Ты не сможешь дописать программу без информации, которую можешь получить здесь. В итоге у тебя пропадёт желание заканчивать проект».

«Программа готова ровно наполовину. Сомневаюсь, что если мне заплатят честно, то я не буду замотивирован на завершение работы», — я начал злиться.

Осмотрев меня еще более серьёзным взглядом, Стив озвучил единственное число без каких-либо пояснений.

«Сто тысяч долларов».

«Не знаю, — ответил я ему, — думаю, что Switcher стоит намного дороже».

«Не спорь со мной, — парировал Джобс, — это честная цена, и ты это знаешь».

Казалось, что я не имею никакой альтернативы, и мне пришлось капитулировать перед ценообразованием Стива. С ним действительно было очень трудно спорить. В конце концов при подписании окончательного соглашения с Гаем Кавасаки мне удалось получить бонус, который в будущем принёс мне ещё пятьдесят тысяч.

Как и ожидалось, самой трудной частью в работе над Switcher было заставить его стабильно работать с приложениями Microsoft. Разработчики позволяли себе различные вольности с системой, уклонялись от общепринятых инструкций, что вызывало у меня определенные трудности.

Мне необходимо было переводить псевдо-код в байт-код. Перевод с помощью шести команд для последующей отладки оказался довольно болезненным для Switcher.

Одной из последних проблем, с которой я столкнулся до первого релиза Switcher в марте 1985 года, стала реализация возможности «убивать» зависшее приложение без необходимости завершать работу во всех сразу. Я добавил эту функцию вместе с возможностью мониторинга состояния запущенных программ.

Мне необходимо было выбрать достаточно редкую комбинацию клавиш для запуска этой функции. Я выбрал четыре кнопки, на которые, как казалось, было очень сложно наткнуться случайно, но всё же был удивлен, когда получил телефонный звонок от Джеффа Харберса из Microsoft.

gates_letter_t

«Мне нравится эта функция принудительного завершения работы программ, но тебе придётся изменить сочетание клавиш, потому что мы используем такое при работе с Microsoft Word». Джефф пояснил мне, что Word является очень сложным редактором и имеет огромный диапазон сочетаний клавиш.

Джефф не предложил ничего конкретного, но позвонил мне на следующий день, предложив другую комбинацию.

«Мы изменим Word в следующем выпуске. Проблема в том, что у нас не вышло найти безопасную последовательность клавиш. Мы просто используем их все», — рассмешил меня Джефф.

Релиз готовой версии Switcher официально состоялся в апреле 1985 года. Я поддерживал несколько его версий после запуска, но в конце концов передал его Филу Голдману, талантливому программисту из Принстона, попавшему на работу в Apple. Он начал разрабатывать MultiFinder, который стал приемником Switcher в 1987 году.

via Folklore.org