Chrome (чуть не) снёс расширение, над которым мы работали три года, и не хочет говорить за что

Автор оригинала: LipSurf
  • Перевод
Представьте себе, что у вас небольшой бизнес. В один прекрасный день вы получаете письмо, составленное роботом, в котором сообщается, что вы нарушаете какой-то пункт правительственных постановлений. Что именно вы нарушаете, не говорится, но вам дают четырнадцать дней на то, чтобы исправить ситуацию, иначе вас закроют. Если от вас поступит слишком много заявок на пересмотр, сообщает робот, вас закроют без права обжалования.

Вот в такую русскую рулетку заставляет играть разработчиков интернет-магазин Chrome. Некоторым везёт, и путём долгих препирательств и игр в угадайку они в конце концов проходят модерацию – так было с Pushbullet. Другим везёт меньше – им перекрывают кислород. Мы попали в число неудачников: одиннадцатого июня нас убрали с маркета. Бизнес на грани смерти, а решают его судьбу люди, которые отказываются выходить с нами на связь.

Наше расширение – инструмент для создания доступной онлайн-среды; оно позволяет людям с нарушениями двигательных функций или травмами использовать при работе с браузером голосовое управление вместо мышки и клавиатуры. Мы работаем честно: ни рекламы, ни выкачивания данных – просто прозрачный выбор между бесплатной версией и платной подпиской. Рейтинг составляет 4.7, число активных пользователей в неделю – около четырёх тысяч. Мы вложили в этот продукт три года работы «от звонка до звонка».

Двадцать шестого мая нас оповестили, что мы нарушаем правила следующим образом:

Приватность пользовательских данных

В вашем продукте обнаружены нарушения правил из раздела «Использование разрешений», согласно которым разработчики обязаны:

  • Запрашивать доступ к минимальному набору возможностей, необходимому для функционирования инструментов или сервисов вашего продукта;
  • Если несколько разных разрешений могут обеспечивать выполнение функции, выбирать то, которое даёт минимальный доступ к личным данным или функциональности;
  • Не создавать «задел на будущее», запрашивая разрешения, которые могут оказаться полезны для еще не реализованных инструментов или возможностей.

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

Было: debugger, notifications, tabs, activeTab, tts, storage, unlimitedStorage, host permission
Стало: tabs, debugger, notifications, tts, storage, host permission

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

Текст повторного отказа:

Cпам и реклама в магазине

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

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

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

Семнадцатого июня мы получили письмо с отказом всё по той же причине – спам и реклама в магазине. Тут мы уже вообще перестали что-либо понимать и стали ужимать описание по максимуму. Может, им не понравилось, что мы указывали конкретные сайты, под которые делали инструменты (Gmail, Google Sheets, Reddit, Hacker News)? У нас в расширении есть плагины, в которых предусмотрены особые функции именно для этих ресурсов. Ну, например, для Gmail есть специальные команды «написать», «ответить», «назад во входящие» и так далее. Возможно, модераторы не слишком вникали в частности.

Мы по-быстрому повыкидывали лишнее из текста, пока не осталось что-то такое.

Сегодня утром, восемнадцатого июня, нас поджидало очередное письмо счастья от магазина Chrome. На этот раз тема спама и рекламы не затрагивалась, но зато мы вернулись к тому, с чего начали – нам отказывали из-за разрешений. Каким образом нас отбросило на исходную позицию? Ведь мы вносили изменения только в описание, никаких новых пакетов с новыми разрешениями загружено не было. Бессмыслица какая-то.

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

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

tabs


Разрешение activeTab пускает нас на ту вкладку, с которой пользователь кликнул на иконку расширения. Но для наших нужд этого недостаточно. Представьте: пользователь запускает расширение нажатием на иконку, а затем говорит: «Следующая вкладка», чтобы перейти на соседнюю вкладку в том же окне. При таком раскладе без разрешения tabs подавать команды он уже не сможет, ведь activeTab действует только в пределах той вкладки, где произошел запуск. Поэтому-то и требуется tabs, которое не имеет настолько строгих ограничений.

debugger


Необходимо, чтобы голосом нажимать клавиши («нажать на левую стрелку», «нажать на Enter»). Слушатели, реагирующие на сгенерированные события, во многих случаях не срабатывают, как например в Google Sheets или с некоторыми операторами div с атрибутом contenteditable. Сделать разрешение необязательным невозможно (ограничение прописано в манифесте).

host permission


Это разрешение добавляется по умолчанию, потому что скрипты ContentScript у нас должны свободно запускаться на всех страницах. Внедрять скрипты, которые взаимодействуют с DOM, нужно, чтобы дать пользователям возможность управлять содержимым страницы – нажимать на ссылки, пролистывать, проигрывать видео и так далее.

tts


