Конфиденциальный материал по WindowsПроблемы совместимости

Рэймонд Чен (Raymond Chen)

Была такая программа для Windows® 3.1, которая открывала панель управления принтерами, для чего выполняла поиск в окне панели управления, открывала меню "Файл" и искала в нем объект "Принтер". В Windows 95 панель управления не содержала пункт "Принтер" в меню "Файл". В результате, при использовании Windows 95, эта программа отправляла панели управления не имеющую смысла команду. Чтобы решить эту проблему в Windows 95, было создано обманное окно панели управления, чтобы программа могла ее найти. Когда программа посылала сообщение обманному окну, открывалась папка «Принтеры».

Некоторые считают, что ОС Windows 3.1 должна была обнаруживать, что программа делала неверные предположения относительно панели управления, и выводить соответствующие предупреждения. В таком случае, автор программы обнаружил бы предупреждение и устранил бы неполадку до выпуска программы. Однако для того, чтобы определить намерения части кода, необходимо провести определенный анализ, который вторгается в область искусственного интеллекта. В принципе, ОС Windows 3.1 должна была обнаружить, что программа запускает команду strcmp для принтеров, анализировать команду strcmp , и определять ее корректность. Но это затрагивает только вопрос с принтерами. Сколько, по-вашему, проверок на совместимость система должна осуществлять? А что насчет ложных положительных результатов?

Другим доводом является то, что Windows 95 должен был отреагировать на ненужное выполнение диалогом предупреждения, который бы сообщал: «Программа «АБВ» выполняет неверную команду». Но чтобы панель управления послала пустое сообщение, обнаружение должно встраиваться в диспетчер окон. Это создает хрупкую связь между двумя компонентами – панелью управления и диспетчером окон. И снова, это решает только одну проблему. Вы хотите, чтобы диспетчер окон был связан со всеми другими компонентами системы?

Предоставлять сообщение общего характера, без указания определенного приложения, немного легче. Но это также не лучший выход. Сообщение о неопределенной ошибке немногим лучше, чем отсутствие сообщения об ошибке. И более того, этот диалог, по всей вероятности, будет игнорироваться пользователем, так как он не будет рекомендовать каких-либо конкретных действий. Пользователи будут воспринимать окно диалога с раздражением. Это очень важный момент. Важно, чтобы для любого сообщения об ошибке у пользователя были варианты действий. Если пользователь знает, как реагировать на предупреждение, сообщение становится полезным.

  

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

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

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

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

Рэймонд Чен (Raymond Chen), владелец и автор сайта Хорошо забытое старое, рассказывает историю Windows и программирования Win32-приложений. Он работает над книгой, которая также названа Хорошо забытое старое (Addison-Wesley, 2007).

© 2008 Корпорация Майкрософт и компания CMP Media, LLC. Все права защищены; полное или частичное воспроизведение без разрешения запрещено.