Длительный, но не слишком продолжительный спор между Oracle и Google по поводу использования кода из Java SDK в Android достиг новой стадии. Oracle представила свою версию в Верховном суде, и она кажется убедительной.
Каждый программист знает важность API. Мы понимаем, для чего они нужны, как они созданы и как используются. Более того, большинство из нас знает, как заново реализовать API без кражи кода, но в случае победы Oracle нас вполне могут признать виновными в краже кода, даже если такой вывод кажется необоснованным. Спецификация API позволяет клиенту вызывать функции для выполнения работы. Это спецификация имен функций и параметров и, если вам повезет, некоторое представление о том, что функция будет делать и каковы ее ограничения. Это все равно что сказать, что в машине есть педаль газа и педаль тормоза. Если вы хотите построить свой собственный автомобиль, никто не будет обвинять вас в нарушении авторских прав, если вы используете те же две педали. Проблема здесь в том, что можно проводить сравнения между реализацией API и другими вещами в соответствии с вашими целями. Выберите правильное сравнение, например, Oracle:
По логике Google, плагиат может дать определение J.K. Идея Роулинг как «рассказ о Гарри Поттере, Роне Уизли и Гермионе Грейнджер, которые учатся в Хогвартсе», крадет персонажей и их предыстории.
Ясно, что здесь крадут многое, не только имена. Тот факт, что проводить параллели так легко, что либо резервное копирование, либо опровержение идеи о том, что API — это творческая работа, выраженная на понятном человеку языке и, следовательно, защищенная авторским правом, является главной трудностью в достижении логического решения.
Oracle приложила немало усилий, чтобы Java API казался сложным и заслуживающим внимания. Чтобы подчеркнуть эту мысль, используется конкретное определение функции:
public boolean verify (PublicKey verifyKey, Signature verifyEngine) выбрасывает InvalidKeyException, SignatureException
Да, это выглядит сложным и творческим для непрограммиста, но мы знаем, что это просто функция, которая выполняет определенную работу и принимает почти необходимые параметры для выполнения этой работы. Oracle говорит, что это произведение великого творчества ручной работы, больше похоже на стихотворение. Если был выбран другой метод, скажите:
общественная длина int ()
который возвращает количество символов в строке, аргумент может быть не таким эффективным — какая нетривиальная альтернатива существует?
Дело в том, что языки программирования не являются естественными языками, и авторское право не означает то же самое применительно к ним. Некоторый код почти неизбежен и является очень поверхностным проявлением творческих способностей.
Вы можете спросить, почему мы все обречены?
Причина панического заголовка в том, что заявление Oracle очень убедительно. Это почти покорило меня, и я знаю, что это оторвано от реальности. Это отличный аргумент, и он, кажется, выражает технические идеи на «простом английском». Из того, что он утверждает, кажется неизбежным, что Google украл что-то ценное и продукт творчества Oracle или, скорее, Sun.
Дело в том, что объяснение непрограммисту, что такое спецификация API или прототип функции, независимо от того, насколько понятно объяснение, не передает очевидности или существенной необходимости прототипа. Вам нужна функция для выполнения конкретной работы, которая, в свою очередь, почти определяет форму прототипа функции, почти независимо от того, как на самом деле выполняется работа. Здесь мало творчества, даже если есть лучшие или худшие способы упорядочения и наименования основных параметров.
Oracle также утверждает, что разрешение Google на переосмысление закона нанесет ущерб компаниям, которые больше не смогут защищать свою интеллектуальную собственность. Разработка прекратилась, потому что мир API был открыт для всех. Это явный бред. Если я изобрету API, конечно, я хочу, чтобы на него было авторское право. Если я использую API, то последнее, чего я хочу, — это защищать авторские права. Я хочу, чтобы другие посмотрели на него и реализовали заново, расширили его и предложили мне как пользователю безопасность второго источника, обещание инноваций и перспективу снижения затрат.
Очевидно одно: утверждение, что API являются авторскими правами, было бы катастрофой. Есть так много случаев, когда компании повторно реализуют API или системы, соответствующие интерфейсу, что я предполагаю, что тролль об авторском праве станет прибыльной работой. Было бы иронично, если бы Oracle была первой, на кого предъявили иск за повторную реализацию чужих API, но я уверен, что они будут в списке на каком-то месте. При рациональном подходе даже Oracle не хотел бы такого результата.
Понятно, что авторское право не должно распространяться на код, который просто определяет условия работы какой-либо системы. Непонятно даже, должно ли авторское право распространяться на любой код.
После прочтения материалов Oracle я пришел к выводу, что документ достаточно хорош, чтобы убедить непрограммиста в том, что API — это чудесное творение, требующее огромных усилий и сродни глубочайшему выражению естественного языка. Это неправильно, но я думаю, что это останется в силе, и я думаю, что мы должны подготовиться к блокировке API.