четверг, 4 ноября 2010 г.

Почему/как создавалось MSLU...

Это перевод Why/how MSLU came to be, and more. Автор: Майкл Каплан.

Один вопрос, который мне постоянно задают (его регулярно задают даже сегодня): почему Microsoft создало MSLU?

Посмотрим, сумею ли я пролить немного света на этот вопрос.

(Иногда люди задают менее благоприятную версию вопроса, вроде: почему Microsoft ждала так долго, чтобы сделать MSLU? или: почему вы ждали, пока не стало слишком поздно? но я буду придерживаться приятной версии вопроса!).

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

Эти записки также расскажут историю, как я получил мой первый контракт с группой, к которой я впоследствии присоединился, став полноценным сотрудником MS - это сильно связано с тем, почему я работаю там, где я работаю!

Ладно, начнём уже историю...

Давным-давно, в 2000-м году я только начинал смотреть на namespace глобализации в .NET Framework. У меня не было так уж много доступной документации, но я нашёл детальную спецификацию, которая рассказала мне много всего, но также оставила и открытые вопросы. Я заметил, что автор (Julie Bennett) была инженером программного обеспечения, которую я не знал. Так что я послал ей письмо, спрашивая, не найдётся ли у неё немного свободного времени за обедом, чтобы поговорить о System.Globalization. Я не получил от неё ответа в короткие сроки, так что я решил, что она не хотела бы говорить об этом до релиза, потому что я не входил ни в одну команду разработчиков, связанных с проектом...

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

У неё, однако, были совершенно иные намерения.

Видите ли, много лет она пыталась убедить людей в необходимости Unicode слоя для Windows 9x, потому что слишком многим приходилось писать под разные платформы, поэтому многие просто не писали Unicode приложения вообще - ведь так было проще. Даже статьи вроде той, что F. Avery Bishop написал для MSJ в 1999-м (Design a Single Unicode Appthat Runs on Both Windows 98 and Windows 2000), не слишком-то решали эту проблему. Отсутствие поддержки новых "Unicode only" языков в сторонних программах было бы серьёзным ударом по всей истории интернациональной поддержки.

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

В любом случае, сначала мы говорили о всяких NLS-вещах, и я жаловался, что "ОНИ" не могут сделать, чтобы вся эта сортировка "Традиционный" vs "Современный" испанский ушла бы в альтернативную сортировку, вместо того, чтобы использовать новый LANGID. Она вежливо указала мне (в классическом стиле "Мой дорогой мальчик..."!), что концепция альтернативной сортировки не существовала в то время; альтернативная сортировка как раз и была создана как последствия проблемы "традиционной испанской сортировки", чтобы такое больше не произошло.

Но когда она выложила на стол идею слоя, который бы позволил людям писать Unicode приложения с очумелым функционалом, работающие на Win9x, я был поражён. Когда она спросила, заинтересован ли я в этом проекте, чтобы определить, сможет ли она собрать людей, стоящих за этой идеей - я думаю, что я сказал: да, чёрт возьми! или что-то такое :-) Это звучало, как чертовски увлекательный проект!

Если бы я был не так туп, то я бы знал, что "ОНИ", на которых я жаловался, говоря об испанской сортировке, были, фактически, "ОНА" - поскольку она и была разработчиком, которой принадлежала эта идея. Я был бы весьма смущён, если бы мне предложил работу кто-то, кого я так пинал. Я думаю, что она знала, что эффект на мне будет сильнее, если я найду в этом себя1 - что я и сделал, не намного позже :-)

MSLU был рискованным проектом с иногда бесценной, часто интересной, и всегда забавной помощью от таких ребят, как:
  • Raymond (всякие странности Win9x - он всегда знал, что вызывает проблемы)
  • Bryan (архитектура MSLU-загрузчика, наше собственное решение отложенной загрузки)
  • Dan (автор оригинальной отложенной загрузки, который помог Bryan разработать решение для MSLU)
  • Jay (загадки DllMain, выделения TLS, и, в конечном итоге, помощь с интеграцией)
  • Phil (работа без CRT, поскольку не все платформы Win9x её имеют!)
  • Cathy (единственный человек во вселенной, который вообще был способен стать менеджером такого проекта, а также та, кто придумал все внутренние и внешние имена для нас)
  • Mike (помощь с подклассами - стиль команды Оболочки)
  • Gerardo (кто забыл про управление окнами и сообщения больше, чем большинство людей вообще знают)
  • Barry (создание и работа с переходниками-заглушками - thunks)
  • и больше всего - Julie (в первую очередь - за видение MSLU)
