
На дворе шел 2016 год и из каждого утюга кричали, что русские хакеры помогли Трампу избраться, а моя маленькая (очень) команда, была привлечена к безнадёжному проекту,... правда мы поняли это потом.
Маленькая предыстория - в тот момент большой канадский гигант SIP телефонии решил выпустить первый телефон под Андроидом, но, не просто выпустить под AOSP, а так, что бы все гугловые сервисы были доступны. Это требовало пройти полное тестирование по GTS (Google Test Suite). Проект разрабатывался израильской командой канадского вендора и командой нашей компании, которая имела давние связи с канадцами.
Приём сертификационных заявок, на прохождение GTS заканчивался в начале ноября, а летом, хитрая израильская команда, предложила нашему архитектору, поменяться задачками - баш-на-баш. Архитектор проведя поверхностный анализ, не нашёл подвоха и... согласился,... как потом оказалось - зря, стоило анализ провести получше.
Первый "подход к снаряду" был ещё летом, но, что-то пошло не так, интеграция не задалась, и... задачу отложили на потом. Когда же на дворе стоял конец сентября, о ней вспомнили,... и вот тут - всех накрыло... и не зря - нужно было интегрировать WideVine...
Тогда подключили мою "команду спасателей" - меня и моего разработчика (Вовка, ты крут).
Задача на словах звучала просто (как всегда):
построить продукт
вкарячить его в makefile проекта, что бы он строился в рамках всего андроида
обеспечить прохождение GTS
Нам были выданы архивы, с непонятно откуда взятыми исходниками WideVine,... которые, прогнозируемо, не строились (так как их происхождение НИКТО не смог вспомнить). Поэтому мы пошли на официальный сайт, скачали исходники и принялись выполнять всё по шагам.
Widevine — система управления цифровыми правами (DRM - Digital Rigts Management), принадлежащая Google. Используется для защиты видеоконтента, передаваемого через интернет.
История: технологию приобрели в 2010 году (корни её уходят к компании Internet Direct Media).
Widevine используется потоковыми сервисами, например Netflix, Amazon Prime Video, Hulu, чтобы разрешить авторизованным пользователям просматривать медиафайлы, не позволяя им создавать несанкционированные копии.
С первыми двумя пунктами задачи, мы разобрались меньше чем за рабочую неделю, но вот параллельно читая доки, мы загрустили. Дело в том, что скачать можно было только РЫБУ (клиентскую часть API), с прототипами функций,... не более.
ОКАЗЫВАЕТСЯ, каждый вендор, ПИШЕТ это решение под себя, в зависимости от имеющегося в распоряжении железа. И есть три уровня реализации:
L1 — наивысший уровень безопасности, расшифровка, декодирование и рендеринг видео выполняются в среде TEE (Trusted Execution Environment) — защищённой области процессора, зарезервированной для конфиденциальных процессов. Только устройства, совместимые с L1, могут воспроизводить контент в формате HD, Full HD или даже 4K. Это как Intel SGX (который потом нас тоже догнал, но, это уже другая история).
L2 — на этом уровне внутри TEE выполняется только дешифрование, а обработка видео происходит за его пределами.
L3 — самый низкий уровень защиты, весь процесс управляется программным обеспечением, без помощи со стороны аппаратной части устройства. Считается небезопасным для атак, поэтому платформы часто ограничивают воспроизведение до 480p или ниже.
На этом этапе, пришлось огорчить канадское начальство - всё было ЧЕРТОВСКИ непросто... От меня, прогнозируемо, спросили временные оценки. По странному стечению обстоятельств, работая лет за 10 до этого на Motorola, я уже сталкивался с DRM системами, и знал у кого спросить.
Назначив пивное рандеву давним коллегам, я спросил у них, был ли подобный опыт,... мне подтвердили, что подобное делали, SOC вендор был очень известный (автор ARM), он давал полную поддержку и комплект документации (просто мечта разработчика) и у них это заняло пол года на 5 человек. Когда я сказал, что нас двое и у нас меньше 3х недель,... коллеги посмеялись и порекомендовали, как в анекдоте, готовить 3 конверта... было печально.
Отписав оценки в головную контору, решили посмотреть, как конфигурировать GTS тесты по группам и как они вообще идут, разобрались, запустили по разделам. Оказывается, это непростой процесс. У нас неполный комплект (без WideVine) занял около суток. Поизучали, как это вообще устроено, погрустили ещё.
В изучении GTS и раздумьях Headquarters о судьбе проекта, закончилась вторая неделя. Третья неделя началась с общения с нашим менеджментом,... меня ещё раз попросили дать все разъяснения по фронту работ и срокам, и пояснили, раз задача наша, а не израильская, то если не успеваем на сертификацию по андроид 6, то дальше обе команды (наша и израильская) будут работать за счёт нашей компании следующие полгода, что бы провести сертификацию по андроид 7, ну и рождественские предзаказы придётся аннулировать, что частично регрессом, тоже ляжет на нас. Это очень печально, так как отразится на бонусах ТОПов...
Потом был созвон с высоким канадским начальством, где с меня ЕЩЁ раз спросили про scoupe of work & time estimations. Я ещё раз подтвердил,... но - задал вопрос, который внезапно всплыл в моём сознании: "коллеги, а нам нужно СДЕЛАТЬ РАБОТАЮЩИЙ WideVine или ПРОЙТИ GTS тесты?". Небольшая заминка с той стороны, показала, что под этим углом, никто на проблему ещё не смотрел. Руководство взяло небольшой таймаут на размышление и через час был ответ: "We need to complete GTS test till and of october. Do you have any idea how to make it?". Идея уже созрела в моей голове, так что я спросил день на эксперимент.
Пока мы возились с конфигурированием групп тестов в GTS, я заглянул внутрь этих тестов, благо, их код был открытым... ТО ЕСТЬ МЫ ЗНАЛИ, ЧТО GTS СПРАШИВАЕТ У ТЕЛЕФОНА ПО ADB И КАКОЙ ОТВЕТ ОН СЧИТАЕТ ПРАВИЛЬНЫМ. А так как у нас была РЫБА WideVine, то дальше было делом техники. Работа закипела. За наделю все тесты были реализованы и локальное тестирование прошло.
Дальше было ВСЁ и личная благодарность канадского руководства (к сожалению, только письмом), и премия от нашей компании по 15000 РУБЛЕЙ, каждому из нас ДВОИХ, и много новых интересных и безнадёжных проектов.
А я перечитывал, очередной раз книгу Эдварда Йордона "Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте" и мечтал, что бы моё начальство приняло бы её как руководство к действию. Но, зато, мы ещё месяц шутили, что: "мы были теми хакерами, что хакнули Гугл и, помогли избраться Трампу президентом" :-)
Выводы из этой истории:
необходимо уметь задавать вопросы первоисточнику задачи, а не промежуточным звеньям цепи,
иногда успех проекта лежит не в области программирования, или лежит там неожиданным образом
