GitHub объявил о завершении тестирования интеллектуального помощника GitHub Copilot, способного генерировать типовые конструкции при написании кода. Система разработана совместно с проектом OpenAI и использует платформу машинного обучения OpenAI Codex, натренированную на большом массиве исходных текстов, размещённых в публичных репозиториях GitHub. Сервис бесплатен для сопровождающих популярных открытых проектов и студентов. Для остальных категорий пользователей доступ к GitHub Copilot платный ($10 в месяц или $100 в год), но предоставляется бесплатный ознакомительный доступ к течение 60 дней.
Поддерживается генерация кода на языках программирования Python, JavaScript, TypeScript, Ruby, Go, C# и C++ с использованием различных фреймворков. Доступны модули для интеграции GitHub Copilot со средами разработки Neovim, JetBrains IDEs, Visual Studio и Visual Studio Code.
Судя по собранной в процессе тестирования телеметрии сервис позволяет генерировать код достаточно высокого качества – например, 26% предложенных в GitHub Copilot рекомендаций были приняты разработчиками как есть.
От традиционных систем автодополнения кода GitHub Copilot отличается возможностью формирования достаточно сложных блоков кода, вплоть до готовых функций, синтезированных c учётом текущего контекста. GitHub Copilot адаптируется к манере написания кода разработчиком и учитывает используемые в программе API и фреймворки. Например, при наличии в комментарии примера структуры JSON при начале написания функции для разбора этой структуры GitHub Copilot предложит уже готовый код, а при написании рутинных перечислений повторяющихся описаний сформирует оставшиеся позиции.
Способность GitHub Copilot генерировать готовые блоки кода привело к спорам, связанным с потенциальным нарушением копилефт лицензий. При формировании модели машинного обучения использованы реальные исходные тексты из репозиториев открытых проектов, размещённые на GitHub.
Многие из этих проектов поставляются под копилефт лицензиями, такими как GPL, требующими поставки под совместимой лицензией кода производных работ. В случае вставки предложенного Copilot существующего кода разработчики могут невольно нарушить лицензию на проект, из которого был заимствован данный код.
Может ли считаться производной работа, сгенерированная системой машинного обучения, пока не ясно. Также возникают вопросы к тому является ли модель машинного обучения объектом авторских прав и если да, то кому принадлежат эти права и как они соотносятся с правами на код, на основе которого построена модель.
С одной стороны сгенерированные блоки могут повторять отрывки текста из существующих проектов, но с другой стороны система воссоздаёт структуру кода, а не копирует сам код. В соответствии с проведённым в GitHub исследованием только в 1% случаев предлагаемая Copilot рекомендация может включать отрывки кода существующих проектов, размером более 150 символов. В большинстве ситуаций повторы возникают когда Copilot не может корректно определить контекст или предлагает типовые решения проблемы.
Для предотвращения подстановки существующего кода в Copilot добавлен специальный фильтр, не допускающий пересечения с существующими проектами. При настройке разработчик может на своё усмотрение активировать или отключить данный фильтр. Из других проблем отмечается вероятность, что синтезированный код может повторить ошибки и уязвимости, присутствующие в коде, использованном при обучении модели.