Microsoft является прекрасным местом для работы. Главным образом потому, что там есть такие замечательные люди!

К апрелю 2001-го, Cathy Wissink и я были готовы рассказать о MSLU на 18-й международной конференции Unicode в Гонконге (в особом добавочном выступлении, которого не было в расписании!).

Мы также написали статью для октябрьского выпуска журнала MSDN 2001-го, названную MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicode, которая говорила о мотивации проекта и технической информации об использовании MSLU.

Так почему же это заняло столько времени: увидеть важность этого проекта? Сложно сказать (определённо, меня не было на совещаниях Julie с руководителями!), хотя я думаю, что все просто так стремились к Windows 2000, что у них заняло некоторое время признать, что для реального использования Unicode в приложениях нужны были более полные стратегии по миграции. Кодовое имя проекта было Godot, по мотивам Waiting for Godot, что должно дать подсказку, что чувствовали те, кто знал важность проекта, но не знали, осознают ли это когда-нибудь остальные. Нам нужно было просто этого дождаться, так что мы все могли быть спасены.

Хотя многие люди были смущены таким названием - они думали, не является ли это ссылкой на управляемое окружение (т.е. Go.dotnet или что-то такое).

И последнее замечание в этом посте. Serge Wautier спросил (из suggestion box):
Мне всегда было интересно, почему Begin/End/UpdateResourceA не реализованы в Win9x. Была ли для этого техническая причина? Недавно ты написал, что была сделана куча работы, чтобы сделать API Win9x дружелюбным. Тогда почему же их нет?

Заметь, что я являюсь счастливым пользователем MSLU и спросил это только затем, чтобы услышать исторический анекдот.
Я не могу взять на себя ответственность за эту часть, это произошло благодаря тяжёлой работе Matt Curland (автора великолепной статьи Advanced Visual Basic 6: Power Techniques for Everyday Programs, из которой я взял код для своей собственной книги, сделав некоторые модификации, чтобы сделать код более дружественным к интернационализации). Matt тогда был полноценным работником MS и он работал над своим клёвым редактором ресурсов. Он хотел, чтобы он работал и на Win9x, так что он попросил меня, не может ли он взглянуть на код функций обновления ресурсов BeginUpdateResource, UpdateResource и EndUpdateResource, и, после получения разрешения от моего менеджера, я отправил ему исходные файлы. После конвертации исходника для работы на Win9x (что было незаурядным достижением!) он спросил, не может ли он распространять DLL с этим кодом, но менеджеры не были воодушевлены этой идеей (есть большая разница между "посмотреть на код" и "дать этот код клиентам"!). Я не могу вспомнить, кто это был, но кто-то из нас предложил, чтобы этот функционал вошёл в MSLU. Это устроило менеджеров, так что код был добавлен (и хорошо работал) в релиз 1.0.3703.0.

Затем я добавил обе версии "A" и "W", потому что выглядело сумасшествием так не делать в этом случае. Но это произошло спустя годы после выпуска последней версии Win9x, и, насколько мне известно, никто никогда не рассматривал добавление этих API функций в саму Win9x. Усилия, чтобы сделать эти функции дружелюбными у Win9x, были достаточно нетривиальными. Единственная причина, почему они хоть как-то существуют - это Matt и его тяжёлая работа над элегантным решением проблем... :-)

1 - Кстати, это действительно была одна из главных причин, почему я взял этот контракт, что произошло после утверждения проекта (она сказала, что проект утверждается намного проще, когда есть люди, рвущиеся к работе!). Быть оскорблённым (пусть даже по незнанию и не специально), но действовать так, как будто ничего не случилось - это высший класс. Я решил, что я хотел бы остаться по крайней мере достаточно долго, чтобы узнать, как делать такую вещь! Теперь, несколько лет спустя, я работаю полный рабочий день на Microsoft в группе (GIFT), где она является директором с более чем 130 подчинёнными. Я всё еще не полностью усвоил урок, но есть времена, когда я вижу прогресс...

This post brought to you by "∞" (U+221e, a.k.a. INFINITY)

3 комментария:

  1. "Gerardo (кто забыл про управление окнами и сообщения больше, чем большинство людей вообще знают)"

    слово "забыл" тут как-то странно звучит.

    ОтветитьУдалить
  2. Гм... не уловил - а как надо?

    Там смысл такой и был - что человек успел забыть (не узнать, а аж забыть) больше, чем многие когда-либо узнают. В смысле, это как бы подчёркивается огромный объём знаний.

    ОтветитьУдалить
  3. "В смысле, это как бы подчёркивается огромный объём знаний. "

    Велик могучим английский языка :)
    Спасибо.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.