Мой путь в GSoC: вклад в расширения Chrome

Харш Сингх
Harsh Singh

Опубликовано: 28 октября 2025 г.

Меня зовут Харш Сингх, я студент последнего курса бакалавриата по специальности «Химическая инженерия» в Индийском технологическом институте (ISM) в Дханбаде. В 2025 году я участвовал в программе Google Summer of Code (GSOC). В этой публикации я расскажу о своём пути к поступлению в GSoC и о том, чему я научился, участвуя в программе.

До GSoC: открытие разработки расширений

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

Я экспериментировал со множеством API расширений и даже наблюдал переход с Manifest V2 на V3. Мне удалось создать небольшой проект с их использованием, я поступил в CyberLabs, а затем занялся студенческой жизнью, на время оставив разработку расширений.

Недавно, размышляя о подаче заявки на участие в Google Summer of Code (GSoC), я наткнулся на проект по API расширений Chrome. Меня охватила ностальгия: «Было бы здорово сделать API, которым в будущем второкурсник мог бы воспользоваться для поступления в CyberLabs? Это был бы отличный вариант». Поскольку я уже знаком с большей частью терминологии расширений по своей прошлой работе, этот проект показался мне идеальным.

Подготовка к подаче заявления

Внезапно я решил связаться с Оливером, инженером по работе с разработчиками из команды расширений Chrome. Я спросил его, что нужно для успешного участия в программе GSoC от Chromium. Он ответил через пару дней! Его письмо было очень обнадеживающим; он сказал, что они просто хотели убедиться, что я могу изучить кодовую базу и написать что-нибудь на C++.

Я начал с установки Chromium на своём компьютере. Это было настоящим испытанием: мне потребовалось четыре полных дня и бесчисленное количество попыток, чтобы наконец настроить огромную кодовую базу и добиться успешной сборки. Я нашёл в интернете простую проблему — что-то связанное с sidePanel.open() без пользовательского жеста — и отправил патч для её исправления. (Оглядываясь назад, понимаю, что это было совсем небольшое изменение 🙂). Я написал Оливеру о своих успехах. Он сказал, что они не планируют поддерживать это, но также добавил, что проделанной мной работы достаточно, чтобы показать серьёзность моих намерений. Затем он предложил мне поработать над методом getPosition для боковой панели. Я разобрался, снова написал ему, и он был очень доволен, сказав, что мой подход соответствует тому, что обсуждала их команда. Это придало мне уверенности для продолжения работы над проектом, поскольку я знал, что могу понимать код и вносить изменения.

Мое предложение GSoC

Следующим был проект GSoC. Первоначальное описание проекта «API SidePanel и API DNR» было очень общим, поэтому я не был уверен, какие конкретно задачи перечислить и как создать временную шкалу в своём предложении. Я написал об этом Оливеру, и он ответил, что обновил описание проекта. К моей радости, он добавил несколько API, включая API sidePanel.getPosition над которым я уже работал.

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

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

В контексте проекта расширений Chromium ключевым органом является WECG (WebExtensions Community Group, произносится как «ви-Си-Джи»), где официально обсуждаются новые проекты API. В период GSoC участникам может потребоваться представить свои предложения API этой группе. Поэтому наличие готовой идеи дизайна в вашем предложении для GSoC — огромное преимущество, поскольку это показывает наставникам, что вы готовы к этому важному этапу и успешно справляетесь с периодом GSoC.

В начале мая мне пришло письмо — меня приняли! 🙂

Мой вклад в GSoC

Период GSoC был фантастическим. Мой наставник, Соломон, был невероятно любезен, и мы проводили продуктивные еженедельные встречи, которые помогали мне не сбиться с пути. Я также познакомился с коллегой, Амитом П., который очень помогал мне, когда я чувствовал себя не в своей тарелке. Участие в встречах WECG стало для меня открытием: я увидел, как всё работает на этом уровне, и понял, почему опыт так важен. Я обсудил там свои предложения по API и получил одобрение от другого разработчика браузеров.

Вначале я открыл несколько списков изменений (CL). Позже мой прогресс замедлился из-за постоянных проверок кода, но я с радостью продолжал работать. Мои основные совместные работы касались API боковой панели:

Другие мои CL для API команд всё ещё находятся в процессе разработки (в зависимости от того, насколько я активен после GSoC 🙂). Подробный анализ можно найти в моём итоговом отчёте, который доступен по ссылке «Просмотреть код» на странице моего проекта GSoC.

Особая благодарность Оливеру Данку, Соломону Кинарду, Кельвину Цзяну, Девлину Кронину, Тому Лукашевичу и Андреа Орру, которые проверили почти все мои CL. Удивительно видеть, как мой код становится частью Chrome. Мои наставники описывали меня как человека с сильным чувством «владения», что было для меня огромным комплиментом.

Подведение итогов

Если вы спросите меня, что дал мне GSoC, то это было больше, чем просто технические знания. Он дал мне место за столом, где проходили важные дискуссии, которые повлияют на многих разработчиков расширений. Это была моя первая работа, которая нашла реальное применение. Я встретил терпеливых наставников, которые направляли меня и многому меня научили, сделав весь этот опыт невероятно полезным.

Надеюсь, моя история станет полезным источником информации для тех, кто хочет внести свой вклад в Chromium или принять участие в Google Summer of Code.

Советы для тех, кто подает заявку на GSoC

  1. Выберите идею, которая вам искренне нравится. Интерес должен быть вашим главным приоритетом. Ваши навыки всегда можно улучшить, но страсть — это то, что поможет вам двигаться вперёд, когда дела пойдут плохо. Я был по обе стороны баррикад, и поверьте мне: когда вы работаете над тем, что вам неинтересно, вы будете винить других, если что-то пойдёт не так. Однако, если вы любите свою работу, вы будете воспринимать её как испытание, которое нужно преодолеть.
  2. Не бойтесь конкуренции. Я видел, как многие люди теряли мотивацию, увидев, кто ещё подаёт заявки на общественных каналах. У каждого хорошего проекта есть конкуренты. Сосредоточьтесь на своих сильных сторонах. Если вы раньше работали с какой-либо библиотекой, найдите проект, который её использует. У вас будет преимущество, потому что вы сможете применить свой уникальный опыт.
  3. Признайте удачу и сосредоточьтесь на коммуникации. Будем честны: GSoC требует некоторой доли удачи. Некоторые популярные проекты получают более 300 предложений на 1-2 слота. Сомневаюсь, что менторы смогут прочитать каждое из них подробно. Именно поэтому раннее общение так важно. Включайтесь в проект заранее и убедитесь, что ваше предложение обоснованное и по существу.
  4. Если вас не выберут, это ещё не конец. Теперь в вашем резюме есть ценные материалы о разработке ПО с открытым исходным кодом. Используйте это, чтобы подать заявку на другие летние вакансии. Вы уже проделали тяжёлую работу!

Последний, но тем не менее важный:

«Каждый человек создан для определённой работы, и стремление к этой работе заложено в сердце каждого». — Руми

Спасибо за прочтение.