Воспоминания сотрудника IBM: как я нашел жену, отлавливая ошибки в OS/2

:

(В недавнем обзоре истории OS/2 давалась очень обобщенная картина разработки ОС. Надеюсь его хорошо дополнит взгляд изнутри самой IBM, воспоминания рядового тестера OS/2.)

Богопротивный альянс IBM и Microsoft выпустил OS/2 25 лет назад, чтобы заменить Windows, Unix и DOS. В то время я был рядовым солдатом этой войны: тестером, работающим в Синем Гиганте по договору. Жестокая судьба и еще более жестокий редактор хотят, чтобы 25 лет спустя я написал статью о том, стоит ли вам сейчас посвящать свою карьеру Microsoft. И меня до сих пор поражает то, насколько не знающие историю люди обречены ее повторять.

В конце 1980-х большая часть PC все еще выполняла только одну программу за раз, хотя многие из них были заражены сражавшимися друг с другом резидентными программами. Графические интерфейсы уже пришли на PC, но Windows-приложения работали просто ужасно: даже если вы просто включали Windows PC и больше ничего не делали, была немалая вероятность того, что он зависнет сам по себе.

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

IBM была патологически скрытной. Мое собеседование в основном состояло из вопросов в духе «итак, Доминик, расскажите о себе» без малейших намеков на то, чем мне предстоит заниматься. Так как я принимал участие в проекте Microsoft Unix для Intel x86, я ответил: «В определенном смысле моя работа заключалась в том, что я портил жизнь Microsoft». Сотрудник отдела кадров IBM сказал, что, как правило, их начальству требуется «должное количество времени» для принятия решения, но в этот раз предложение работы пришло на мой автоответчик еще до того, как я вернулся домой.

Я вышел на работу и мне начали платить деньги за ничегонеделание. Я работал в английской лаборатории IBM в деревне Харслей (Hursley), недалеко от Винчестера, но судя по всему никто не хотел, чтобы я хоть что-нибудь делал. Я подписал договор, включавший в себя пункт о неразглашении (хочу особо отметить, что его срок уже истек), но, судя по всему, этого было недостаточно. Я предложил подписать еще один, но никто не мог его найти.

В конце концов с этим разобрались и мне выдали компьютер, но не дали адреса электронной почты, потому что я работал по договору, был недочеловеком (untermensch). Чтобы получать письма, мне пришлось притворяться сотрудником, который раньше сидел за моим столом — его ID я использовал в течение следующих трех лет.

(Еще один пример моей ничтожности внутри компании — какой-то работник отдела кадров почему-то решил, что я женщина. Я не являюсь образцом мужественности, можете мне поверить, но я не Доминика! Была предпринята попытка расторгнуть мой договор до того, как я уйду в декретный отпуск — даже сексизм был непрофессиональным.)

Дюжины человеко-лет ушли на споры о расходах, когда выполнявших критически важную часть разработки OS/2 программистов после перевода в США поселили в такой дыре, от которой отказались даже студенты. Начальникам, само собой, предоставили такое же жилье, в котором жили все сотрудники Microsoft, вне зависимости от уровня.

Нас, само собой, наградят путешествием на Гавайи… или нет.

Работающим над OS/2 программистам Microsoft пообещали неделю на Гавайях, если они вовремя завершат проект, само собой, это дополнялось опционами на акции. IBM попыталась дать достойный ответ в виде поездки на Азорские острова, но не преуспела. Затея была обречена с самого начала, так как отдел кадров Синего Гиганта наложил запрет на наш приз из-за правил IBM, запрещающих собирать такое количество сотрудников на одном самолете.

Вместо этого отдел кадров предложил план, который четко отражал их отношение к техническим сотрудникам: торжественный ужин с танцами. В Портсмуте (Великобритания). Справка для наших небританских читателей: это не особо престижное место.

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

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

(Хочу пояснить, что я не считаю отдел кадров IBM худшим в мире, хотя за свои 28 лет работы в технологической и банковской отраслях я не встречал ничего подобного.)

Учитывая вышеописанное, я так и не смог понять, как они умудрялись нанимать людей, которые были одними из самых умных и наиболее приятных профессионалов, с которыми я когда-либо работал. Даже с тем парнем, которого разработчики из Microsoft и IBM в равной мере считали худшим, было очень легко иметь дело. Как жаль, что через несколько лет он погиб, сражаясь на стороне Талибана.

Так или иначе, пора возвращаться к технологиям. OS/2 получила радикально улучшенный графический интерфейс Presentation Manager, графическую библиотеку промышленного уровня, основанную на успешной разработке IBM GDDM, планировалось включить в операционную систему качественную базу данных и сетевые возможности.

OS/2 1.0 вышла в виде чисто текстовой супер-DOS. То, что мы считали «настоящей OS/2», версия 1.1, вышло годом позже и включало в себя супер-пупер поддержку графики. Специально для нее мы придумали сияющий новизной стандарт VGA.

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

Тестирование Microsoft осваивала с большим трудом

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

