Лучшее  🚀
01.03.2021 в 22:29 Evernews

Костыли и хаки: как на самом деле работает обратная совместимость

Где-то в глубинах Windows есть код, специально заточенный под World of Warcraft.

Кстати, на сайте читать удобнее

Операционная система Windows поддерживает сквозную обратную совместимость — на Windows 10, например, без особых проблем заработает приложение для Windows XP или даже более ранних версий ОС. Реализовать ее было непросто.

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

О некоторых наиболее любопытных костылях Windows рассказал операционный директор компании-разработчика системы виртуализации Corellium. Вот самые интересные моменты из его рассказа.

Windows постоянно проверяет, не запускает ли пользователь одно из «особых» приложений: например, игру Barbie Riding Club, выпущенную в 1998 году. Если приложение есть в «особом» списке, то логика работы операционной системы может немного меняться, чтобы оно работало нормально.

Одна из таких игр — World of Warcraft. Специально для нее в ядре DirectX есть особые доработки, ускоряющие работу шейдеров.

Однажды Microsoft пришлось делать специальный хак под Adobe PDF Reader. В Windows XP все было нормально, но в Vista ридер почему-то открывал текст на черном фоне. Оказалось, разработчики Adobe брали для фона не просто белый цвет, а цвет window text, использовавшийся в заголовке окна.

В Windows XP этот цвет белый и все нормально, но в Vista он черный. Чтобы пользователи новой операционной системы не возмущались, в нее добавили хак: если Vista видела, что запущен Adobe PDF Reader, то выдавала неверное значение window text — так, чтобы фон текста в ридере все-таки был белым.

Зачем вообще нужны такие хаки?

Потому что есть приложения (или игры), авторы которых не заинтересованы в поддержке новой операционной системы — например, они вышли некоторое время назад. Но если под этой системой приложение вдруг начнет работать некорректно, то обвинять будут не его разработчиков, решивших не выпускать патч, а авторов операционной системы. Это нехорошо.

Так делают все — не только Microsoft. Например, похожим образом устроена обратная совместимость и исправление неожиданных багов в MacOS от Apple. Интересно, что у Apple тоже возникла проблема с продуктами Adobe.

Разработчики приложений под MacOS могут активировать специальный ключ с говорящим названием NSMightNeedToWorkAroundBadAdobeReleaseBug. Если сделать это, система сразу все поймет и активирует набор хаков, исправляющий баг, специфический для Adobe.

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

Например, в движке WebKit есть хак, специально придуманный для нормальной работы Zillow, сайта для продажи, покупки и аренды недвижимости — в США он очень популярен. Видимо, так было проще, чем договориться с Zillow и изменить принцип работы сайта.

Быстрый поиск показывает, что специальные хаки в WebKit есть для сайтов Netflix, Twitter, Youtube, PlayStation, iCloud, Medium, Soundcloud — список довольно длинный.

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

Читать далее