понедельник, 1 декабря 2008 г.

Почему бы просто не заблокировать приложения, которые используют недокументированное поведение?

Это перевод Why not just block the apps that rely on undocumented behavior? Автор: Реймон Чен.

Потому что каждое приложение, которое будет заблокировано, станет ещё одной причиной, почему люди не станут обновлять Windows до следующей версии.

Посмотрите на все эти программы, которые могли бы перестать работать, когда вы обновлялись с Windows 3.0 до Windows 3.1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility

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

(Аналогичный список для Windows 2000-в-Windows XP хранится в вашей папке C:\WINDOWS\AppPatch, в двоичном формате, допускающим быстрое сканирование. Извините, но вот так просто вы его уже не сможете посмотреть. Я думаю, что в комплекте Application Compatibility Toolkit есть просмотрщик, но я могу ошибаться).

Вы купили бы Windows XP, если бы знали, что все эти программы были несовместимыми?

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

Предположим, что вы IT-менеджер в какой-то компании. Ваша компания использует Программу X как свой текстовый процессор, и вы обнаруживаете что по какой-то причине Программа X несовместима с Windows XP. Станете ли вы обновляться?

Ну конечно же нет! Ваш бизнес остановится.

"Почему не позвонить в Компанию X и не взять у них обновление?"

Конечно, вы можете это сделать, но часто ответ будет: "о, вы используете Версию 1.0 Программы X. Вам нужно обновиться до Версии 2.0 за $150 за экземпляр". Поздравляю, ваша цена апгрейда на Windows XP только что утроилась.

И это, если вам ещё повезло и Компания X ещё ведёт дела.

Я помню принятые несколько лет назад обследования корпораций, использующих Windows, нашей командой установки/апгрейда. Почти каждая из корпораций имела как минимум одно ключевое приложение, без работоспособности которого они ни за что не обновили бы Windows. В подавляющем большинстве случаев эта программа была разработана их внутренним персоналом, обычно на Visual Basic (иногда даже на 16-ти битном Visual Basic), а человек, который её разработал, больше у них не работал. В некоторых случаях у них даже не осталось исходного кода.

И это касается не только корпоративных клиентов. Это влияет и на потребителей.

Для Windows 95 моя работа по обеспечению совместимость была сфокусированна на играх. Игры - самый важный фактор потребительских технологий. Видеокарта, которую вставляют в типичный компьютер, со временем становится всё лучше и лучше, потому что этого требуют игры (Outlook, конечно же, не волнует, что ваша видеокарта способна нарисовать 20 базилионнов треугольников в секунду). И если ваша игра не запустится на последней версии Windows, то вы не станете делать апгрейд.

В любом случае, производители игр довольно похожи на эти корпорации. Я сделал бесчисленное множество звонков производителям игр, в попытке помочь им запустить их игры на Windows 95. Всех их это не интересовало. Жизненный цикл игры составляет несколько месяцев. Зачем им вообще волноваться ради какого-то патча, заставляющего их программу работать под Windows 95? Они уже получили свои деньги. Они не сделают больше денег с этой игры; её три месяца уже закончились. Иногда у них даже не остаётся исходных кодов.

Короче, их совершенно не волнует, что их программы не работают в Windows 95 (мой любимый случай: программа, которая пыталась провести меня через создание загрузочного диска DOS).

Да, и тот Application Compatibility Toolkit, что я упоминал выше. Это отличная утилита и для разработчиков. Одним из его компонент является программа Verifier: если вы запустите свою программу под verifier, он будет проверять тысячи вызовов API и вывалит вам отладчик, когда вы сделаете что-то плохое (например, дважды закроете дескриптор или выделите память GlobalAlloc-ом, а освободите LocalAlloc).

Новая архитектура совместимости приложений в Windows XP имеет одно большое преимущество (с точки зрения разработки ОС): видите все эти DLL в вашей папке C:\WINDOWS\AppPatch? Это тут теперь живёт большинство патчей совместимости. Патчи совместимости теперь больше не загрязняют файлы ядра ОС (не все классы патчей могут быть оформлены в виде таких DLL, но это всё же огромная помощь).

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

  1. Именно эти аргументы являются причиной для появления режима эмуляции XP (Windows XP Mode) в Windows 7. И именно поэтому он доступен только в редакциях Professional и Ultimate. Потому что он предназначен для запуска legacy бизнес-приложений, а не для домашнего использования.

    ОтветитьУдалить
  2. Читал эту публикацию 11 лет назад.
    С учётом остальных статей Реймонда Чена о постоянных нападках на Microsoft - у меня сложилось впечатление об этом механизме совместимости как о чём-то экзотическом: Microsoft решает конкретную проблему своей репутации, но вряд ли кто-то ещё будет так заморачиваться. Как-то больно сложно.

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

    Интересно было бы подробнее узнать, а какой жизненный цикл этих патчей совместимости? Патчи, сделанные во времена Windows 95 или XP, всё ещё присутствуют в Windows 10? Или в стандартную поставку они не входят, но подкачиваются из сети по необходимости?

    P.S. Спасибо за переводы!

    ОтветитьУдалить
    Ответы
    1. Да, присутствуют. Насколько я понимаю, они остаются в система навсегда и удаляются лишь в исключительных случаях. Например, при создании 64-битных Windows из системы вычистили некоторые патчи - потому, что приложений под 64 бита не существовало.

      Удалить

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

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

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

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

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

Примечание. Отправлять комментарии могут только участники этого блога.