Их обзоры кода (code reviews) сводились к шуткам. Разработчики писали в комментариях к выполняющему локализацию коду «Не обращайте внимания на случайный локализационный бред от IBM» или «если количество окон ноль, возвращаем false» прямо после строки, которая всегда возвращала ноль. Microsoft прямым текстом отказывалась исправлять это, говоря что подобные вещи входят во внутренние стандарты программирования, копию которых, если они вообще существовали, нам так и не удалось получить.

Нас, с другой стороны, считали безнадежными бюрократами. После того как Microsoft потеряла исходный код последней сборки OS/2, которая была уже отправлена в магазины, я нашел ошибку, происходившую при двойном клике на Chkdisk: программа запускалась в двух экземплярах, оба пытались исправить диск и портили данные. Я написал, что «это может расходится с той задачей, ради которой пользователь запускал программу». Они сочли это ошибкой пользователя и какой-то парень по фамилии Баллмер спросил, почему я так «одержим» качеством кода.

В IBM собиралась детальная статистика по производительности и денежным показателям, программистский аналог СПИДа. По каким-то непонятным причинам IBM считала, что качество программ зависит от количества строк в исходном коде.

Синий гигант довел свои причудливые показатели производительности — количество KLOC-ов, тысяч строк кода — до такого состояния, что используемые нами редакторы исходного кода устанавливались вместе с макросами, помогающими увеличить число строк в коде, например, разбивавшими комментарии C на множество строк, чтобы ваш код соответстовал невероятно тупым показателям. И внезапно все начинало выглядеть хорошо.

Так как мы начинали практически с нуля, то смогли многое сделать правильно. Даже с высоты моего нынешнего опыта я считаю, что почти все инженерные решения были правильными и исполнение соответствовало самым высоким стандартам.

IBM Personal System/2 PC был анонсирован одновременно с OS/2 и изначально предназначался для запуска нашей операционной системы — но на первые партии пришлось установить PC-DOS.

Большинство разработчиков OS/2 в IBM и Microsoft не просто не использовали PS/2, мы до самого последнего момента не подозревали о его существовании. Просто поразительно, насколько это похоже на ситуацию с Microsoft Surface — зыбкая маркетинговая связь между программами и железом. На PS/2 плохо работала OS/2, на Surface не работает полная версия Microsoft Office и он целенаправленно сделан несовместимым с обычной Windows.

OS/2 была изящна

По мере быстрой эволюции OS/2 из расширенной DOS в серьезную систему, в нее были добавлены общие библиотеки, многопоточность и идея того, что интерфейс операционной системы — API — должен быть тщательно сконструированной системой, а не кучей случайно названных функций.

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

По поводу особенностей API вспыхивали серьезные споры, хотя шестистраничные запросы на изменения имени одной-единственной функции не вызывали особого восторга. Это звучит не особо страшно, пока вы не узнаете, что в итоге функцию назвали WinBeep. Были даже философские споры о том, стоит ли допускать использование динамика.

Но мне больше всего нравилась SheIndicatePossibleDeath, с помощью которой Shell (She) оповещала, что в системе что-то пошло не так и надо предпринять меры для восстановления или мягкого перезапуска. Разработчики Microsoft считали это смешным и настаивали, что пользователю хватит черного экрана смерти.

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

Так были ли примеры кода, использующего API?

Нет, тупицы. Документация OS/2 API не была привязана к конкретному языку программирования. Какие-то примеры реального кода были в комплекте средств разработки, очень качественные, но в самом лучшем случае это был один процент от того, что надо было написать.

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

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

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

Несмотря на все вышеописанное, в то время программировать под OS/2 было проще всего. Мы точно знали это и где-то внутри IBM остались подтверждающие это видео. IBM нанимала опытных программистов под разные платформы и поручала им выполнение различных задач в лаборатории по тестированию пользовательского интерфейса. Они тратили гораздо больше времени, чем мы рассчитывали.

Трудность была в том, что разработчики продолжали спрашивать «как мне сделать X», в то время как X было каким-нибудь обходным путем, в котором не было необходимости в OS/2. Разработчиков из-под Mac и Windows очень сердило то, что большинство их любимых хитростей просто не были нужны.

После многих лет с документацией, состоящий из понятных только посвященным шуток и любопытных головоломок разработчики Unix восхищались нашей документацией. Разработчики DOS думали, что пришел Дед Мороз, и хотели работать с нами.

Я отчаянно пытался, но так и не смог включить эти видео в рекламную кампанию OS/2, которая очень напоминала рекламу Windows 8. Было сразу видно, что на нее потратили кучу денег, но в ней не приводилось ни одной причины, из-за которой вы могли бы таки купить рекламируемый продукт. В любом случае, IBM, подобно нынешней Microsoft, хотела говорить с «реальными людьми», а не теми, кто разбирался в компьютерах и принимал IT-решения на предприятиях.

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

Я знал внутренности ОС, которую и IBM и Microsoft собирались сделать самой популярной операционной системой в мире и рассчитывал хорошо заработать на этих знаниях, так что чем меньше народу знает программирование под OS/2 тем лучше для меня.

Или так нам тогда казалось.

IBM insider: How I caught my wife while bug-hunting on OS/2