Является ли Cocotron результатом обратного инжиниринга?
Копирует ли это поведение различных библиотек (так что вызовы абсолютно одинаковы) или просто кодирует их с нуля, используя уникальные оптимизации и новые способы делать свои вещи?
2 ответа
Существуют различные виды реверс-инжиниринга, сгруппированные примерно в "грязную комнату" и "чистую комнату". Dirty-Room в основном включает в себя дизассемблирование машинного кода, чтобы выяснить, что он делает, и использование дизассемблированного кода для создания нового кода. Dirty-Room создает проблему нарушения авторских прав, вы в основном плагиатируете старую систему, чтобы создать новую систему прямо или косвенно через непосредственное знание о внедрении старых систем. Clean-Room включает в себя реализацию одного и того же API с использованием документации и тестирование для повторной реализации системы. Эти два метода могут использоваться самостоятельно или в различных комбинациях вместе. Например, BIOS ПК был перепроектирован с использованием двух команд, команды Dirty-Room, которая разобрала оригинальный BIOS и создала спецификацию, и команды Clean-Room, которая внедрила новый BIOS с использованием спецификации. В бизнес-ситуациях с высокими ставками для реверс-инжиниринга обычно участвуют юристы, специализирующиеся в данной области, для создания надлежащего нового внедрения, которое не нарушает старого.
Cocotron - это реализация Clean-Room. Я / Мы используем документацию и тестовые программы для создания новой реализации (Cocotron), которая соответствует поведению старой реализации (Cocoa). Документация Apple очень хорошая, API хорошо организованы, и при необходимости легко создавать тестовые программы. Cocotron довольно хорош, если я так говорю, но это определенно не Какао, и я бы предположил, что источники сильно различаются между ними.
Внутренняя реализация Cocotron довольно отличается от Cocoa. Я бы не сказал, что в этом есть какой-то "реверс-инжиниринг"
Вы должны знать, что в истории есть отдельные реализации API Какао (вроде). Какао выросло из OpenStep, который изначально разрабатывался как спецификация с множеством различных реализаций на разных платформах.