Почти десять лет назад я рассказывал, как мой дом научился жить на солнечной энергии. Сегодняшняя история тоже начинается с солнечной электростанции. Но этот рассказ будет про другое: про то, как у меня дома выросла программа. Почти сама.
Я давно думаю об одной вещи. Сколько я себя помню в софте, программы всегда поставлялись готовыми. Их проектировали заранее, отливали в одну форму и раздавали всем одинаковыми. Можно было подкрутить настройки, включить или выключить какие-то функции, и на этом все. Если твоего устройства нет в списке поддерживаемых, извини. Подстраиваться всегда приходилось человеку. Мне давно казалось, что должно быть наоборот, но как это сделать, было непонятно — до недавнего времени.
Как все началось
И тут мне довелось приболеть. Сидеть дома с температурой скучно. Я устроился возле компьютера: взял Mac mini, подключил к нему телевизор вместо монитора, настроил ИИ-агента и спросил: «Слушай, у меня в локальной сети есть солнечная электростанция с аккумуляторами. Можешь ее найти?»
Через десять минут агент ответил: «Да, есть стопроцентный кандидат. Минуточку. Это гибридный инвертор Deye, вот такая модель, а вот его логгер. О, монтажники оставили пароль admin-admin, без изменений. Все, у нас полный контроль над электростанцией. Чего изволите?»
Еще через несколько часов был готов первый модуль. Выработка, батареи, потребление дома, графики. Тот самый экран, на который я когда-то смотрел в командировках, чтобы понять, было ли в Калининграде солнце, только теперь мой собственный.
«Энергия» сегодня: солнце, батарея, дом, машины и город. Видно, куда идет ток прямо сейчас
Кстати, в списке устройств роутера агент нашел еще и «Солнце SMA». Это призрак моей первой станции 2015 года, про которую я писал отдельную историю Ее инвертора давно нет, а запись о нем в роутере так и жила.
Дом знакомится с самим собой
Тут я понял, что одной электростанцией дело не ограничится. И сформулировал агенту, чего хочу на самом деле: свою внутреннюю систему управления домом, которая объединит все, что у меня есть.
Полчаса агент сканировал домашний Wi-Fi и составлял список. Появились кондиционеры, бризеры Tion, телефоны и планшеты, видеорегистратор, все девять точек Wi-Fi. Всего 47 устройств.
И сразу нашлось много ошибок:
- Служебный порт видеорегистратора смотрел прямо в интернет.
- У роутера не работал DNS, поэтому прошивка не могла обновиться, и этого никто не замечал.
- Все девять точек Wi-Fi сами выбирали каналы и мешали друг другу. На всех был включен Telnet.
Агент все это показал и объяснил, что предлагает сделать. Согласовал со мной и исправил все ошибки. Перед каждым изменением он сохранял копию настроек и записывал, как все вернуть назад. Сеть стала заметно лучше.
Дом в разрезе: точки Wi-Fi по этажам, кабели и скорость связи между ними
Признаться, было и смешное. Четыре одинаковых безымянных устройства агент сначала уверенно записал в бризеры Tion. Потом разобрался: это вообще не Tion, а какие-то китайские Tuya. Переименовал и пошел дальше.
Неделя на больничном
Затем все пошло само собой. Я сидел дома, болел, занимался своими делами, а софт рос. Каждый день появлялся новый модуль.
- «Климат»: кондиционеры и бризеры в одном окне.
- «Интернет»: вся сеть и ее здоровье.
- «Видео»: камеры и архив.
Кроме того, Алиса, Hi-Fi колонки, хранилище. А также гараж, который узнает машины, зарядки для машин и сауна. За первую неделю модулей стало тринадцать.
«Климат»: воздух и тепло по комнатам, бризеры и кондиционеры. Автоматика пока работает пробно
А потом появилась «Охрана». Теперь дом можно поставить на сигнализацию и снять с нее одним нажатием, видно все датчики, журналы и логи, открываются ворота гаража. И все это получилось красивенько.
«Охрана». Текущее состояние и журнал на скриншоте я размыл: все-таки это про безопасность
Вот тут у меня возникло очень четкое ощущение. Я посадил в дом зерно, и оно прорастает, осваивается. Само подбирает доступы и способы управления к каждому устройству, начинает их понимать и контролировать. Помогает мне находить и исправлять ошибки, которые годами жили в доме незамеченными.
И я уже не понимаю, зачем мне руками настраивать Hi-Fi колонки. Софт сам выставит скорость соединения, проведет тесты и убедится, что они висят на правильной точке Wi-Fi.
Потом пришла очередь стиральных машин, домашнего кинотеатра и много чего еще. Вот еще несколько органов, которые выросли сами.
«Зарядки»: кто сейчас заряжается и сколько взял. Машины со своими именами
«Стирка»: стиралка и сушилка. О том, что они закончили работу, сообщают колонки
«Сауна». Внизу справа ее правила: включать только из дома, сторож следит, не больше двух часов, а греть можно, пока батарея выше 40%
Немного статистики. С 27 сентября прошло 17 дней. За это время в проекте появилось 2 285 изменений, больше 200 тысяч строк кода, почти 300 тысяч строк тестов, больше семи тысяч самих тестов и 18 модулей. Сам я не написал ни строчки кода. Я просто разговаривал.
У дома теперь есть имя — Марта. Ее можно позвать по имени, поговорить с ней голосом и даже перебить, если она увлеклась. А под меню висит светящийся шар, по которому видно, слышит ли она меня и что отвечает. Он виден почти на всех скриншотах выше, слева внизу.
Представьте себе сцену
На Mac mini одновременно работают пять-шесть агентов. Один растит «Энергию», другой чинит «Климат», третий делает мне голосовой шар. Выкатывать изменения в работающий дом нужно по очереди, поэтому агентам приходится договариваться между собой. В каждом чате вежливо: «Начинаю деплой, остановите, пожалуйста, тесты». — «Тесты остановлены». — «Деплой закончен, можно подтягивать». И так обычно идет по кругу.
В какой-то момент мне надоело читать эту переписку во всех чатах, и я попросил агентов договариваться без меня. Тогда один из агентов сам придумал правило очереди: выкатывать изменения может только тот, кто сейчас занял очередь, а остальные ждут, пока он закончит. Переписка прекратилась, очередь осталась. Колония организовалась сама.
Умеет и уменьшаться
Живое умеет не только расти, но и избавляться от того, что больше не нужно. Для софта это не менее важно.
Когда я заменил старую точку Wi-Fi на новую, «Интернет» продолжал рисовать ее на схеме серым призраком «не в сети». Тогда агент научил модуль понимать: точки нет в списке — значит, ее убрали — ее нужно сразу забыть.
В «Видео» сначала была лента событий с картинками. В тот же день стало понятно, что камеры смотрят на улицу, событий сотни в сутки, толку от ленты нет, а картинки тянули полтора гигабайта трафика в сутки. Ленту убрали, остался журнал тревог на 0,3 мегабайта в сутки.
А если какой-то «орган» не работает неделю, Марта сама предложит убрать его из меню. Скажу «да» — спрячет, «вернуть» — вернет. Уменьшаться тоже нужно обратимо.
Так возникла концепция
Я назвал это ксеноморфным софтом. Знаю, о чем вы сейчас подумали. Да, ксеноморфами зовут Чужих из фильмов. Но само слово научное, оно гораздо старше кино и объясняет суть даже лучше.
Почему «ксеноморфный». В переводе с греческого — «имеющий чужую форму»: xénos — чужой, morphḗ — форма. В геологии так называют кристаллы без собственных граней: они кристаллизуются позже других, заполняют оставшиеся пустоты и принимают ту форму, которую им оставили соседи.
Противоположность — идиоморфный кристалл, со своими четкими гранями. В палеонтологии ксеноморфна раковина устрицы, которая повторяет форму предмета, к которому приросла.
Обычный софт идиоморфный: у него свои грани, и подстраиваться под них приходится нам. Ксеноморфный принимает форму дома, в котором вырос.Чужой оказался очень точной метафорой: ксеноморф не приходит готовым. Он вырастает внутри своей среды и берет от нее форму. В «Чужом 3» ксеноморф, выросший в собаке, бегает на четырех лапах. Один и тот же зародыш в разной среде становится разным существом.
Ровно это происходит с моим софтом. Обычная программа заранее содержит все, что умеет: список поддерживаемых устройств, функций и сценариев. Ксеноморфная такого списка не содержит. Она приходит в среду ростком с предназначением, у меня это «чтобы в этом доме хорошо жилось».
Дальше сама изучает, что вокруг, доращивает нужное и отпускает отжившее. Через год два одинаковых ростка станут двумя разными существами, потому что выросли в домах разных людей.
Человек в этой схеме не пользователь и не администратор. Он хозяин среды. Задает направление и говорит «да» или «нет».
Честно о страхах
Но раз уж вспомнили «Чужого», давайте честно. Фильмы про монстров — это истории про страх. Люди столкнулись с новым организмом, который растет, меняется и выходит из-под контроля. Признаться, у меня тоже есть этот страх: что агенты однажды вырвутся, а софт начнет расти сам по себе и не туда.
Отрицать его глупо. Но будет ли это опасным, во многом зависит от нас. Мы понимаем саму суть: софт выращивается. Значит, и механизмы защиты нужно выращивать вместе с ним и учиться их контролировать. Вот что у меня получилось на сегодня.
- Есть «ступеньки доверия». Каждый новый «орган» сначала только смотрит и показывает. Потом работает в пробном режиме: решает и записывает, что сделал бы, но ничего не отправляет. Право управлять он получает только после моего согласования. Посмотрите на скриншот «Климата», там прямо написано: «пробно 2, боевой 0». У «Стирки» и у части «Зарядок» управление до сих пор выключено, и это нормально. А все опасное, вроде сауны, включается только из дома.
- Каждое изменение одного агента проверяют другие. Один строит, остальные ищут ошибки и дыры в безопасности. И это не формальность. Недавно агент, который делал мне голосовой шар, случайно стер кусок собственной документации. Проверяющий заметил, и все вернули.
- Новое растет в «клетке». Дом выращивает себе «новые органы» в отдельном аккаунте на Mac mini. Из него он не может дотянуться до всего остального. Доступ я открою только тогда, когда буду уверен.
И последнее — самое важное. Модель нужна для роста, а не для жизни. Выращенные модули — это обычный код. Если завтра отключить всех агентов, дом продолжит работать: станция будет показывать выработку, кондиционеры слушаться, охрана охранять. Агенты нужны, чтобы расти, лечить и разговаривать.
Наш ксеноморф вырос не на чужой планете, а у меня дома. И вырос он для того, чтобы в этом пространстве хорошо жилось.
Зерно и «Садовник»
Сначала мне казалось, что агент должен жить внутри программы. Оказалось, не обязательно. Он может быть снаружи, и выращивание тоже может происходить снаружи. У меня мозг дома так и называется, «Садовник». Это отдельная служба рядом с домом.
Получается, что программа — это зерно: предназначение, скелет и способность расти. А садовник может быть где угодно: на том же Mac mini, на соседнем компьютере или в облаке.
От дискеты к «ксеноморфному» софту
Если посмотреть на историю, мы уже несколько раз меняли способ доставки софта. Сначала были коробки с дискетами и CD, потом программы стали скачивать из интернета. Затем софт уехал в облако, и появились SaaS-сервисы — они работают где-то там, а люди открывают их в браузере.
Возможно, следующий шаг — ксеноморфный софт. Он снова работает у нас, рядом с нашими устройствами и данными, но доращивается индивидуально под каждого. А может расти и в облаке, если так нужно для задачи.
В общем, это другая модель доставки: поставляется не готовый продукт, а росток, и он вырастает в продукт на месте.
Поддержка — это врач
Если все «экземпляры» софта разные, поддерживать их привычным методом не получится. Невозможно написать инструкцию для программы, которая у каждого своя.
Мне кажется, поддержка в этом случае становится похожа на врача. Организм вырос — ему нужна помощь доктора, роль которого играет агент. Он изучает изучает историю софта, проверяет, здоров ли он, отвечает ли намерениям и интересам хозяина. Ставит диагноз, лечит, поправляет и снова отпускает расти.
Кстати, вкладка «Здоровье», про которую я рассказывал выше, — это и есть медицинская карта: в ней видно, какой орган когда болел. Так что врачу будет с чего начать.
А разработчик перестает выпускать версии. Он сажает ростки и наблюдает за популяцией, как натуралист: здоровы ли организмы, верны ли предназначению, куда растут.
Еще одна интересная вещь — переселение. Когда тело становится тесным или стареет, софт может переехать в новое железо. Сначала новый экземпляр живет рядом со старым и только потом его сменяет. В концепции это уже описано, а на практике я пока не пробовал. Mac mini справляется.
В завершение
Мне нравится, что дом теперь растет, а программа сама подстраивается под меня. Почти десять лет назад я научил дом жить на солнце. Теперь он учится жить сам.
Концепцию целиком я описал в отдельном документе. Там анатомия такого организма, лестница доверия, принципы и открытые вопросы. Буду рад, если вы со мной поспорите. Сейчас самое время, пока ничего еще не выросло окончательно.