Разборки за доступ к Mac OS X API

На выходных особой популярностью в Интернете пользовалась тема использования скрытых API в Mac OS X командой разработчиков, которая пишет движок WebKit — на нем построен браузер Safari. На это пожаловался разработчик Firefox в своем блоге, а новость быстро подхватили и разнесли по всему интернету с лозунгом “Apple умышленно “калечит” сторонние программы”.
Конечно, сама по себе такая практика не является достойной, но во всеобщей “рубке” в форумах и блогах парочка вещей остались незамеченными. Во-первых, это дополнение к блогу самого Влада Вукицевича, который и написал первым об этой проблеме, а во-вторых — это ответ Девида Хайатта, разработчика WebKit. Я считаю, что эти два момента как раз больше всего и заслуживают внимания:

Влад Вукицевич:
“Slashdot подхватил эту тему, похоже, и как обычно, полностью перекрутил мой пост. Чтобы всем стало ясно, я не думаю, что Apple в какой-либо способ пытается умышленно “испортить” программы сторонних разработчиков. Я также не думаю, что недокументированные API дают Safari какое-либо “значительное преимущество в производительности” (что и продемонстрирует Firefox 3). Но, как я и сказал, недокументированная функциональность могла бы быть полезной для Firefox и других приложений, для того, чтобы они могли решать какие-то задачи проще (и потенциально более эффективно). Я не думаю, что это злоумышленно, это просто такой неудачный способ “срезать угол”, который слишком доступен для компании, которая недостаточно открыта для этого.”

Девид Хайатт:
“Программное отключение “объединенных обновлений” (прим. пер. собственно, функциональность, из-за которой разгорелся весь “сыр-бор”) не должно быть публичным API. Это очень опасная штука. Мы не очень рады этому коду в WebKit, но нам пришлось это сделать, чтобы избежать снижения производительности в приложениях, которые встраивают WebKit. Технически это все равно неправильно, поскольку мы отключили “объединенные обновления” для любого приложения, которое использует WebKit. В том числе и отрисовку, которую они делают, и которая даже не использует WebKit.
Что касается сжатия отрисовки окна, это был параметр, сделанный для Safari (и мы его больше не используем). Он не является частным, или магией. Это всего лишь параметр, который мы можем проверять из Safari, и линкование к нему — это просто смешно. 😉
Большинство из приватных методов, которые использует WebKit, являются таковыми вынужденно. Либо они обнажают структуры, на которые нельзя опираться, либо они являются частью чего-то в фреймворке, который может быть не полностью сформированным. WebKit ссылается на несколько приватных методов NSView, к примеру, и это стоило нам много-много человеко-часов, чтобы справиться со всеми восстановлениями, вызванными внутренними изменениями в NSViews, которые сделали в Leopard.
Как ты сам писал, есть вполне доступный публичный способ выполнить задачу, которую тебе надо было сделать.
Для любого приватного метода, который мы используем и который, по нашему мнению, должен быть публичным, мы (команда WebKit), мы записываем ошибки на соответствующие системные компоненты. Многие из этих методов стали публичными со временем (например, вызовы CG в Leopard). Но будь внимателен, когда будешь ковыряться в коде WebKit, поскольку мы можем продолжить использовать метод WK, несмотря на то, что это не публичный API, только потому, что нам надо работать на Tiger.”
——————