В сфере программного обеспечения с открытым исходным текстом возникли серьезные проблемы, связанные с популярным среди разработчиков текстовым редактором и набором инструментов Kite, претендующим на часть рынка открытого программного обеспечения. Речь идет об Atom, текстовом редакторе, разработанном в рамках проекта GitHub и выпущенном в соответствии с лицензией MIT. Он существует три с половиной года и за это время приобрел обширную пользовательскую базу. Он нравится разработчикам, так как совместим с большинством операционных систем — Linux, Windows и Mac — и располагает множеством удобных встроенных функций. Кроме того, разработчиков привлекает его модульная структура. Благодаря ему сформировалось сообщество разработчиков подключаемых модулей, дополнительно расширяющих возможности программы.
Первые признаки неблагополучия появились в апреле, вскоре после того как Седрик Нехеми — разработчик mini-map, популярного открытого подключаемого модуля Atom, который показывает «мини-карту» пользовательского кода для удобства навигации, — начал работать над Kite, новым инструментом разработчика с закрытым исходным кодом. Kite предоставляется в соответствии с моделью «программное обеспечение как услуга» (SaaS) и индексирует весь программный код пользователя, а затем использует методы машинного обучения, чтобы предлагать рекомендации, исправлять ошибки и показывать примеры по мере ввода данных. Примерно в начале апреля продукт для разработчиков Python вышел из стадии бета-версии. В будущем планируется поддержка и других языков.
20 апреля Нехеми без лишнего шума внес изменения в подключаемый модуль mini-map, именуемый Implement Kite Promotion, который позволяет службе Kite видеть код пользователя по мере его ввода в mini-map, а затем предоставляет ссылки на страницы на сайте Kite. Это раздражает многих пользователей mini-map, которые видят в этой функции не преимущество, а спам.
В результате 27 апреля на странице GitHub подключаемого модуля (https://github.com/atom-minimap/minimap/issues/588) открылась дискуссия. Один из пользователей инициировал обсуждение, связанное со страницей с кодом Implement Kite Promotion (https://github.com/atom-minimap/minimap/commit/16c11d82b889ce1260342e4fa7d6d1905c0fde45), и спросил, нельзя ли добавить способ для отключения этой функции. На это замечание отозвался другой пользователь: «Насколько я понимаю назначение данного пакета, этой функции вообще не должно быть». Третий пользователь предположил, что настало время AdBlock для Atom. Четвертый сообщил, что отключил подключаемый модуль и не будет им пользоваться до тех пор, пока проблема не решится.
3 мая пользователь GitHub Хуан Лозано принял участие в обсуждении, представился сотрудником Kite и попытался смягчить ситуацию. Он рассеял некоторые страхи, объяснив, что вопреки опасениям подключаемый модуль mini-map не передает программный код в сторонние службы. Код анализируется локально с помощью подключаемого модуля на компьютере пользователя. По поводу других опасений Лозано заявил, что хотя подключения Kite могут быть разорваны пользователем подключаемого модуля, функция остается включенной по умолчанию и от нее требуется явно отказаться, «и многие пользователи считают это полезным».
Необходимость явного отказа — не лучший способ завоевать сторонников, и в данном случае он не срабатывает. Относительно утверждения, что некоторые считают эту функцию полезной, один пользователь поинтересовался: «Каким образом вы пришли к такому выводу? Вы имеете в виду начальный трафик с недоуменными вопросами на сайте?»
Проявления недовольства не должны быть неожиданностью для специалистов Kite; основатель и главный управляющий компании, Адам Смит, не новичок в мире программного обеспечения. Он был соучредителем Xobni, которая проектировала инструменты электронной почты, работающие с Microsoft Outlook, и занимал в компании различные должности, в том числе главного управляющего. В 2013 году Xobni была куплена компанией Yahoo, как сообщается, за 60 млн долл., и в типичной для Yahoo манере годом позже закрыта. В 2014 году Смит основал компанию Kite.
Почему он (а точнее, руководимая им компания) пустился в такого рода авантюру вокруг проекта с открытым исходным текстом, которая неизбежно привела бы к недовольству потребителей?
Похоже, Kite не испытывает особого беспокойства по поводу пользователей. Согласно статье, опубликованной на сайте VentureBeat, более 60 000 пользователей подписались (https://venturebeat.com/2017/03/28/kite-a-cloud-powered-developer-environment-takes-flight-on-windows-and-mac/) на общедоступную бета-версию в апреле 2016 года, и получены десятки запросов от компаний Fortune 500, желающих иметь локальное решение. Компания, видимо, не страдает от недостатка финансирования. В той же статье на сайте VentureBeat сообщается, что Kite получила более 4 млн долл. от Макса Левчина — соучредителя PayPal, Матта Малленвега — соучредителя WordPress, Джо Лонсдейла — соучредителя Palantir, Дрю Хьюстона — соучредителя Dropbox и Эммета Шира — соучредителя Twitch.tv. Кроме того, у Смита наверняка есть значительные средства от продажи Xobni.
Программный продукт работает несомненно успешно. Некоторые участники дискуссии по mini-map положительно отзывались о возможностях Kite, отмечая, что стали бы клиентами, если бы компания не оказывала на них давления через набор инструментов с открытым исходным кодом, который, по их мнению, принадлежит сообществу.
Выяснилось, что mini-map не был первым подключаемым модулем Atom, обработанным Kite. Другой популярный инструмент Atom, с числом загрузок, превышающим 971 000, autocomplete-python, связан с Kite с декабря 2016 года. Это стало известно лишь 13 мая, когда пользователь GitHub Армин Себастьян сообщил, что заметил, как сотрудник Kite Дэниел Ханг вместе с Седриком Нехеми делал запрос на включение внесенных изменений и вставлял код Kite в autocomplete-python.
На первый взгляд autocomplete-python и Kite прекрасно соответствуют друг другу. Назначение подключаемого модуля точно соответствует его названию; он добавляет функцию autocomplete при кодировании в Python. Традиционно подключаемый модуль извлекал данные из Jedi (http://jedi.readthedocs.io/en/latest/), библиотеки статического анализа и автозавершения кода Python. Kite предоставляет похожую функциональность, но с дополнительными возможностями, поэтому задействовать его в работе — очевидный вариант.
Однако это не лучший подход. Согласно Register, Ханг не только был сотрудником Kite во время публикации Себастьяна от 13 мая, но работал в компании в декабре (https://www.theregister.co.uk/2017/07/25/kite_flies_into_a_fork/), когда добавил программный код компании в подключаемый модуль. В то время эта связь не раскрывалась.
«Kite представляется мне интересным дополнительным интеграционным вариантом автозавершения python, поэтому я предоставил им доступ, поскольку у меня нет времени для самостоятельной реализации другого поставщика автозавершения, — написал Дмитро Садовничий, основной разработчик подключаемого модуля. — Он выглядит превосходно, я сохраняю поддержку Jedi, а Kite, со своей стороны, может работать над функциональностью, и пакет может постоянно совершенствоваться, даже когда у меня нет времени на него. Что ж, в реальности все оказалось не так гладко, как я ожидал. Было принято несколько сомнительных решений, но большинство ошибок уже устранено».
Для разработчиков вторжение Kite в autocomplete-python несет с собой гораздо больше проблем, нежели досадная необходимость явного отказа в mini-map. В новом варианте подключаемого модуля традиционный механизм Jedi не используется по умолчанию. Пользователям необходимо выбрать механизм на экране, на котором Kite представлен как очевидный оптимальный выбор.
Беда в том, что зачастую Kite — далеко не лучший вариант. В отличие от mini-map, для использования Kite в подключаемом модуле autocomplete-python plugin требуется обрабатывать программный код на серверах Kite. Это может быть большой проблемой для тех, кто работает в корпоративной среде с политиками против размещения программного кода в «облаке», помимо серверов компании. В некоторых отраслях, например в медицине или финансовой сфере, совместное использование программного кода с «облачной» службой, такой как Kite, может нарушить требования отрасли или законодательства к безопасности и конфиденциальности.
Благодаря mini-map проблема, кажется, решена. В начале июля Райан Леки начал ответвление проекта mini-map-plus. Ответвленный подключаемый модуль загрузили более 7000 пользователей. В конце июля Нехеми привлек Леки в исходный проект mini-map в качестве сотрудника с доступом на запись. Кроме того, проблема, похоже, решена и для пользователей autocomplete-python, хотя, возможно, ненадолго. В конце августа Бреннан Винчелло создал ответвление проекта — Python Autocomplete Jedi Package. Время покажет, будет ли оно успешным. Ответвления необходимо обслуживать, и это требует усилий. Посмотрим, как будут развиваться события.