Экспертиза процесса разработки программного обеспечения

Экспертиза плагиата исходного кода

Устанавливаем технический характер совпадений между двумя кодовыми базами и признаки переработки; правовой вывод о нарушении прав делает суд.

Ориентир по стоимости экспертизы
от 100 000 ₽
Ориентир по сроку экспертизы
от 10 рабочих дней
  • Судебные экспертизы
  • Внесудебные исследования
  • Рецензирование заключений
01 Проверим компетенцию

До оплаты определим, относится ли задача к выбранному виду исследования.

02 Поможем подготовиться

Уточним вопросы и перечень материалов — готовый комплект не обязателен.

03 Работаем с регионами

Принимаем задачи из России, Казахстана и Беларуси; часть материалов можно передать электронно.

04 Сопровождаем результат

Разъясняем методику и выводы, отвечаем на вопросы суда в пределах компетенции эксперта.

О направлении

Подробно о задачах, объектах и методиках

Материал описывает типовые задачи и вопросы. Окончательные формулировки определяются с учётом компетенции эксперта, а правовую оценку обстоятельствам даёт суд.

Содержание страницы

    Экспертиза плагиата исходного кода — это сравнение двух программ по их текстам. Мы отвечаем на технические вопросы: какие фрагменты совпадают, сколько их, где они расположены, чем совпадение объясняется и чем не объясняется. Вывод о том, нарушены ли исключительные права, делает суд.

    Название направления обиходное. В законодательстве слово «плагиат» встречается практически только в части 1 статьи 146 Уголовного кодекса, где означает присвоение авторства, причинившее крупный ущерб; в части четвёртой Гражданского кодекса его нет. В заключении мы пользуемся терминами закона там, где за ними стоит техническое содержание: воспроизведение — как совпадение текста, переработка (модификация) — как его изменение. Вывода «плагиат имеется» эксперт не делает: это квалификация, а не техническое обстоятельство.

    Сравнение кодовых баз — самостоятельная задача внутри экспертизы процесса разработки программного обеспечения. Она устанавливает техническое сходство, а не объём работ, не качество и не правовое нарушение.

    Что сохранить прямо сейчас

    Прежде чем читать дальше и прежде чем куда-либо обращаться, займитесь своей стороной: она сейчас живая и меняется каждый день, а восстановить утраченное потом не выйдет.

    • не переписывайте историю репозитория и не удаляйте ветки: перенос коммитов, схлопывание истории и очистка старых веток уничтожают именно ту последовательность, которая показывает, как код создавался;
    • снимите зеркальную копию репозитория целиком, вместе с ветками и тегами, и запишите, когда и кем она снята;
    • выгрузите то, что хранится не у вас: журналы площадки размещения, записи систем сборки и учёта задач, почтовые уведомления об изменениях. Именно они, а не сам репозиторий, датируют события;
    • сохраните переписку с подрядчиком или сотрудником в исходном виде, вместе со служебными заголовками писем;
    • сохраните резервные копии за прошлые периоды и не давайте им перезаписаться по расписанию.

    Для первого обращения ничего из этого присылать не нужно — достаточно описать ситуацию. Но сделать это стоит до того, как спор станет явным для второй стороны.

    Что охраняется в программе, а что нет

    Авторские права на программы для ЭВМ охраняются так же, как авторские права на произведения литературы, и распространяются на форму выражения — исходный текст и объектный код (статья 1261 ГК РФ). Они не распространяются на идеи, концепции, принципы, методы, процессы, системы, способы, решения технических задач и на языки программирования (пункт 5 статьи 1259 ГК РФ).

    Отсюда следует:

    • совпадение функционального назначения ни о чём не говорит: две программы, решающие одну задачу, обязаны быть похожими по возможностям;
    • совпадение алгоритма само по себе не признак заимствования, а ожидаемое состояние: две независимые реализации двоичного поиска, разбора даты или постраничной выборки совпадут по идее почти наверняка;
    • совпадение архитектурного подхода — слоёв, шаблонов проектирования, разбиения на модули — это тоже решение технической задачи.

    Значение имеет совпадение самой формы — последовательности операторов, структуры и имён, комментариев, констант, ошибок и служебных остатков, воспроизведённых из другого текста. Именно такие совпадения и признаки их изменения фиксирует эксперт. Совпадения идей и алгоритмов он тоже описывает, но с прямым указанием, что они лежат за пределами охраны.

    Отдельный случай — переписывание программы на другом языке. Технически на таком расстоянии текст перестаёт быть носителем сравнимого признака, и общего работающего метода сопоставления нет. Но вывода «переписали — значит, нарушения нет» из перечня выше не следует: закон прямо относит к переработке (модификации) программы любые её изменения, включая перевод с одного языка программирования на другой (подпункт 9 пункта 2 статьи 1270 ГК РФ). Что именно было перенесено — охраняемая форма или только идея, — устанавливается по обстоятельствам дела, и оценку даёт суд.

    С чем обращаются

    Поводы разные, но сводятся к нескольким ситуациям:

    • подрядчик или бывший сотрудник выпустил продукт, похожий на ваш, и нужно понять, есть ли в нём ваш текст;
    • вас обвиняют в заимствовании, и нужно показать, что совпадения объясняются общими библиотеками, каркасом и типовыми решениями;
    • спор о том, что именно передавалось по договору: заказчик получил не тот код, который принимал, или не весь;
    • нужно сопоставить исследуемый код с материалом, депонированным при регистрации программы для ЭВМ;
    • перед сделкой требуется понять, что лежит в кодовой базе покупаемой компании: чьи компоненты, под какими лицензиями, есть ли чужие фрагменты;
    • перед выпуском продукта нужно проверить состав сторонних компонентов и наличие обязательных уведомлений.

    Задачи о качестве кода, о соответствии техническому заданию и о сроках разработки решаются другими исследованиями: экспертизой качества исходного кода и экспертизой сроков и хронологии разработки. Поиск закладок и вредоносного кода — тоже отдельная задача с другой методикой; сравнение кодовых баз для неё не предназначено. Патент на способ, реализуемый программой, — предмет патентоведческой экспертизы: сравнением текстов вопрос о его нарушении не решается.

    Совпадение и заимствование — не одно и то же

    Главная работа эксперта начинается после того, как совпадения найдены. Совпадение — наблюдение, заимствование — вывод, и между ними стоит отсев.

    Из подсчёта исключается и перечисляется в заключении то, что совпадает по причинам, не связанным с копированием:

    • обязательные конструкции языка и объявления, форма которых не оставляет вариантов;
    • код, порождённый средой разработки, генераторами, мастерами создания проекта и средствами объектно-реляционного отображения;
    • объявления публичных интерфейсов, схемы обмена и форматы протоколов — они совпадают потому, что предписаны;
    • общеупотребительные идиомы языка и рекомендованные его сообществом шаблоны;
    • сторонние библиотеки и их копии внутри каталогов проекта;
    • файлы локализации, миграции схемы данных, конфигурация и тестовые наборы.

    Существенность оставшегося обосновывается положительно, а не от противного: в совпавшем фрагменте должен быть воспроизведён элемент произвольного выбора — решение, форма которого не предопределена ни задачей, ни языком, ни каркасом, ни используемыми библиотеками, так что при самостоятельной работе оно было бы сделано иначе. Такими элементами чаще всего оказываются:

    • одинаковые дефекты и их последствия — самый сильный признак из существующих;
    • совпадающий неиспользуемый и отладочный код;
    • совпадающие комментарии, особенно вместе с опечатками в них;
    • одинаковые значения констант, не вытекающие из задачи;
    • одинаковые обходные решения под чужую ошибку;
    • имена, не относящиеся к предметной области.

    В заключении называется, в чём именно состоит произвольный выбор. Отсутствие подходящего объяснения из перечня выше существенности само по себе не создаёт: перечень открытый, и его исчерпанность эксперт не устанавливает. Совпадения, для которых произвольный элемент назвать не удалось, попадают в реестр с пометкой, что основание существенности не установлено, и в подсчёт существенных не входят.

    Отдельно проверяется третья версия: обе программы могут восходить к общему первоисточнику — примеру из документации, учебному материалу, публичному обсуждению. Тогда сходство не говорит о заимствовании одной из другой, и направление отношения между ними не устанавливается вовсе.

    Как сравнивают две кодовые базы

    Сравнение идёт последовательно, на пяти уровнях. Каждый следующий обнаруживает то, что предыдущий пропускает, но и отбрасывает часть признаков, которые предыдущий сохранял, — поэтому уровни применяются не вместо, а в дополнение друг к другу.

    1. Сверка контрольных сумм файлов. Устанавливает тождество содержимого, в том числе для файлов, переименованных или перемещённых в другой каталог, — и не более того: достаточно изменить один символ или сохранить файл с другими переводами строк, чтобы совпадение исчезло. Где именно файлы разошлись, этот уровень не показывает.
    2. Дословное текстовое сопоставление. Тексты сравниваются после приведения форматирования к единому виду, в двух прогонах — с комментариями и без них. Прогон с комментариями нужен потому, что совпадающие комментарии и опечатки в них — один из самых сильных признаков переноса; прогон без комментариев нужен потому, что комментарии удаляют и заменяют в первую очередь. Обнаруживает копирование с косметической правкой; переименования не обнаруживает.
    3. Сопоставление последовательности лексем. Сравниваются не файлы целиком, а любые их участки: текст превращается в поток значимых единиц, где отступы, пробелы, переносы и комментарии отброшены, а имена, ключевые слова, операторы и литералы сохранены. Это позволяет найти перенесённый фрагмент внутри в остальном непохожего файла и код, перемещённый между файлами, и снимает различия, которые не убирает выравнивание форматирования: перенос выражения на несколько строк, лишние скобки, вид кавычек, порядок модификаторов. Комментарии при этом из исследования не выпадают: они сопоставляются отдельным прогоном как самостоятельный поток и тоже по участкам, а не по файлам целиком, — совпадающий комментарий часто переживает переписанный вокруг него код. Переименования этот уровень по-прежнему не обнаруживает.
    4. Сопоставление с обезличиванием имён. Имена переменных, функций и классов заменяются на порядковые обозначения — в порядке первого появления внутри проверяемого участка, по одинаковому правилу для обеих сторон. Таблица замен строится заново для каждого участка и не зависит от имён в окружающем коде; повтор исходного имени даёт то же обозначение, разные имена — разные. Благодаря одинаковому правилу присвоения полностью переименованная копия после такой замены совпадает с оригиналом полностью — в том виде, к которому приведены оба текста. Сравнение ведётся скользящим окном внутри модулей, классов и функций, а не только целыми единицами, — иначе переименованный фрагмент, встроенный в чужую функцию, остался бы ненайденным.
    5. Сопоставление структуры. Для фрагментов, в которые внесли вставки, удаления или замену значений, сопоставляются формы синтаксического дерева — не на точное равенство, а по мере сходства с допуском разрывов: совпадением считается пара, у которой доля несовпадающих узлов не превышает объявленного значения, а сохранившиеся общие участки длиннее объявленной минимальной единицы. Написание имён и значения литералов не учитываются, типы и связи узлов сохраняются. Сопоставляются как целые модули, классы и функции, так и их части, ограниченные телами циклов и ветвлений.

    Минимальная единица сопоставления — наименьший фрагмент, который метод на данном уровне вообще способен сопоставить; порог — длина совпадения, начиная с которой найденная пара берётся в ручную проверку. Порог не бывает меньше минимальной единицы, и оба объявляются в заключении: фрагмент короче единицы не обнаруживается, и это ограничение метода, а не результат исследования.

    Ложные срабатывания даёт любой уровень выше второго, а четвёртый и пятый — больше всех: после обезличивания имён независимо написанные геттеры, конструкторы-обёртки и классы-переносчики данных совпадают буквально. Поэтому ни один автоматический результат не переносится в выводы напрямую: каждая прошедшая пара читается экспертом по исходному тексту. Прохождение отсева — условие необходимое, но не достаточное: в заключение попадает только то, для чего сверх отсева названо основание существенности.

    Ни один уровень не рассчитан на сравнение программ, написанных на разных языках. Отдельный случай — машинный перенос между родственными языками: там структура сохраняется почти без изменений, вместе с составом и порядком имён и следами применённого средства, и сопоставление возможно, хотя устойчивого метода с известной погрешностью для него нет. От редкости языка зависит не сам метод, а наличие готовых средств: без лексического и синтаксического анализаторов третий, четвёртый и пятый уровни либо строятся под задачу, либо выполняются вручную — дольше и грубее. Тогда порог, минимальная единица и объём проверенного объявляются для ручного разбора отдельно, а классы преобразований, чувствительность к которым подтвердить не удалось, из отрицательного вывода исключаются.

    Пороги, контроли и независимая проверка

    Числа, которыми настроен поиск, фиксируются до отбора совпадений, идущих в выводы, и приводятся в заключении — иначе результат нельзя ни повторить, ни оспорить по существу.

    Порог отбирает кандидатов, а не измеряет существенность: существенным может оказаться и короткое совпадение. Порог подбирается так, чтобы не утонуть в общеупотребительных конструкциях: при его снижении число пар растёт кратно, и в выборке начинают преобладать вызов конструктора, чтение файла настроек, размещение элемента интерфейса — то, что совпадает у всех. Если пороги подбирались по материалу, в заключении приводятся все опробованные значения, число пар при каждом и основание, по которому выбрано итоговое.

    Именно поэтому автоматическая выдача — не весь поиск. Короткие совпадения ищутся отдельно, адресно и по гипотезе: по конкретной опечатке в комментарии, по значению константы, по тексту сообщения, по имени вне предметной области. Такой поиск ведётся ниже рабочего порога, и в заключении указывается, что именно искали.

    Чувствительность проверяется положительными контролями, различающая способность — отрицательными. Контрольные образцы изготавливаются из материала дела и на его настройках: берётся функция из исследуемой кодовой базы, к ней применяется проверяемое преобразование — полная замена имён, встраивание переименованного фрагмента в чужое окружение, локальные вставки, — и копия помещается в отдельный контрольный экземпляр. Это изготовленный экспертом синтетический объект: объекты дела не изменяются, контрольный прогон идёт отдельно от основного сравнения, а его срабатывания не входят ни в реестр совпадений, ни в подсчёт объёма. Отрицательные контроли — заведомо независимые реализации той же задачи на том же языке и каркасе; они показывают, что при выбранных порогах метод не объявляет совпадением типовой код. Порог считается пригодным, если пропускает положительные контроли, а все срабатывания на отрицательных снимаются отсевом: для каждого называется типовое объяснение, и ни одно не проходит в существенные. Само по себе срабатывание на отрицательном контроле порог не порочит — на четвёртом и пятом уровнях оно неизбежно; порочит его срабатывание, для которого объяснения не нашлось, и такое их число, при котором сплошная ручная проверка перестаёт быть выполнимой. Число срабатываний и доля снятых отсевом приводятся в заключении. Если положительный контроль не найден, метод для этого класса изменений не применяется, отрицательный вывод на нём не строится, и класс называется в заключении.

    Найденные совпадения перепроверяются сторонними средствами поиска дубликатов кода на тех же данных, если такие средства для этого языка существуют, причём не только точные: спорнее всего как раз результаты обезличивания имён и структурного сопоставления. Пороги у разных средств измеряются в разных единицах — строках, лексемах, доле сходства, — поэтому в заключении указывается, какая настройка выбрана и как она соотносится с основной, а вместе с ней наименование средства, версия, режим и все параметры. Отрицательный результат стороннего средства не означает отсутствия совпадений: он означает лишь, что это средство, в этом режиме, при этих параметрах, на этих данных совпадений не выдало, — и учитывается только если чувствительность именно этого режима подтверждена положительным контролем. У нас был случай, когда режим стороннего средства не нашёл заведомо переименованную копию, — и этот режим из отрицательных выводов был исключён. Если пригодного стороннего средства для языка нет, это указывается в заключении, а независимая перепроверка сводится к повторному сопоставлению вручную по исходному тексту.

    С чем сравнивают и что значит «совпадений не найдено»

    Сравнение всегда идёт с конечным множеством источников, и это множество называется в заключении. Обычно в него входят кодовые базы, представленные сторонами, официальные дистрибутивы объявленных сторонних библиотек нужных версий и результаты адресного поиска характерных фрагментов в публичных индексах кода.

    Проверить «все программы, размещённые в открытом доступе», невозможно, и обещать этого нельзя. Полного реестра исходных текстов не существует и вести его некому; значительная часть кода лежит в закрытых репозиториях; репозитории удаляются, переименовываются и переносятся, так что код, существовавший в спорный период, может быть недоступен на день исследования; охват публичных индексов неполон и меняется.

    Поэтому отрицательный результат формулируется в своих границах: совпадений не обнаружено — в представленном материале, в перечисленном множестве источников по состоянию на дату исследования, применёнными методами при указанных порогах и минимальных единицах сопоставления, для тех классов преобразований кода, чувствительность к которым подтверждена контролями. Классы, по которым контроль не прошёл, называются отдельно: по ним отрицательный вывод не делается. Это не то же самое, что «код оригинален» и «заимствований нет». Все перечисленные границы приводятся в самом выводе, а не только в исследовательской части.

    Обращение к внешним поисковым сервисам согласуется заранее — с назначившим органом по делу или с заказчиком по договору — и оговаривается в заключении. Туда не передаются ни весь код, ни файлы целиком: только минимальные фрагменты, необходимые для проверки конкретной гипотезы. Найденное индексом — всегда лишь кандидат; он проверяется локально по исходному тексту. Если такое согласование не получено, адресный поиск не проводится, и границы отрицательного вывода сужаются соответственно.

    Что означает доля совпадений и чего она не означает

    Доля сама по себе не отвечает ни на один вопрос спора, и вопрос «сколько процентов» лучше не ставить в таком виде. Объём приводится в абсолютных величинах — сколько совпало строк и лексем, сколько затронуто функций и файлов, — и отдельно в долях, с обязательным указанием, что принято за целое и что из подсчёта исключено.

    Причин три. Знаменатель не самоочевиден: доля от всех строк проекта, от строк без комментариев, от строк без сторонних библиотек и порождённого кода, от лексем — это разные числа, расходящиеся в разы на одном материале. Доля измеряет объём, а не значимость: одна перенесённая процедура с нетривиальной реализацией и воспроизведённой в ней ошибкой весит больше, чем половина объёма, набранная на каркасе и автоматически созданных классах. И наконец, у процента нет прямого правового значения: авторские права распространяются на часть произведения, только если она сама по себе результат творческого труда (пункт 7 статьи 1259 ГК РФ), а это устанавливает суд.

    Поэтому база подсчёта задаётся явно и одинаково для обеих частей дроби: числитель и знаменатель считаются в одних единицах, а весь исключённый из сопоставления материал вычитается и из числителя, и из знаменателя. Доля приводится отдельно для каждой кодовой базы — один и тот же объём составляет от них разные доли. Разделение при этом техническое и трёхчастное: отдельно объём совпадений, для которых названо основание исключения; отдельно — тех, где назван воспроизведённый элемент произвольного выбора; отдельно — тех, что не покрыты ни тем, ни другим. Третий объём в существенные не входит и признаком заимствования не приводится, но из отчётности не исключается: без него сумма частей не сойдётся с общим объёмом совпадений. Отнесение этих объёмов к охраняемой и неохраняемой части произведения эксперт не производит.

    Объём считается по объединению диапазонов, и объединение выполняется независимо на каждой стороне: каждая строка и каждая лексема каждой кодовой базы засчитывается не более одного раза, сколько бы совпадений её ни покрывало — с несколькими внешними источниками, с несколькими редакциями одного источника, сразу на нескольких уровнях сравнения или с несколькими фрагментами противоположной стороны. Поэтому числа совпавших строк для двух баз, как правило, не равны, и это не ошибка подсчёта. Если совпадение начинается или заканчивается внутри строки, отдельно указываются число лексем и число затронутых строк, а сама строка не называется полностью тождественной.

    Переименование, обфускация и глубина изменений

    Устойчивость сравнения к изменениям кода не безусловна: она убывает ступенями.

    • изменение форматирования, отступов и переносов — не мешает: снимается приведением к единому виду;
    • удаление и замена комментариев — не мешает сопоставлению текста и лексем, но теряется один из самых сильных признаков;
    • систематическое переименование переменных, функций и классов — не мешает: обезличивание имён — штатный шаг, и после него полностью переименованная копия совпадает с оригиналом;
    • перестановка независимых операторов и вставка неиспользуемого кода — обнаруживается до определённой доли изменений; чем короче фрагмент, тем раньше он уходит ниже порога;
    • разбиение и слияние функций — обнаруживается настолько, насколько сохранившиеся куски длиннее минимальной единицы сопоставления: если функцию разобрали на короткие части, каждая из них может уйти ниже порога;
    • замена конструкций на равнозначные — сопоставление лексем перестаёт работать; структурное выдерживает точечные замены, пока доля изменённых узлов не превысила объявленного допуска, и перестаёт работать, когда заменена сама форма конструкции;
    • встраивание вызовов — структурное сопоставление перестаёт работать: границы объявлений, служащие его единицей, исчезают. Сопоставление с обезличиванием имён продолжает работать, пока сохранена последовательность операторов встроенного тела, — на это и рассчитано скользящее окно;
    • разворачивание циклов, смена структур данных, уплощение потока управления — перестают работать оба уровня: узел цикла исчезает, тело умножается, форма дерева меняется целиком. Остаются точечные признаки — совпадающие константы, строковые сообщения, таблицы данных, порядок обращений к внешним интерфейсам;
    • переписывание на другом языке вручную — предел метода: сравнимого признака в тексте не остаётся.

    Обфускация — запутывание кода — применяется и совершенно законно: так защищают от изучения собственный продукт и уменьшают размер сборки. Эксперт устанавливает технические факты: применялись ли преобразования, характерные для средств обфускации, и сохраняются ли после приведения кода к сопоставимому виду совпадения структуры, порядка операторов, констант и строковых сообщений. Цель этих преобразований и добросовестность тех, кто их выполнил, экспертом не устанавливаются: это обстоятельства, которые оценивает суд.

    Если преобразования оказались глубже того, что метод различает, честный результат — сообщение о невозможности дать заключение по поставленному вопросу с указанием, чего именно не хватило. Такой исход предусмотрен законом и лучше вывода, который не выдержит проверки.

    Хронология: что показывает история репозитория

    История изменений исследуется, и она полезна — но её доказательственное значение имеет чёткую границу.

    В распределённой системе контроля версий дату и имя автора коммита задаёт сам участник: они не удостоверяются, переопределяются параметрами команды и переменными окружения, а история переписывается целиком одной операцией, оставаясь при этом внутренне связной. Контрольные суммы объектов подтверждают связность цепочки, а не подлинность дат. В централизованных системах свойства ревизии — дата, автор, комментарий — не версионируются и изменяются администратором репозитория. И главное: дата коммита ставится на машине автора в момент локальной операции, а не при попадании коммита в общее хранилище; между этими событиями может пройти сколько угодно времени, а отправки может не быть вовсе.

    Подпись коммита положения не меняет: она покрывает объект коммита вместе с полями даты, которые задаёт сам подписывающий, и потому удостоверяет авторство подписи, а не момент её создания. Датирующей подпись становится только вместе с внешним удостоверением времени.

    Поэтому по копии репозитория, переданной стороной спора, эксперт восстанавливает последовательность и содержание изменений, но не удостоверяет их даты. Датирующее значение имеют следы, которые сторона не контролирует: серверные записи площадки размещения об отправке, зеркала и резервные копии у третьих лиц, записи систем сборки и учёта задач, почтовые уведомления, архивные снимки. Если таких материалов нет, вывод о хронологическом соотношении даётся как условный либо не даётся вовсе.

    Практическое следствие: если репозиторий находится под контролем другой стороны, его состояние надёжнее фиксировать не пересылкой архива, а осмотром по месту нахождения с получением архивной копии. Такой осмотр проводится не по инициативе эксперта: он назначается судом или следователем — поручением в определении о назначении экспертизы, осмотром доказательств по месту их нахождения либо выемкой; до возбуждения дела состояние можно зафиксировать в порядке обеспечения доказательств у нотариуса. Наряду с этим содержание к моменту привязывают истребование сведений непосредственно у площадки размещения и независимые зеркала у третьих лиц.

    Если исходного кода нет, а есть только программа

    Обычная ситуация: у обратившегося есть свой код и чужой установочный файл. Работать с этим можно, но глубина исследования зависит от того, как устроена платформа, а объём допустимых действий — от того, как файл к вам попал.

    Для программ, распространяемых в промежуточном представлении — Java, .NET, байт-код Python, — восстановление даёт текст, близкий к исходному. Имена классов, методов и полей в таких файлах присутствуют, поскольку нужны для связывания; отладочная информация добавляет к ним имена локальных переменных и привязку к строкам. Если к сборке применяли обфускацию, имена заменены на бессодержательные, и сравнение по ним не строится. Сравнение здесь по возможностям приближается к сравнению исходных текстов. Для машинного кода, собранного с оптимизацией, — C и C++ — комментарии и форматирование утрачены, имён локальных сущностей нет, а результат работы декомпилятора представляет собой его собственную реконструкцию, а не восстановленный текст; имена глобальных функций и классов сохраняются, если таблица символов не удалена, причём в C++ они несут ещё пространство имён и типы параметров. Промежуточное положение занимают Go и Delphi: их сборки несут имена функций, пакетов, модулей и типов в служебных структурах, и сравнение по именам там возможно. Во всех случаях наряду с именами работают признаки, устойчивые к компиляции: строковые и числовые константы, таблицы данных, структура вызовов, характерные последовательности инструкций.

    Полученный листинг — производный объект: другое средство, другая его версия и другие настройки дадут другой листинг из того же файла. Поэтому средство, версия, параметры и контрольная сумма результата приводятся в заключении.

    Теперь о правовом условии, и здесь важно не смешивать два разных случая. Пункт 2 статьи 1280 ГК РФ позволяет правомерному владельцу экземпляра изучать, исследовать и испытывать функционирование программы без согласия правообладателя — но действиями, входящими в обычное использование. Декомпилирование регулируется отдельно, пунктом 3 той же статьи: оно допускается правомерному владельцу, в том числе с поручением этих действий другому лицу, лишь ради совместимости с независимо разработанной программой и лишь в необходимой части. Исследование ради сравнения кодовых баз под пункт 3 не подпадает.

    Что тогда можно сделать до суда? На законно приобретённом или свободно распространяемом экземпляре без декомпиляции доступно многое: сравнение строковых и числовых констант, ресурсов, сообщений интерфейса, состава и имён внешних библиотек, метаданных сборки, а для платформ с промежуточным представлением — и имён классов и методов. Этого обычно хватает, чтобы понять, есть ли предмет спора и стоит ли идти дальше. Полное сравнение с декомпиляцией начинается, когда появляется основание: процессуальное поручение — определение суда, постановление следователя или дознавателя, — согласие правообладателя либо условия лицензии, прямо допускающие обратную разработку.

    Сторонние компоненты и открытые лицензии

    Здесь чаще всего ждут ответа, которого экспертиза дать не может. Эксперт устанавливает факты: какие компоненты включены, каких версий, какая лицензия объявлена в метаданных пакета и какой лицензионный текст фактически включён в состав артефакта, совпадают ли они, вносились ли в компоненты изменения, каким способом они подключены — исходным текстом, статической или динамической компоновкой, отдельным процессом, — и присутствуют ли в материалах уведомления об авторстве и тексты лицензий. Правовую квалификацию — соблюдены ли условия лицензионного договора — даёт суд.

    Условия анализируются по официальным текстам лицензий, а не по их бытовым названиям, и разграничиваются два разных положения:

    • использование для собственных нужд — экземпляры никому не передаются, в том числе подрядчикам, заказчикам и другим юридическим лицам той же группы. Обязанности раскрывать исходный текст здесь не возникает даже у копилефт-лицензий; отдельное исключение — лицензии, привязывающие обязанность к предоставлению доступа по сети;
    • распространение экземпляров — объём обязанностей зависит от лицензии: разрешительные требуют сохранить уведомления об авторстве и текст лицензии, часть из них — передать файл уведомлений; копилефт-лицензии требуют предоставить получателю соответствующий исходный текст, причём одни на уровне всего произведения, другие только на уровне библиотеки, третьи только на уровне изменённых файлов.

    По одному исходному коду эксперт видит состав компонентов и объявленные условия, но не видит того, что определяет исполнение этих условий: фактического комплекта поставки, сопроводительных файлов, текста пользовательского соглашения. Пока комплект не представлен, вывод даётся условно — отдельно для использования, отдельно для передачи экземпляров. Дистрибутив операционной системы при этом рассматривается как множество пакетов под разными лицензиями, а не как единый объект под одной.

    Код, сгенерированный нейросетью

    Вопрос задают часто. Установить по одному тексту программы, что он написан моделью, нельзя. Проверяемой методики с известной вероятностью ошибки не существует, а характеристики готовых определителей не измерены на материале, сопоставимом с материалом экспертизы, — приводить их долю ошибок как установленную величину нельзя. Признаки, на которые такие средства могли бы опираться, — выбор имён, стиль пояснений, предпочтение одних идиом другим — машинный и человеческий код не разделяют: они формируются стандартом оформления команды и средствами подсказки при наборе и, кроме того, восходят к тем же общедоступным источникам, на которых обучалась модель. Тем более нельзя назвать конкретную модель: у такого утверждения нет методической основы.

    Проверяемая постановка выглядит иначе, и по таким делам её обычно достаточно: совпадает ли фрагмент дословно или с незначительными изменениями с текстом из общедоступных источников; каковы объём и характер этого совпадения; есть ли в проекте технические следы работы инструментов — файлы настроек, служебные метки, характерные для средств генерации артефакты. Признаки, основанные на форме истории разработки — размер изменений, промежутки между ними, отсутствие промежуточных редакций, — сами по себе ничего не разделяют: та же картина возникает при переносе готового чужого текста, при работе без промежуточных фиксаций и при последующем схлопывании истории. Такие наблюдения приводятся как обстановка, а не как признак.

    Правовая рамка добавляет к этому ещё одно. Автором признаётся гражданин, творческим трудом которого создан результат (пункт 1 статьи 1228 ГК РФ). Как эта норма применяется к фрагменту, полученному от модели, российская практика пока не устоялась, и вопрос о наличии автора и правообладателя решает суд. Спор обычно сводится к другому: совпадает ли фрагмент по форме выражения с конкретным чужим текстом — это проверяется технически, а охраняется ли эта форма, определяет суд — и соблюдены ли условия использования самого сервиса, что относится к условиям договора.

    Что может установить эксперт и чего установить нельзя

    Возможность ответа зависит от того, что сохранилось и что передано. Мы отделяем то, что видно в самом объекте, от предположения, которое имеющиеся данные проверить не позволяют, и разносим результат по уровням: непосредственно установлено; установлено как признак, но не как состав поставки; подтверждено внешними сведениями, но не исследованием самого файла; только заявлено в представленных документах; не установлено. Этот перечень печатается в заключении, а не подразумевается.

    При достаточных материалах вы получите ответ о следующем:

    • какие фрагменты двух кодовых баз совпадают, где расположены, каков их объём и характер — дословное совпадение, совпадение после переименования, совпадение с изменённой структурой;
    • чем совпадения объясняются: типовым решением, общей библиотекой, порождённым кодом, общим первоисточником — или таким объяснением не покрываются;
    • есть ли признаки переработки и в чём они состоят, а при наличии истории разработки или внешних датирующих следов — и в каком направлении она производилась;
    • какие сторонние компоненты включены, каких версий и под какими объявленными условиями;
    • какова последовательность изменений по представленной истории разработки и какими независимыми источниками она подтверждается;
    • соответствует ли исследуемый код материалу, депонированному при государственной регистрации программы для ЭВМ, в объёме этого материала.

    О чём заключение не скажет:

    • какая кодовая база первична. По двум снимкам без истории разработки устанавливается наличие и характер связи между ними, но не направление заимствования: для него нужны история изменений, промежуточные редакции или внешние датирующие следы;
    • кто автор. Автор по тексту программы не устанавливается — ни по одному тексту, ни в сравнении с образцами кода конкретных лиц: верифицируемого признака авторства в коде нет, проверяемой методики с измеренной вероятностью ошибки не существует, а индивидуальные особенности письма стираются общим стандартом оформления, средствами подсказки при наборе и коллективной работой над файлом. Сопоставимы только отдельные технические следы — учётные данные в истории изменений, служебные метаданные средств разработки, совпадающие настройки среды, — и разрешается такой вопрос не сравнением текстов, а исследованием этих следов и кадровых документов;
    • непрерывно ли создавался код. Без промежуточных редакций постепенную самостоятельную разработку не отличить от единовременного внесения готового чужого текста;
    • имела ли одна сторона доступ к коду другой. Это устанавливается по договорам, кадровым документам и журналам доступа; по самому коду — нет. Если журналы доступа представлены, их исследование — самостоятельная задача;
    • что происходило за пределами переданного. Если код передан выборочно или распечаткой, все выводы об объёме относятся к представленному материалу, а не к программе.

    Наконец, техническое не переходит в правовое само собой. Совпадение фрагментов — не вывод о нарушении авторских прав. Оригинальность, охраноспособность, авторство, принадлежность исключительного права, правомерность использования, добросовестность и умысел относятся к обстоятельствам, которые устанавливает суд. Творческий характер произведения при этом предполагается, пока не доказано иное, и экспертом не проверяется.

    Какие материалы нужны и на каком основании вы ими владеете

    Для первого обращения файлы не нужны совсем: достаточно описать ситуацию, назвать языки и примерный объём кода и сказать, что у вас есть на руках. Готовый комплект не обязателен, недостающее мы назовём при разборе.

    К передаче подготовьте:

    • исходный текст вашей программы — предпочтительно зеркальной копией репозитория с историей, а не выгрузкой последней версии;
    • всё, что у вас есть о второй программе: исходный текст, дистрибутив, адрес публичной страницы, скриншоты, документацию;
    • сведения о сборке: версии языка и библиотек, файл фиксации версий, конфигурацию сборки;
    • договоры, техническое задание, акты приёмки и переписку о согласованных изменениях;
    • трудовые договоры, должностные инструкции и служебные задания разработчиков — если спор с бывшим сотрудником;
    • свидетельство о государственной регистрации программы для ЭВМ вместе с депонированным материалом, если регистрация была;
    • процессуальный документ, если экспертиза уже назначена.

    От регистрации ждут и большего, и меньшего, чем она даёт. Внесённые в реестр сведения считаются достоверными, пока не доказано иное (пункт 6 статьи 1262 ГК РФ), — это опровержимая презумпция, и в споре она полезна. При этом регистрация добровольна, права возникают и без неё, а при регистрации не проверяют ни авторство, ни оригинальность, ни отсутствие заимствований. Практическая ценность свидетельства для исследования — приложенный депонированный материал: с ним можно технически сверить код в объёме депонированного. Патент на программу для ЭВМ как таковую российское право не выдаёт (пункт 5 статьи 1350 ГК РФ); при этом техническое решение, реализуемое программой, может быть защищено патентом на способ или устройство — тогда предмет спора другой.

    И главный вопрос, который стоит задать себе до отправки: на каком основании второй код у вас. Правомерно приобретённый экземпляр, свободно распространяемый дистрибутив, общедоступный репозиторий, материалы, приобщённые к делу, ваш собственный код — обычные и законные источники, с ними работаем. Материалы, полученные с преодолением защиты, по чужим учётным данным или в обход обязательств о конфиденциальности, мы не берём: их получение и передача создают самостоятельный риск для передавшего, а использование чужих учётных данных образует и самостоятельный состав. Вопрос о допустимости доказательства решает суд; наш отказ означает только, что мы не принимаем такой материал в работу. Если код принадлежит другой стороне и закрыт, его получают процессуально — ходатайством об истребовании доказательств, обязанием представить материалы в определении о назначении экспертизы, выемкой по уголовному делу либо в порядке обеспечения доказательств.

    Действующие пароли, ключи и доступы к чужим системам не передавайте вообще. Объект исследования должен быть зафиксирован, а не изменяться во время работы.

    Материалы принимаются по описи: имена файлов, размеры, контрольные суммы, а для репозиториев — точные идентификаторы состояний и дата получения копии. Опись прилагается к заключению, и по ней впоследствии видно, что исследован именно тот объект, который приобщён к делу. Копия базы и репозитория обычно содержит сведения о людях и коммерческую информацию, поэтому объём передаваемого ограничивают тем, что нужно для ответа на вопросы, а условия обращения с материалами согласуют до передачи.

    Если судебная экспертиза уже назначена, порядок другой: объекты поступают эксперту от назначившего органа вместе с определением или постановлением о назначении экспертизы и по описи. Назначенный по делу эксперт не принимает материалы от стороны напрямую, не принимает поручение о производстве экспертизы помимо назначившего органа и не собирает материалы самостоятельно; вступать в личные контакты с участниками процесса ему запрещено, если это ставит под сомнение его незаинтересованность в исходе дела. Процессуально предусмотренные контакты — присутствие сторон при производстве экспертизы, ответы на вопросы суда в заседании, осмотр по поручению назначившего органа — под этот запрет не подпадают. И запрет не исключает обращения стороны к другому, не назначенному по делу специалисту за консультацией или рецензией по законно полученным материалам.

    Примеры вопросов на экспертизу

    Формулировки ниже — ориентир для подготовки ходатайства, а не готовый перечень. Окончательный круг и редакцию вопросов определяет суд; сторона вправе предложить свои, и отклонение предложенного вопроса суд мотивирует. Вопросы о том, охраноспособен ли код, кто его автор, кому принадлежат права и нарушены ли они, эксперту не ставятся: это вопросы права.

    Учтите ограничение, о котором чаще всего узнают поздно: вопросы о направлении заимствования — какая из программ первична, переработана ли одна из другой — разрешимы только при наличии истории изменений, промежуточных редакций или внешних датирующих следов. Если эксперту передадут лишь два снимка кодовых баз, ответа на такой вопрос не будет; поэтому одновременно с назначением экспертизы имеет смысл заявить об истребовании истории разработки.

    1. Имеются ли в исходном тексте ПО [1] фрагменты, тождественные или сходные с фрагментами исходного текста ПО [2]; каковы их расположение, объём и характер?
    2. Обусловлены ли выявленные совпадения использованием стандартных библиотек, шаблонов каркаса, автоматически сгенерированного кода, общепринятых решений или требований платформы — или таким объяснением они не покрываются?
    3. Имеются ли признаки переработки (модификации) и в чём они состоят; при наличии истории изменений или внешних датирующих следов — в каком направлении переработка производилась?
    4. Каково количество совпавших строк и лексем и какую долю они составляют от объёма исследованного кода ПО [1]; какой способ подсчёта применён и что из подсчёта исключено?
    5. Могли ли выявленные совпадения возникнуть в результате независимой разработки либо использования обеими сторонами общего общедоступного первоисточника?
    6. Имеются ли в исходном тексте ПО [1] преобразования, характерные для средств обфускации; сохраняются ли после приведения обоих текстов к сопоставимому виду совпадения структуры, порядка операторов, констант и строковых сообщений; если применённые преобразования к сопоставимому виду не приводятся, какие именно?
    7. Какова последовательность изменений исходного текста по представленной истории разработки; имеются ли признаки изменения самой истории; подтверждается ли она данными из иных материалов, представленных эксперту, и в какой части?
    8. Какие сторонние компоненты включены в ПО [1], каких версий, какие лицензионные тексты и уведомления об авторстве объявлены в составе этих компонентов и какие из них присутствуют в представленных материалах?
    9. Каким способом сторонние компоненты подключены к ПО [1] — исходным текстом, статической или динамической компоновкой, отдельным процессом?
    10. Соответствует ли исходный текст ПО [1] материалу, депонированному при государственной регистрации программы для ЭВМ по свидетельству [реквизиты], в объёме депонированного материала?
    11. Каково функциональное назначение ПО [1]; какие языки, каркасы и библиотеки использованы при его создании?
    12. Достаточно ли представленных материалов для ответа на поставленные вопросы; каких материалов недостаёт и что можно установить без них?

    Что вы получите и в каком формате

    Результатом будет письменное заключение, разделённое на две части. В первой излагаются наблюдения: какие файлы и фрагменты сопоставлялись, каким методом, при каких порогах, какие совпадения зафиксированы, где расположены и каков их измеренный объём. Эта часть не содержит оценок и проверяема целиком: любое приведённое совпадение оппонент найдёт по указанным файлам и строкам. Во второй даётся истолкование: какие совпадения объяснимы типовыми решениями, общим инструментарием, порождённым кодом или общим первоисточником, а какие такого объяснения не имеют и по каким основаниям.

    К заключению прилагается реестр совпадений: для каждого — имена файлов и диапазоны строк в обеих кодовых базах, контрольные суммы этих файлов, все уровни сравнения, на которых совпадение зафиксировано, измеренный объём и основание, по которому совпадение признано существенным, отклонено как объяснимое либо оставлено с пометкой, что основание существенности не установлено. Для декомпилированных объектов указываются строки полученного листинга вместе со средством, версией и параметрами, при которых он получен; для структурных совпадений — границы соответствующих объявлений. Отдельным приложением идёт перечень исключённого из сопоставления с указанием причины исключения.

    Форма вывода выбирается по материалу, а не по задаче обращения, и до исследования не обещается:

    • категорический — когда в совпадениях воспроизведён названный в заключении элемент произвольного выбора и ни одно из проверенных объяснений к ним не подошло. Категоричность относится к факту воспроизведения этого элемента и к тому, что совпадение не объясняется ни одним из перечисленных в заключении типовых источников: утверждения о невозможности независимого совпадения вообще такой вывод не содержит, потому что множество проверенных источников конечно. Направление заимствования он не указывает, если нет истории изменений или внешних датирующих следов;
    • вероятный — когда сходство установлено, но произвольный элемент назвать не удалось либо конкурирующее объяснение остаётся не менее правдоподобным, чем заимствование;
    • альтернативный — когда данные допускают несколько объяснений и ни одно по имеющемуся материалу не предпочтительнее остальных; все они названы в выводе;
    • условный — когда результат зависит от обстоятельства, которое эксперт не проверял; это обстоятельство называется прямо в выводе;
    • отрицательный в пределах исследованного — в границах, описанных выше;
    • сообщение о невозможности дать заключение — с указанием, каких материалов не хватило.

    Готовое чужое заключение проверяет рецензия на экспертизу процесса разработки программного обеспечения. Она разбирает исходные данные, методы и выводы и может обосновать ходатайство, но сама заключение не отменяет и нового исследования объекта не заменяет.

    От чего зависят стоимость и срок

    Ориентир по стоимости — от 100 000 ₽, по сроку — от 10 рабочих дней; отсчёт начинается после того, как комплект материалов проверен и принят. Точный расчёт зависит от объёма кодовых баз, числа сравниваемых объектов, числа языков, глубины требуемого сравнения и от того, нужно ли работать с собранными файлами вместо исходного текста.

    Автоматический поиск совпадений занимает малую часть времени; основное расходуется на ручную проверку каждого срабатывания и на отделение совпадений, объяснимых типовыми решениями. Поэтому сжатый срок означает не ту же работу быстрее, а более узкую задачу — меньше модулей, меньше уровней сравнения. Если в предложенный срок провести проверку нельзя, мы говорим об этом до начала работы.

    Задачу, по которой уже из присланных материалов видно, что вывода не получится, мы просто не берём в работу и говорим об этом сразу. Это не обещание положительного вывода: отказ на входе означает лишь, что невозможность видна уже из перечня материалов. Если же невозможность выясняется по итогам полноценного исследования, это результат, а не пустой счёт: заключение объясняет, почему ответа нет и чего именно не хватило. Бывает и частичная невозможность: тогда указывают, на какие вопросы ответ получен, а на какие нет и по какой причине.

    Если объект целиком написан на одном языке, посмотрите профильные страницы — по Java, по Python или по C#: там тот же метод описан на материале конкретной платформы, с её средствами сборки, каркасами и типовыми источниками ложных совпадений.

    Проведение экспертизы по уголовному делу

    Судебная экспертиза по уголовному делу производится государственными судебными экспертами и иными экспертами из числа лиц, обладающих специальными знаниями.

    Согласно постановлению Пленума Верховного Суда Российской Федерации от 21 декабря 2010 г. № 28 «О судебной экспертизе по уголовным делам», негосударственными судебно-экспертными учреждениями признаются некоммерческие организации, созданные на основании Гражданского кодекса Российской Федерации и Федерального закона «О некоммерческих организациях» и ведущие судебно-экспертную деятельность согласно своим уставам.

    По сведениям организации, проведение судебных экспертиз предусмотрено её уставом (см. действующую редакцию в разделе «Документы организации»). Это само по себе не означает автоматического поручения любой экспертизы. Возможность поручить конкретное исследование определяет назначающий орган с учётом предмета дела, квалификации эксперта, оснований для отвода и действующего перечня экспертиз, выполняемых только государственными судебно-экспертными организациями.

    Актуализировано
    Форматы работы

    Стоимость и сроки

    Указан предварительный ориентир. Точный расчёт зависит от вопросов, объёма материалов, количества объектов и необходимости выезда. Срок рассчитываем после получения и проверки необходимого комплекта.

    По договору

    Внесудебное исследование

    от 100 000 ₽
    от 10 рабочих дней
    точная стоимость будет определена после ознакомления с объектом исследования

    Итог — внесудебное исследование или документ специалиста по договору. Название документа, порядок его представления и оценка зависят от вида процесса.

    Заказать исследование
    Проверка готового заключения

    Рецензирование

    от 50 000 ₽
    10 рабочих дней
    точная стоимость будет определена после ознакомления с заключением и приложениями

    Итог — письменная рецензия на готовое заключение. Она проверяет исходные данные, методы и выводы, но не отменяет заключение и не заменяет новое исследование объекта.

    Передать заключение на проверку
    Письменный ответ эксперта

    Консультация и справка

    от 20 000 ₽
    2-3 рабочих дня
    точная стоимость будет определена после ознакомления с объектом исследования

    Поможет предварительно оценить вопрос, определить перспективу исследования и спланировать дальнейшие действия.

    Описать вопрос
    Разбор задачи — без оплаты

    Бесплатно определим вид исследования, проверим, нет ли явных пробелов в комплекте материалов, и назовём ориентировочные срок и стоимость. Если уже на этом этапе видно, что задачу решить нельзя, скажем об этом и не будем предлагать полное исследование. Изучение материалов по существу с письменным ответом — платная консультация; её стоимость согласуем до начала.

    Получить предварительную оценку
    Организация исследования

    Как строится работа над экспертизой

    До начала исследования уточним предмет задачи, состав материалов и формат итогового документа.

    1. 01 Предварительный разбор

      Проверяем компетенцию и сообщаем, можно ли провести исследование по поставленной задаче.

    2. 02 Вопросы и материалы

      Уточняем вопросы и сообщаем, каких документов или объектов не хватает.

    3. 03 Экспертное исследование

      Эксперт применяет профильные методики, фиксирует ход работы и обосновывает выводы.

    4. 04 Заключение и пояснения

      Передаём результат и при необходимости разъясняем суду применённую методику и выводы.

    Выполненные исследования

    Практика по этому направлению

    Краткие описания задач с указанием суда и ссылкой на опубликованные материалы дела. Формулировки взяты из карточек дел и воспроизводят вопросы, поставленные назначившим органом: они показывают, что исследовалось, а не то, какие вопросы можно поручить эксперту. Виновность, принадлежность прав и обоснованность требований разрешает суд.

    Все примеры по направлению
    Опубликованный пример
    Завершена в июле 2024 года

    Экспертиза №151046

    Комплексная судебная искусствоведческая и компьютерно-техническая экспертиза проводилась по определению Арбитражного суда республики Крым с целью установления оригинальности дизайна интернет-сайта истца и выявления фактов частичного копирования или переработки его элементов в дизайне интернет-сайта ответчика.

    Арбитражный суд Республики КрымДело №А83-22966/2023
    Участники: ООО "ЮРИСТ.СПБ",
    Открыть описание
    Опубликованный пример
    Завершена в мае 2023 года

    Экспертиза №133852

    Судебная компьютерно-техническая экспертиза по установлению фактов воспроизведения, переработки и использования компонентов программного обеспечения.

    Гагаринский районный суд города МосквыДело №02-0033/2023
    Участники: АО "СталкерСофт", КоммьюниГейт Инк, КоммьюниГейт Системс САС
    Открыть описание
    Опубликованный пример
    Завершена в ноябре 2022 года

    Экспертиза №116890

    Судебная компьютерно-техническая экспертиза программного обеспечения, проведенная по определению Гагаринского районного суда г. Москвы, имела целью комплексный анализ исходных и объектных кодов различных версий программных продуктов "Pronto!

    Гагаринский районный суд города МосквыДело №02-0033/2023
    Участники: АО "СталкерСофт", КоммьюниГейт Инк
    Открыть описание
    Опубликованный пример
    Завершена в январе 2022 года

    Экспертиза №107870

    Судебная компьютерно-техническая экспертиза была проведена для оценки степени сходства между двумя программными продуктами: ЛИС «Innovasystem» и ЛИС «Рослабсистема».

    Арбитражный суд города МосквыДело №А40-82586/2021
    Участники: ООО "РЕГИОНАЛЬНОЕ ОБЪЕДИНЕНИЕ САМОСТОЯТЕЛЬНЫХ ЛАБОРАТОРНЫХ СИСТЕМ", ООО "НОВОЛАБСИСТЕМ"
    Открыть описание
    Опубликованный пример
    Завершена в январе 2022 года

    Экспертиза №101762

    Судебная компьютерно-техническая экспертиза по определению факта переработки исходных текстов программ для ЭВМ.

    Арбитражный суд города МосквыДело №А40-8863/2021
    Участники: АО "ВИСТ ГРУПП", ООО "В2-ГРУПП"
    Открыть описание
    В открытом доступе представлена часть выполненных исследований по разным объектам и судебным делам. Сведения, защищённые законом или условиями конфиденциальности, не раскрываются. Чтобы проверить возможность исследования по вашей ситуации, опишите задачу.

    Документы организации

    Ответы специалистов

    Частые вопросы

    Практические пояснения о назначении, материалах и использовании экспертного заключения.

    Все вопросы по направлению
    Для чего нужна экспертиза, если есть подозрение на заимствование кода?

    Затем, что спор о коде почти всегда упирается в вопрос, на который стороны отвечают по-разному: совпадение здесь случайное или перенесённое. Заключение переводит спор из области впечатлений в проверяемую форму — какие фрагменты совпадают, где они, каков их объём и чем совпадение объясняется.

    Отдельная и часто более важная работа — отсев. Две программы одного назначения обязаны быть похожими: у них общие библиотеки, общий каркас, одни и те же обязательные конструкции языка и автоматически созданные файлы. Всё это исключается до подсчёта. Но и оставшегося мало: в выводы попадает только то, где воспроизведён элемент произвольного выбора — решение, которое при самостоятельной работе было бы сделано иначе.

    Чего заключение не делает: оно не устанавливает нарушения авторских прав, авторства и виновности. Это правовые обстоятельства, и оценивает их суд. Спор о коде часто оказывается частью более широкого спора о разработке: тогда его рассматривают в рамках экспертизы процесса разработки.

    Отдельная страница: Для чего нужна экспертиза, если есть подозрение на заимствование кода?
    Какие материалы нужны, кроме самого исходного кода?

    Для первого обращения — ничего: достаточно описать ситуацию, назвать языки и примерный объём кода. Когда дойдёт до исследования, кроме самого кода помогают история разработки — лучше зеркальной копией репозитория, а не выгрузкой последней версии, и она же нужна экспертизе сроков и хронологии разработки, — договоры, техническое задание и акты приёмки, а при споре с бывшим сотрудником трудовые договоры и служебные задания.

    Свидетельство о регистрации программы для ЭВМ полезно дважды: внесённые в реестр сведения считаются достоверными, пока не доказано иное (пункт 6 статьи 1262 ГК РФ), а с приложенным депонированным материалом можно сверить код. Но по существу при регистрации ничего не проверяют — ни авторство, ни оригинальность, ни отсутствие заимствований: сведения вносят со слов заявителя, и презумпция значит лишь, что опровергать их придётся другой стороне.

    Про второй код спросите себя заранее: на каком основании он у вас. Правомерно приобретённый экземпляр, дистрибутив, общедоступный репозиторий — обычные источники. А если код принадлежит другой стороне и закрыт, его получают процессуально: ходатайством об истребовании, определением о назначении экспертизы, выемкой.

    Отдельная страница: Какие материалы нужны, кроме самого исходного кода?
    Найдёт ли экспертиза заимствование, если код переименовали или запутали?

    Переименование не мешает: имена обезличиваются до сравнения, и полностью переименованная копия совпадает с оригиналом посимвольно. Перестановка операторов и вставка неиспользуемого кода обнаруживаются на уровне, где сравнивают структуру и порядок операций, а не буквы. Разбиение и слияние функций — хуже: если функцию разобрали на короткие части, каждая может уйти ниже порога.

    Обфускация — запутывание кода — приём законный и распространённый: так защищают собственный продукт и уменьшают размер сборки. Эксперт устанавливает только факты: применялись ли характерные преобразования и сохраняются ли после приведения к сопоставимому виду совпадения структуры, констант и сообщений. Зачем это делали, оценивает суд.

    Предел есть. Уплощение потока управления, смена структур данных и переписывание на другом языке уводят фрагмент за границы сравнения по тексту и структуре. Тогда работают только точечные признаки — совпадающие константы, сообщения, таблицы данных, — и вывод даётся в их границах. Если за предел ушёл весь спорный материал, эксперт сообщает о невозможности дать заключение и говорит, чего не хватило.

    Отдельная страница: Найдёт ли экспертиза заимствование, если код переименовали или запутали?
    Сколько стоит экспертиза плагиата исходного кода и от чего зависит цена?

    Ориентир — от 100 000 ₽, срок — от 10 рабочих дней. Точную сумму называем после того, как посмотрим материалы. На расчёт влияют объём кодовых баз, число сравниваемых объектов и языков, глубина требуемого сравнения и то, есть ли исходный текст или работать придётся с собранной программой — последнее дороже всего.

    Разбор задачи бесплатный: скажем, относится ли она к нашей компетенции, каких материалов не хватает и на какие вопросы по такому материалу вообще можно ответить, а на какие нет. Каким окажется вывод, до исследования не знает никто, и мы этого не предсказываем. Если разбор требует долгой работы эксперта, предупредим до начала — тогда это платная консультация.

    Автоматический поиск совпадений занимает малую часть работы; основное время уходит на ручную проверку каждого срабатывания и на отделение совпадений, объяснимых типовыми решениями.

    Отдельная страница: Сколько стоит экспертиза плагиата исходного кода и от чего зависит цена?
    Можно ли доказать, что часть программы написана нейросетью?

    По одному тексту программы — нельзя. Проверяемой методики с известной вероятностью ошибки не существует, а признаки, на которые готовые определители могли бы опираться — выбор имён, стиль пояснений, предпочтение идиом, — машинный и человеческий код не разделяют: они задаются стандартом оформления команды и восходят к тем же источникам, на которых обучалась модель. Назвать конкретную модель тем более нельзя.

    Проверяется другое, и по таким спорам этого обычно достаточно: совпадает ли фрагмент с текстом из общедоступных источников, каков объём совпадения, есть ли в проекте следы работы инструментов — настройки, служебные метки. Форма истории разработки признаком не является: та же картина возникает при переносе чужого готового текста.

    Правовая сторона не устоялась: автором признаётся гражданин (пункт 1 статьи 1228 ГК РФ), а как норма применяется к машинному фрагменту, решает суд.

    Отдельная страница: Можно ли доказать, что часть программы написана нейросетью?
    Сколько длится экспертиза плагиата исходного кода?

    Ориентир — от 10 рабочих дней, и отсчёт начинается не с обращения, а с момента, когда комплект материалов проверен и принят. Чаще всего время теряется до начала работы, пока выясняется, чего в переданном не хватает. Чтобы отсчёт начался раньше, присылайте историю разработки сразу, а не по запросу.

    Срок растягивают объём кодовых баз, число сравниваемых объектов и языков, работа с собранной программой вместо исходного текста и большое число вопросов. Отдельно — вызов эксперта в заседание и появление встречного заключения.

    Сократить срок можно сужением задачи: перечнем модулей, которые действительно спорны, и уровнем сравнения. За счёт ручной проверки срабатываний — нельзя: именно она отделяет заимствование от типового решения. Если в предложенный срок уложиться нельзя, скажем об этом до начала работы.

    Отдельная страница: Сколько длится экспертиза плагиата исходного кода?
    Что даёт заключение о совпадениях кода в суде?

    Заключение отвечает на технические вопросы: какие фрагменты совпадают, каков их объём и характер, есть ли признаки переработки, какова последовательность изменений. Оно не устанавливает ни нарушения права, ни виновности, ни принадлежности прав — это делает суд.

    В деле заключение работает как одно из доказательств: заранее установленной силы оно не имеет и оценивается наряду с остальными (часть 3 статьи 86 ГПК РФ, часть 5 статьи 71 АПК РФ). У внесудебного исследования наименование и порядок представления зависят ещё и от вида процесса. При несогласии с чужим заключением сторона заявляет ходатайство о вызове эксперта за разъяснениями либо о дополнительной или повторной экспертизе; рецензия такое ходатайство обосновывает, но заключения не отменяет.

    Какие меры ответственности возможны и какие требования заявлять — вопросы правовой квалификации. Мы на них не отвечаем: за этим нужно к юристу по интеллектуальным правам.

    Отдельная страница: Что даёт заключение о совпадениях кода в суде?
    Можно ли проверить код на заимствования и лицензии до релиза?

    Можно, и заказывают такое регулярно — до выпуска исправить дешевле. По итогам вы получите состав включённых сторонних компонентов с версиями, объявленные и фактически вложенные лицензионные тексты, перечень компонентов, для которых уведомления об авторстве или текст лицензии в представленных материалах не найдены, и найденные совпадения с проверенным перечнем источников. Вывод о том, что уведомления отсутствуют в самой поставке, по исходному коду не делается: для этого нужен готовый комплект.

    Границы жёсткие. Результат относится к конкретной версии кода на дату проверки и устаревает при первом же изменении состава зависимостей. Отсутствие найденных совпадений означает только их отсутствие в проверенном множестве: компонент, скопированный без метаданных пакета, или переименованная копия чужой библиотеки могут не иметь распознаваемых признаков.

    Соблюдены ли условия лицензий — правовая оценка, её даёт суд, а не проверка. Как сведения о принятых мерах повлияют на объём ответственности, тоже решает суд; рассчитывать, что сам факт проверки от неё освободит, не стоит (пункт 3 статьи 1250 ГК РФ).

    Отдельная страница: Можно ли проверить код на заимствования и лицензии до релиза?
    Можно ли исследовать только программу, без исходного кода?

    Можно, но глубина зависит от платформы. У программ в промежуточном представлении — Java, .NET, байт-код Python — имена классов и методов присутствуют всегда, они нужны для связывания, и восстановление даёт текст, близкий к исходному. У машинного кода C и C++ имён локальных сущностей нет, а листинг декомпилятора — реконструкция, а не исходный текст. Go и Delphi занимают промежуточное положение: имена функций и типов лежат в служебных структурах.

    Как это выглядит на конкретной платформе, показано на странице экспертизы исходного кода на Java. Редкий или устаревший язык исследование не исключает, но меняет инструменты: готового анализатора может не быть, а на нём держится структурное сопоставление, — тогда разбор ведут вручную, дольше и грубее.

    Отправляя чужой установочный файл, скажите, откуда он у вас: декомпилирование ограничено пунктом 3 статьи 1280 ГК РФ, и для сравнения кодовых баз нужно поручение суда, согласие правообладателя или разрешающая лицензия.

    Отдельная страница: Можно ли исследовать только программу, без исходного кода?
    Что будет, если есть только фрагменты кода или его очень много?

    Работать можно и с тем и с другим, меняются лишь границы вывода. По фрагментам устанавливают совпадения в пределах представленного, но не долю от программы: доля считается от переданного, и в заключении это сказано прямо. При большом объёме сплошная ручная проверка может не уложиться в срок. Тогда очередь строится по признакам, наблюдаемым до разбора: длина совпадения, редкость совпавших лексем и констант, число уровней, где оно зафиксировано, расположение вне порождённого кода и библиотек. Правило очереди и объём просмотренного приводятся в заключении, и отрицательный вывод даётся в этих границах.

    Важнее другое ограничение. По двум снимкам кодовых баз без истории разработки устанавливается наличие и характер связи между ними, но не то, какая первична.

    Поэтому историю разработки передавайте вместе с кодом. Но учтите: даты в копии репозитория, переданной стороной, эксперт не удостоверяет — их задаёт сам участник. Датируют события следы, которые сторона не контролирует: записи площадки размещения, зеркала, резервные копии.

    Отдельная страница: Что будет, если есть только фрагменты кода или его очень много?
    Обращение в организацию

    Отправьте материалы на предварительную оценку

    Приложите имеющиеся документы и кратко опишите задачу. Мы проверим компетенцию и комплектность, определим специальность эксперта и сообщим возможные срок и стоимость.

    Отправить материалы