Реализовано для пользователей с дислексией, которым необходимо, чтобы им озвучивали текст. Сделать разрешение необязательным невозможно (ограничение прописано в манифесте).

notifications


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

storage


Разрешение служит для хранения пользовательских настроек и кастомных плагинов.

Дополнение к статье, опубликованное позже


В этой битве мы победили, но войну не выиграли.

Мне повезло. Если бы я в тот день не выиграл главный приз в лотерее «Интерес интернетов», наш проект бы прикрыли и пользователи остались бы брошенными на произвол судьбы с инструментом, который выручал их в повседневной жизни, а теперь больше не поддерживается. Тысячи людей с ограниченными возможностями могли потерять комфортную онлайн-среду, а мы – свой бизнес, потому что судьба того и другого находилась в руках обезличенного контролёра, который тоже иногда ошибается.

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

Но жалобы в Сети не должны становиться каналом связи с администрацией. Разработчики не должны от безысходности полагаться на лотерею «Интерес интернетов». Магазин Chrome существует уже десять лет, пора бы им как-то навести у себя порядок. Ну а мы, команда LipSurf, хотим воспользоваться своим завидным положением в центре внимания, и помочь остальным разработчикам улучшить систему.

Для начала, хотим поблагодарить героя дня @DotProto. Он не только нас спас, но еще Pushbullet и многих других. Мало того, он этим занимается в свободное от работы время. Хотя @DotProto говорит, что администрация работает над отладкой процессов изнутри, с нашей стороны было бы как-то глупо стоять в сторонке, ждать и надеяться. Проблема явно носит системный характер, судя по тому, что форумы маркета усеяны мольбами о помощи, а в комментариях к нашему посту на Reddit собралась целая перепись подобных историй. Это может случиться и с другими и, скорее всего, случится.

Исходя из этого, сегодня мы открываем группу для разработчиков, сотрудничающих с интернет-магазином Chrome, которая будет вести диалог с маркетом. Это не канал техподдержки и не платформа, где можно привлечь внимание, если администрация на тебя не реагирует. Это место, где разработчики могут собраться и обсудить, как улучшить фундаментальные принципы сотрудничества. Инициатива не организована компанией Google и группа не состоит под её началом.

Вместе у нас будет больше шансов на успех в следующем:

  1. Убедить Google Chrome разрешить магазины со сторонними расширениями. Это позволит внести разнообразие в прежде огороженный ассортимент расширений, поставит разработчиков в более выгодные условия и снизит риск того, что ваш продукт безвозвратно снесут просто потому что.
  2. Добиться со стороны администрации магазина Chrome более справедливого отношения и большей готовности вступать в контакт. От шаблонных писем с отказами, в которых информация о нарушения даётся только в самых общих чертах, страдают все – и разработчики, и сотрудники компании. Тем и другим приходится зря терять время в попытках прояснить ситуацию, особенно когда кого-то отклоняют по ошибке.

Начинать сбиваться в кучу и выстраивать оборону нужно уже сейчас – если этого не сделать, всё так и останется в руках контролёра по имени Chrome. Форум будет открыт также для сотрудников компании и людей, которые отстаивают интересы разработчиков, как @DotProto. Мы ведь не воевать с ними собираемся, в самом деле – хорошая платформа и сама выступает за, а не против своих клиентов.

Если вы разрабатываете расширения для Chrome или у вас есть знакомые, которые этим занимаются – пожалуйста, поддержите начинание, заполнив форму или скинув ссылку. Мы планируем открыть форум, как только убедимся, что набирается достаточно заинтересованных людей.

ЧаВо
А что нам это даст?

Ну, для начала, мы хотя бы озвучим имеющиеся проблемы, заручившись поддержкой как разработчиков, так и конечных пользователей. Из более экстремальных мер можно назвать организованный блэкаут расширений Chrome в назначенный день. Из менее экстремальных – подачу предложений, как можно улучшить опыт создания и использования расширений (например, в том что касается разрешений) от лица не отдельных людей, а целого сообщества.

Как быть с adware и расширениями, которые шпионят за людьми?

Если существование магазинов со сторонними расширениями было бы разрешено, им бы предоставлялась возможность самим создавать необходимые барьеры – хоть финансовые, хоть любые другие. Есть основания считать, что они справились бы с отсеиванием мошеннических продуктов не хуже Google.
Цифровые Экосистемы
Переводим бизнес в цифру

