История появления Bazel — это захватывающее путешествие от внутренних нужд гиганта технологической индустрии Google до создания одного из самых популярных и эффективных инструментов сборки в мире. Bazel — это не просто программное обеспечение, а результат многолетнего опыта, борьбы с техническими трудностями и стремления сделать процесс разработки более удобным и производительным как для крупных корпораций, так и для независимых разработчиков по всему миру. Путь к Bazel начинался задолго до официального анонса. Один из ключевых участников проекта, инженер Google Хан-Вен Ниенхёйс, вспоминает свой опыт работы над системой сборки в периоды до присоединения к Google. Еще до Google он занимался проектом LilyPond, своеобразным аналогом LaTeX для нотной записи музыки.
Этот проект сталкивался с трудностями использования стандартных инструментов сборки, таких как autoconf и automake, что побудило команду создать собственные шаблоны Makefile, которые оказались более подходящими для их нужд. Однако задача перекрестной компиляции для разных платформ, включая Windows и MacOS, была крайне сложной, что усилило интерес к более универсальному и мощному решению. Приход в Google в 2007 году позволил обнаружить знакомые проблемы, но в значительно больших масштабах. Разработка велась в масштабной монорепозитории, известной как Google3, где исходные коды и инструменты были тесно связаны. На тот момент использовался GNU Make, но для улучшения производительности и корректности запуска сборок разрабатывался новый инструмент Blaze — наследник, который обещал правильность и скорость, два качества редко достигаемые одновременно.
Несмотря на потенциал нового инструмента, его внутреннее устройство оказалось весьма сложным. Сам Хан-Вен попытался разобраться с архитектурой Blaze, но трудный синтаксис и сложные графы зависимостей заставили его отказаться от непосредственного вклада на ранних этапах. С тех пор он возглавил несколько проектов, направленных на улучшение инструментов работы с системой контроля версий и девелоперской инфраструктуры Google, что вскоре позволило ему влиять на крупные инициативы в компании. Конец 2013 года стал переломным моментом, когда Google начал активный поворот в сторону облачных технологий. Техническая инфраструктура, раннее ориентированная на внутренние нужды компании, должна была стать коммерчески успешной через облачные продукты.
Внутренняя команда DevInfra, ранее сосредоточенная исключительно на внутренних инструментах, получила задачу создавать инструменты, которые заинтересуют внешних пользователей и помогут привлечь новых клиентов Google Cloud. Одним из предложений стало сделать доступным внутренний инструмент Blaze для внешнего сообщества — идею открытого исходного кода. Сначала идея вызвала внутренние дебаты. Многие понимали, что существующая архитектура Blaze была очень проприетарной и заточенной под масштаб Google, что делало создание «универсального» продукта вызовом. Кроме того, следует учитывать, что у Google3 отсутствовала поддержка мультиарендного режима, что усложняло развертывание параллельной инфраструктуры для внешних пользователей.
Тем не менее ценность и потенциал открытого инструмента были неоспоримы. Инициатива действительно набирать обороты получила благодаря настойчивости Хан-Вена, который в один из бессонных ночей написал альтернативное предложение — сделать именно Open Source-версию Blaze. Идея заключалась в том, что только открытый доступ позволит инструменту завоевать популярность за пределами Google и со временем стать драйвером облачных сервисов Google посредством удаленной сборки и выполнения. После очередных обсуждений было организовано масштабное собрание с участием сотен инженеров. Хан-Вен с презентацией идеи получил одобрение на формирование команды из четырех человек и фиксированный срок в шесть месяцев для демонстрации результата.
Проект получил внутреннее кодовое имя и стартовал. Начало работы над Bazel оказалось куда более сложным, чем ожидалось. Язык программирования Java, в котором была написана исходная кодовая база Blaze, был непривычен для команды; накопившийся за годы разработки технический долг в виде устаревших функций и неиспользуемых компонентов создавал нагрузку при попытке рефакторинга. Еще одной серьезной проблемой стала тесная связка инструмента со структурой монорепозитория Google, что поставило сложные задачи при попытках изменить внутренние файлы сборки. Чувство тревоги по поводу потенциальной отмены проекта сохранялось, поскольку для успешного продолжения требовалось иметь значимых пользователей.
Поиски подходящего проекта привели к анализу Android Open Source, который по объему и сложности представлял интерес, но все же был слишком большим для пилотного использования. В итоге ключевым фактором стали потребности команды мобильных разработчиков Apple в Google, которым необходим был инструмент, способный работать вне привычной Linux-инфраструктуры, то есть на macOS. Bazel смог удовлетворить эту нишу, предоставив стабильный инструмент сборки для более чем тысячи внутренних пользователей. Выбор имени для нового инструмента был отдельной интересной историей. Поскольку название Blaze было зарегистрировано десятками компаний, пришлось искать другой вариант.
Рассматривались разные варианты, в том числе «bake», «please» и даже «potato». Решение пришло благодаря идее использовать анаграмму, что привело к появлению имени Bazel. Оно сразу понравилось команде, а первый логотип, созданный на онлайн сервисе, стоил всего около ста долларов. Завершение подготовки к выпуску заняло несколько месяцев, в течение которых помимо кода готовилась документация, устанавливались процессы совместного развития и управления проектом. 24 марта 2015 года произошло «тихое» открытие проекта в публичный доступ.
Предполагалось, что объявление пройдет незаметно, но уже через полчаса Bazel возглавил топ списка на Hacker News, вызвав бурю обсуждений, отзывов и пулреквестов. Особый момент связан с доброжелательным жестом Facebook — разработчиков собственного аналогичного инструмента Buck. Они отправили одновременно в офисы Google в Мюнхене и Нью-Йорке праздничные торты в честь релиза Bazel, что символизировало непрерывный обмен опытом между крупнейшими технологическими компаниями. Переход от внутреннего продукта к открытому источнику поставил новые задачи и вызовы. Теперь необходимо было не только развивать кодовую базу и сопровождать проект, но и поддерживать большое количество внешних пользователей, реагировать на проблемы, внедрять изменения с учетом разнообразных запросов.
Хан-Вен отметил, что часто роль пользователя, разработчика и поддерживающего специалиста в проекте приходится совмещать, что требует серьезного баланса и организационной дисциплины. За годы существования Bazel приобрел значительную популярность за пределами Google. Компании, работающие с большими проектами, мульти-языковыми кодовыми базами и нуждающиеся в высокой производительности сборки, получили в Bazel мощное решение. Разработчики и консультанты, специализирующиеся на Bazel, стали востребованными специалистами на рынке труда. Начальный план, предполагавший, что Bazel станет инструментом, генерирующим доходы Google Cloud через удаленное выполнение, по ряду причин не выполнился.
Тем не менее открытость проекта вдохнула жизнь и дала возможность многочисленным стартапам и компаниям создавать свои коммерческие продукты и сервисы на базе Bazel, поддерживая тем самым экосистему и стимулируя рост сообщества. История Bazel — это пример того, как внутренний инструмент одной из самых инновационных компаний мира может стать драйвером качественных изменений для всей индустрии разработки программного обеспечения. Путь от идеи до реализации был непростым и наполнен компромиссами, но результат превзошел ожидания, открыв новые возможности для разработчиков разных уровней и масштабов. Рассказ об образовании Bazel вдохновляет и напоминает, что даже в условиях сложнейших технологических вызовов, упорство и инновационное мышление могут привести к созданию инструмента, который изменит правила игры на международном уровне.