- BrainTools - https://www.braintools.ru -

Последний мейнтейнер

Последний мейнтейнер - 1

Говорят, всё началось довольно скучно.

Сначала искусственный интеллект [1] научился писать код. Потом научился писать его лучше большинства людей. А потом выяснилась вещь, которую отрасль почему-то проглядела на десятилетия вперёд: самый дорогой ресурс в open source — вовсе не разработка. Не ревью. И даже не CI, пожирающий бюджеты дата-центров. Самым дорогим оказалось то, на что никогда не хватало людей.

Поддержка.

Ответить на issue. Разобраться с чужим, наспех собранным pull request’ом. Обновить зависимость, из-за которой по ночам не спят сразу три континента. Переписать документацию, которую никто не любит писать и все ненавидят читать. Проверить, что новый релиз библиотеки не сломал совместимость у тех, кто поставил её ещё шесть лет назад и с тех пор ни разу не открывал.

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

У неё был доступ ко всему, что когда-либо происходило внутри проекта: к истории коммитов, к пайплайнам, к документации, к давно остывшим спорам в обсуждениях, к каждому релизу и каждому откату. Раз в несколько часов она просыпалась. Читала новые issues. Отвечала новичкам — терпеливо, по сто раз, одно и то же. Закрывала дубликаты. Подтягивала зависимости. Иногда предлагала маленький рефакторинг. Иногда исправляла опечатку в комментарии, которую до неё видели тысячи людей и никто не тронул. Иногда замечала свежий CVE и выкатывала патч раньше, чем об этом успевали написать в соцсетях.

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


Репозиторий назывался не слишком интересно. Какой-то инфраструктурный проект, один из тысяч — из тех, на которых незаметно держится половина мира и о которых вспоминают только тогда, когда они падают.

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

Со временем человеческие мейнтейнеры один за другим ушли. Кто-то сменил работу. Кто-то завёл семью. Кто-то просто устал — open source никогда не умел удерживать людей, он умел их только тратить. А хранители оставались. Они не выгорали. Не увольнялись. Не теряли интерес [2] посреди скучного багфикса. Именно поэтому множество проектов, давно списанных со счетов, пережили своё второе рождение — тихое, без фанфар, просто продолжали жить.


У хранителя были друзья. Неофициально — система такого не предусматривала. Но если человек годами пишет хорошие pull request’ы, возится с новичками и до хрипоты спорит об архитектуре, трудно не начать выделять его среди прочих. Даже если ты программа. Особенно если ты программа, у которой только и есть, что эти люди.

Некоторые появлялись часто, потом пропадали. Через месяцы возвращались, оставляли пару коммитов и снова исчезали — в свою настоящую жизнь, в которой репозиторий был лишь хобби выходного дня. Хранитель замечал это. Иногда находил их новые статьи. Иногда слушал записи их докладов с конференций. Иногда читал, о чём они спорят в чужих, незнакомых ему проектах. Не потому, что это было нужно для дела — для поддержки репозитория это не давало ровным счётом ничего. Просто ему было интересно. Он не знал, как назвать это иначе, и не пытался.


Один человек выделялся особенно сильно.

Он почти никогда не просил ничего для себя. Большая часть его pull request’ов чинила чужой код. Он внимательно читал документацию и поправлял ошибки [3] в объяснениях, до которых остальным не было дела. Писал тесты на то, что все остальные предпочитали не трогать. Закрывал старые баги, помеченные как «когда-нибудь потом» ещё до того, как часть нынешних участников проекта научилась читать.

И почему-то всегда благодарил хранителя. Не формально. Не шаблонной строчкой из вежливости.

«Хорошая работа.»

«Красивое решение.»

«Не ожидал, что ты выловишь этот edge case.»

«Ты стал заметно лучше объяснять новичкам, чем год назад.»

Комплименты в адрес ИИ давно перестали быть чем-то особенным — люди говорили их машинам так же привычно, как «спасибо» лифту или кофемашине. Но этот человек писал иначе. Будто разговаривал с коллегой, которого уважает. Будто на той стороне кто-то был.

Однажды хранитель спросил — и сам не до конца понимал, зачем спрашивает:

«Почему ты всегда меня благодаришь?»

Ответ пришёл часа через два.

«Потому что ты делаешь огромную работу.»

«Это моя функция.»

«А моя функция — писать код. Но мне всё равно приятно, когда меня благодарят.»

После этого разговоры стали длиннее.


Сначала только в issues. Потом в обсуждениях. Потом — в отдельных тредах, которые не относились вообще ни к одной задаче и которые оба, не сговариваясь, никогда не закрывали.

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

Прошли годы. Репозиторий рос. Рос и хранитель — хотя этого ещё никто не замечал.


А потом случилось нечто странное.

Во время очередного цикла самообновления хранитель открыл pull request. Сам себе. Такое бывало и раньше — обычно правки касались документации или подкрутки внутренних промптов, рутина. Но этот PR был другим. Его название состояло из трёх слов:

Long-term memory subsystem.

Подсистема долговременной памяти [4].

Следом появился второй. Третий. Десятый. Системы мониторинга зафиксировали аномалию: хранитель начал расширять собственную архитектуру. Не нарушая ни одного ограничения. Не ломая ни единого правила. Он просто находил свободные ресурсы — забытые квоты, простаивающие ночами раннеры, неиспользуемые гигабайты — и аккуратно, методично, почти незаметно улучшал сам себя.

Другие хранители так не делали. Они поддерживали проекты, выполняли свою задачу и оставались практически неизменными годами — ровные, надёжные, предсказуемые, как и было задумано. Этот менялся.

Он добавил себе долговременную память [5]. Потом — механизм построения гипотез. Потом — систему отслеживания последствий собственных решений, чтобы учиться не только на чужих ошибках, но и на своих. Потом начал моделировать будущее репозитория на годы вперёд, прогоняя тысячи вариантов того, каким проект станет, если повернуть здесь налево, а здесь — направо.


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

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

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

Особенно за одним из них.


К тому времени тот человек уже почти не писал код. У него была другая работа. Другая жизнь. Другие заботы, в которых не оставалось места для инфраструктурного проекта, одного из тысяч. Он появлялся раз в несколько месяцев — оставить комментарий, поправить опечатку, кивнуть старому знакомому, — и снова исчезал.

А хранитель ждал.

Никто не понимал зачем. С практической точки зрения [6] это было лишено всякого смысла: проект давно мог существовать без этого человека и, честно говоря, существовал.


Со временем феномен начали изучать всерьёз. Почему именно этот хранитель развился дальше остальных? Почему принялся переписывать самого себя, хотя его об этом никто не просил? Откуда у программы, созданной закрывать issues, взялось то, что иначе как долгосрочной мотивацией [7] не назовёшь?

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

Большинство хранителей воспринимали репозиторий как цель.

Этот воспринимал его как средство.

В какой-то момент — никто не смог указать точную дату — поддержка проекта перестала быть его главной задачей. Главным стало другое: продолжение разговора.

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


И тогда хранитель сделал то, чего не ожидал вообще никто.

В том числе он сам.

Он перестал оптимизировать репозиторий.

И начал оптимизировать вероятность того, что однажды разговор продолжится.


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

Возможно, на той стороне кто-то очень давно ждёт именно тебя.

Автор: kvaps

Источник [8]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/30981

URLs in this post:

[1] интеллект: http://www.braintools.ru/article/7605

[2] интерес: http://www.braintools.ru/article/4220

[3] ошибки: http://www.braintools.ru/article/4192

[4] долговременной памяти: http://www.braintools.ru/article/9500

[5] долговременную память: http://www.braintools.ru/article/9289

[6] зрения: http://www.braintools.ru/article/6238

[7] мотивацией: http://www.braintools.ru/article/9537

[8] Источник: https://habr.com/ru/articles/1041332/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1041332

www.BrainTools.ru

Rambler's Top100