Комментарии 33

    +7

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

      +7

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

        0
        У меня тоже терял иконку! Я в какой-то момент решил обновить свое расширение а в ответ получил письмо с крайней туманным отказом — там было около 5 возможных причин и предполагалось что я должен угадать по какой именно мне отказали в обновлении. Т.к. я был уверен, что иконка у меня есть, то про этот пункт я в последнюю очередь подумал.
          0

          Я им написал, мол, иконку вставил, но у вас баг, будьте добры поправить. В ответ, конечно, тишина.

        +11
        Меня всегда вводят в состояние глубочайшего недоумения слова «мы вложили кучу сил и средств в наш плагин для Chrome / в приложение для G-play и внезапно гугл нам всё заблокировал и поставил бизнес под угрозу». Так и представляю разговор, состоявшийся между авторами и инвесторами 3 года назад:

        — Привет, мы делаем приложение под весьма специфическую платформу, контролируемую гуглом, и под конкретный браузер, под редчайшую задачу, имеются сильные конкуренты. От вас потребуется оплата ТРЁХЛЕТНЕГО труда коллектива разработчиков фулл-тайм, а потом с итоговым продуктом сыграют в рулетку модераторы гугла, известные тем, что банят приложения по желанию левой пятки без права обжалования. Что же может пойти не так.

        — Конечно, о чём речь, вот вам инвестиции

        Вдогонку: а почему у вас на сайте нет кнопки прямой загрузки плагина как альтернативы chrome store, настолько смирились со стором?
          +3
          Вроде как с Хроме плагины не из магазина отключаются при перезагрузке приложения.
          Как минимум Хром предупреждает, что расширение какое-то ненадежное.
            0

            в бетке перестал предупреждать

            0

            Я полагаю, что ещё играет роль то, что основная масса пользователей скачивает приложения/расширения через официальные сторы, благо там есть поиск. Да и ему проще верить и установка проще.


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

              0
              Причем, что интересно, поставить расширение «напрямую» не сложнее, чем скачать и открыть любой файл. Фактор один — лень пользователей.

              1.Хром устанавливается сам, в качестве довесков к другим программам и делает себя «по умолчанию»
              2. При открытии Хром завлекает «подберите нужные расширения, например эти» — пользователь находит нужные, устанавливает и скорее всего, больше не возвращается
                +6

                Доверия к гугловскому стору больше, чем к "ноунейм" сайту

              +8
              Вдогонку: а почему у вас на сайте нет кнопки прямой загрузки плагина как альтернативы chrome store, настолько смирились со стором?

              Потому что установка дополнения со стороннего сайта в Chrome выглядит примерно так:

              1) скачать его на ПК и распаковать (т.е. никакого crx, нужно именно распакованное)
              2) Включить режим разработчика в chrome://extensions
              3) перетащить папку с распакованным дополнением на эту страницу
              4) папку с жесткого диска удалять нельзя, иначе дополнение пропадёт из браузера
              5) при каждом запуске нужно закрывать крестиком предупреждение браузера о том, что дополнение запущено в режиме разработчика (при этом, аудитория — люди, управляющие голосом, у них мыши нет).

              Извините, но это путь не для людей, а для красноглазых свиборгов.
                0
                Ну в принципе на сайт можно класть .exe, который при запуске сам всё это повключает и куда надо положит. Яндекс-бар же как-то ставится даже без спросу, значит такая возможность есть.
                  +1

                  Яндекс-бар вроде же есть в сторе?

                    +3
                    Как только дополнение одобрено в Chrome Web Store, его можно хоть через этот самый Web Store распространять, хоть как делает Яндекс. Оно уже подписано Google, это главное.

                    А вот если в Web Store не пускают, то подпси нет, следовательно нужно включать режим разработчика и терпеть постоянные напоминания браузера об этом. Именно так, например, живёт дополнение Bypass Paywall, которое в Web Store не пускают.

                    У Mozilla, кстати, в этом плане политика более либеральная. Дополение могут не пустить в AMO (как всё тот же Bypass Paywall), но подписать (если оно не откровенно вредоносное или не уличено во всяких нехороших вещах типа сбора истории браузера), чтобы разработчик мог его распространять со своего сайта.
                      0
                      А что происходит, если дополнение уже подписано до бана? Google его только из стора выкидывает (и тогда можно распространять по другим каналам), или каким-то образом Chrome хранит список отозванных подписей, сверяясь с ним при каждой загрузке дополнения?
                        +2
                        Я, честно говоря, не знаю, как делает Chrome, зато хорошо знаю, как делает Firefox. У последнего есть список забаненных дополнений, который периодически обновляется.

                        Не вижу причин, почему бы Chrome не делать так же. Это было бы логично и правильно — если мы обнаруживаем, что дополнение вредоносное, его нужно деактивировать у пользователей.
                +5
                Убедить Google Chrome разрешить магазины со сторонними расширениями

                И Google потеряет сбор с разработчиков, т.е. свою прибыль? Потеряет полный контроль над устанавливаемыми расширениями? Получит больше жалоб на «вирусованный браузер» (и пофигу, что сами пользователи излишне доверчивы, «забота о безопасности пользователя» активно форсится руководством же)

                Добиться со стороны администрации магазина Chrome более справедливого отношения и большей готовности вступать в контакт

                Да хорошо бы вместо общей отписки «не соответствует правилам публикации» подробно описывали бы причину — чтобы разработчик не гадал и вместо многочисленных экспериментов по правкам всё можно было бы уладить за одну итерацию.
                Это особенно важно из-за пункта «Регулярные или грубые нарушения правил интернет-магазина Chrome могут привести к заморозке вашего аккаунта разработчика или к запрету на использование платформы», когда эти эксперименты и являются «регулярными нарушениями» с логичным печальным исходом.
                  +3
                  Интересно (и печально, конечно) что бодаться в основном приходится разработчикам действительно полезных, а зачастую оригинальных расширений, а мусором и откровенной малварей магазин пополняется без проблем, вот как так получилось?
                    +5
                    Ошибка выжившего. Мусор банится чаще, но его и больше. Пусть даже 100 мусорных приложений улетит в бан, остальных 9900 будет вполне достаточно, чтоб в них утонуть.
                      +6

                      Наверное потому, что авторы малвари не пишут статьи вида: гугл забанил наше расширение и не указал причин.

                        +3
                        Вместо этого они пишут 10 следующих малварей взамен одного прибитого…
                      0
                      Ну можно еще форкнуть сам хром. Это конечно отдельная мука — названия менять, отдельную инфраструктуру поддерживать, разбираться как патчи к новой версии прикручиваются — вот-это-все.
                        +1
                        Ребят, ну это очевидные риски. Аналогично — ютуб блоггеры, разработчики для VK и тд. Надо по-любому иметь свой сайт и продвигать его. Например, как Savefrom — скачиваешь экзешник, он уже встраивает в разные браузеры; умеет сам обновляться.

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

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

                              +3
                              Решение проблемы состоит в распространении расширения для всех браузеров, кроме хрома. Через какое-то время с вами свяжется представиль гугла с предложением о приобретении вашей компании.
                                0
                                А после приобретения проект будет благополучно закрыт и похоронен, а все программисты купленной компании переброшены на более важную задачу — менять master на main в каком-нибудь древнем коде.
                                  0
                                  Ничто не вечно под луной. Вырученные с продажи немалые средства можно направить на разработку нового, более серьёзного проекта под вашим грамотным руководством. Неужели у вас нет никаких других идей?
                                0

                                Долгое время пользовался расширением myVocabu для popup переводов выделенного текста на любых сайтах, конкуренты есть (в том числе гугловский google dictionary), но они все "убогие" либо по стилизации, либо по функционалу. Недавно его удалили из хром стора, не понятно по каким причинам. Информации от разработчиков никаких нет и старые версии негде скачать. Я в печали. Давлюсь google dictionary за неимением лучших альтернатив… Может кто чего подскажет на замену?

                                  0

                                  Пользовался расширением типа sped dial, тоже в один прекрасный день после переустановки хрома не нашел его в сторе и все закладки полетели в тартарары, хоть предупредили бы, сохранил бы копию локально

                                    0
                                    Пользуюсь этим (в Опере, правда) chrome.google.com/webstore/detail/imtranslator-translator-d/noaijdpnepcgjemiklgfkcfbkokogabh?hl=ru

                                    Старая версия myVocabu www.crx4chrome.com/crx/57666
                                      0

                                      она не ставится в современный хром, я пробовал раньше

                                    +2
                                    Кажется, настало время перенимать богатый опыт разработчиков неофициальных «дополнений» к онлайновым играм. Это я про многочисленные боты и читы.
                                    Заметьте, их разработчики ухитряются процветать в абсолютно враждебной среде. Где за применение банят не только разработчиков, но даже и пользователей (Google такое даже в самых радужных мечтах не снилось). Где в системе работает мощнейший античит, который запускается с правами ядра и специально направлен на противодействие подобным аддонам. Где клиенты постоянно правят, так что каждый подобный бото-чит несёт на борту сигнатурный сканер, чтобы переживать обновления. Где игровой клиент доверху нашпигован антиотладочными приёмами, пожат крипторами и выполняет критические участки кода на VM с недокументированной системой команд.
                                    И всё это не мешает без проблем распространять и ставить такие «дополнения».
                                    При этом Chrome для начинающего ботописца представляет собой просто идеальную среду. Этот бинарник полностью беззащитен. Значительная часть его исходников вообще лежит в открытом доступе. Внутри нет никакой дряни, специально предназначенной, чтоб крашить дебаггеры и обламывать дизассемблер. Chrome не пожат ExeCryptor'ом, не защищён навесной дрянью вроде DeNuvo или StarForce. Всё, что требуется — чтобы инсталлер просто пропатчил функцию проверки подписи так, чтобы она всегда возвращала true. Дело получаса для любого опытного крякера.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое