Дон обожал занудствовать по поводу деталей лицензий свободного ПО. За время работы в Netscape и Eazel он подробно изучил эту тему и любил чесать языком, обсуждая достоинства, недостатки и положения различных лицензий. Он явно получал удовольствие, объясняя хитросплетения стандартной общественной лицензии ограниченного применения исходного кода Konqueror. Эти положения гласили, что если мы включаем Konqueror в «кулинарную книгу» Macintosh как отдельную главу, используя его код только с помощью перекрестных ссылок, и открыто публикуем любые изменения, которые делаем, чтобы рецепт Konqueror «получался вкусным» на Macintosh, мы работаем в соответствии с лицензией свободного программного обеспечения Столлмана.
Ричарда, кажется, ни на йоту не волновало свободное ПО, и когда Дон заводил длинный разговор с описаниями лицензий софта, Ричард вздыхал или закатывал глаза.
Я был где-то посередине.
Я серьезно относился к лицензии свободного программного обеспечения. Уважать условия, на которых кто-то другой делал свою работу доступной всем, было правильно.
Более того, если мы не будем соблюдать условия лицензионного соглашения Konqueror, это может привести к судебному иску в отношении Apple. Я не хотел зацикливаться на всех этих лицензиях, но считал важным потратить некоторое время и удостовериться, что мы учли все варианты и с технической, и с юридической точки зрения.
К лицензированию мы относились по-разному, так что совещание, посвященное нашей будущей стратегии, выглядело как бестолковая постановка сказки «Три медведя». К счастью, было не слишком трудно сделать все «правильно», и через пару часов у нас был план. Чтобы объяснить его подробности, я снова обращусь к аналогии с кулинарными книгами.
Представим, что миллионы строк кода, которые составляют операционные системы Linux и Mac, — это большие кулинарные книги, написанные разными авторами. Иногда представленные в них рецепты пересекаются, но отдельные блюда отличаются. В книге рецептов Mac браузера нет. В разделе KDE кулинарной книги Linux он есть, в главе под названием Konqueror. Наш план состоял в том, чтобы выдернуть эту главу, уничтожить то, что останется от KDE и Linux, и добавить страницы Konqueror в кулинарную книгу Mac. Все это вело к одной совершенно очевидной проблеме. Таким образом мы уничтожим все перекрестные ссылки, связывающие Konqueror с другими частями кулинарной книги, которую мы планировали выкинуть. Не будет больше никакого рецепта голландского соуса на с. 123.
Чтобы эта схема с изъятием страниц работала, мы должны были, перенося Konqueror на Mac, тщательно изучить каждую разрушенную перекрестную ссылку в каждом рецепте. Если подходящий эквивалент уже существует в программном обеспечении Apple — например, общие вычислительные ресурсы, такие как цвета или шрифты, — мы можем переназначить для них перекрестные ссылки. Если эквивалента нет — скажем, для системы, создающей закладки веб-страниц, — нам нужно написать новые рецепты с чистого листа. Мы предполагали, что переделки коснутся как Konqueror, так и Mac, чтобы блюдо вышло таким, как надо.
Мы понимали, что после того, как скопируем код Konqueror на Macintosh и попробуем его скомпилировать, он не будет работать нормально. Каждая разрушенная перекрестная ссылка приведет к ошибке компиляции. И даже после того, как мы исправим все эти ошибки, браузер вряд ли сразу заработает как надо. Мы знали, что ошибок будет очень много. Но главное — после компиляции исходного кода у нас будет прочное основание в виде браузера Konqueror и мы сможем начать поиск ошибок, проверку и «полировку» кода.
Мы добавили к нашей стратегии один последний элемент. По нашим предположениям, программистам придется уделить особое внимание некоторым частям кода Konqueror, чтобы они начали хорошо работать на Mac. Мы решили добавить к исходному коду примечания, чтобы напомнить себе, что позднее нам следует вернуться и улучшить адаптацию кода в этих местах. Программисты часто используют такие заметки. Мы называем их FIXME. Логично было предположить, что в такой большой работе по портированию, какую мы запланировали, будет очень много таких FIXME. Пару месяцев спустя мы были очень рады тому, что приняли это решение и что прилежно добавляли эти пометки везде, где сомневались в каком-то участке кода во время редактирования. Каждая FIXME была еще одним пунктом в нашем списке того, что надо сделать.