ТЕХНИЧЕСКИЕ ИНСТРУКЦИИ
Вот небольшой тест. Зайдите на сайт Google и введите фразу для поиска "define: reverse engineering" (найти определение обратного проектирования). Вы получите список определений. Одни будут короткими и лаконичными, другие - пространными, путаными и понятными лишь для посвященных. Но, в сущности, все найденные определения можно разделить на две группы.
Первая, вероятно, лучше всего представлена определением, которое приводит сейчас Wikipedia: "Обратное проектирование - это процесс разборки чего-либо (устройства, электрического компонента, компьютерной программы и т. д.) на составные части и детального изучения его работы, обычно с намерением создать новое устройство или программу, которые выполняют ту же роль, но фактически ни в чем не копируют оригинал".
Особенности второго направления в наиболее краткой форме отражены в дефиниции обратного проектирования, данной Canadian Geospatial Data Infrastructure (CGDI): "Анализ продукта или иного результата какого-либо процесса с целью определить, как можно воспроизвести ноу-хау, использованное при создании продукта или процесса".
Вы можете решить, что это просто упражнения в семантике. В конце концов, большинство терминов имеет множество определений, иногда конфликтующих между собой. Какое имеет значение, насколько точно определено обратное проектирование?
Имеет. И очень большое. В мире, где отсутствует контроль за патентами, где очень слаб контроль за соблюдением прав интеллектуальной собственности и - что важнее всего - где лицензионные соглашения с конечными пользователями ПО (EULA - End-User License Agreement) формулируются весьма расплывчато, определение обратного проектирования будет иметь большое значение с точки зрения того, как разработчикам следует осуществлять интеграцию с продуктами и системами для создания новых, инновационных приложений.
Недавно разработчики и эксперты по вопросам безопасности столкнулись с полным или частичным запретом на свою работу, поскольку суд счел, что они нарушали положение о недопустимости обратного проектирования, которое обычно включается в текст EULA.
Я предпочел бы, чтобы EULA вообще не фигурировало во время судебных разбирательств. Но если суды намерены относиться к EULA серьезно, то нам необходимо убедиться, что они пользуются таким определением обратного проектирования, которое не будет препятствовать инновационной деятельности.
Мне хотелось бы, чтобы определение, приводимое в настоящее время в Wikipedia, стало определением обратного проектирования де-факто и использовалось судами при рассмотрении споров. В дефиниции Wikipedia ясно говорится, что обратное проектирование подразумевает глубокое проникновение в программный код приложения. Наиболее вероятный способ сделать это - декомпилировать приложение и скопировать большинство его функций. А наиболее вероятная цель - создать копию, которая будет конкурировать с оригиналом. Понятно, что это - наиболее сомнительный и наносящий наибольший урон вид обратного проектирования. Здесь речь не идет об инновациях или, во всяком случае, не о каких-то позитивных инновациях. Если бы суды пользовались этим определением при рассмотрении потенциальных нарушений условий EULA и других нарушений, права производителей ПО были бы защищены. Но одновременно была бы защищена и инновационная деятельность.
Однако когда суды применяют определение CGDI и другие подобные ему, мы ставим инновационную деятельность под угрозу. И не случайно оно и используется чаще всего.
Согласно этому определению, мы имеем дело с обратным проектированием в тех случаях, когда пользователь просто смотрит на приложение и изучает, как оно работает, как подключается к другим программам и процессам и как другие программы и процессы подключаются к нему. При этом не происходит проникновения в код или декомпиляции. И обычно ставится цель не создать копию приложения, а интегрировать его с другим ПО либо обнаружить в нем потенциальные проблемы.
В соответствии с этим определением мы ежедневно занимаемся обратным проектированием Всемирной паутины, а производители ПО для предприятий производят обратное проектирование целого набора систем для центров обработки данных.
Проблема заключается в том, что софтверные компании пользуются данной дефиницией, чтобы прекратить конкуренцию и оградить от вторжений те области, в которых они уже заняли определенные позиции.
Специалист по безопасности замечает, что у вашего приложения открыт сетевой порт, который делает его уязвимым? Нет проблем. Обвините его в обратном проектировании и нарушении условий EULA. Умный пользователь принес программу, которая расширяет возможности вашей системы? Вы в бешенстве, потому что не додумались до этого сами? Вы хотите создать нечто подобное, чтобы увеличить доходы, которые приносят пользователи ваших продуктов? Тогда совершайте преступление, именуемое обратным проектированием!