
Об авторе: Сергей Рыжиков, сооснователь и генеральный директор «1С‑Битрикс»
О чём вообще речь
Почти десять лет назад я рассказывал, как мой дом научился жить на солнечной энергии. Эта история тоже начинается с солнечной электростанции, но она про другое. Она про то, как у меня дома выросла программа. Сама. Ну, почти сама :)
Я давно думаю об одной вещи. Сколько я себя помню в софте, программы всегда поставлялись готовыми. Их проектировали заранее, отливали в одну форму и раздавали всем одинаковыми. Можно было подкрутить настроечки, включить или выключить какие-то функции, и на этом всё. Если твоего устройства нет в списке поддерживаемых, извини. Подстраиваться всегда приходилось человеку. Мне давно казалось, что должно быть наоборот, но как это сделать, было непонятно.
Как всё началось
И тут мне довелось приболеть. Сидеть дома с температурой скучно. Я устроился возле компьютера: взял Mac mini, подключил к нему телевизор вместо монитора, настроил ИИ-агента и спросил:
— Слушай, у меня в локальной сети есть солнечная электростанция с аккумуляторами. Можешь её найти?
Через десять минут агент отвечает: «Да, есть стопроцентный кандидат». Минуточку. Это гибридный инвертор Deye, вот такая модель, а вот его логгер. О, монтажники оставили пароль admin-admin, без изменений :) Всё, у нас полный контроль над электростанцией. Чего изволите?
Ещё через несколько часов был готов первый модуль. Выработка, батареи, потребление дома, графики. Тот самый экран, на который я когда-то смотрел в командировках, чтобы понять, было ли в Калининграде солнце, только теперь мой собственный :)

Кстати, в списке устройств роутера агент нашёл ещё и «Солнце SMA». Это призрак моей первой станции 2015 года, про которую я тогда писал. Её инвертора давно нет, а запись о нём в роутере так и жила :)
Дом знакомится с самим собой
Тут я понял, что одной электростанцией дело не ограничится. И сформулировал агенту, чего хочу на самом деле: свою внутреннюю систему управления домом, которая объединит всё, что у меня есть.
Полчаса агент сканировал домашний Wi-Fi и составлял список. Появились кондиционеры, бризеры Tion, телефоны и планшеты, видеорегистратор, все девять точек Wi-Fi. Всего 47 устройств.
И сразу нашлись ошибки. Много ошибок. Служебный порт видеорегистратора смотрел прямо в интернет. У роутера не работал DNS, поэтому прошивка не могла обновиться, и этого никто не замечал. Все девять точек Wi-Fi сами выбирали каналы и мешали друг другу. На всех был включён telnet. Агент всё это показал, объяснил, что предлагает сделать, и после моего «да» исправил. Перед каждым изменением он сохранял копию настроек и записывал, как всё вернуть назад. Сеть стала заметно лучше.

Признаться, было и смешное. Четыре одинаковых безымянных устройства агент сначала уверенно записал в бризеры Tion. Потом разобрался: это вообще не Tion, а какие-то китайские Tuya :) Переименовал и пошёл дальше.
Неделя на больничном
Дальше всё пошло само собой. Я сидел дома, болел, занимался своими делами, а софт рос. Каждый день появлялся новый модуль. Климат: кондиционеры и бризеры в одном окне. Интернет: вся сеть и её здоровье. Видео: камеры и архив. Алиса, Hi-Fi колонки, хранилище, гараж, который узнаёт машины, зарядки для машин, сауна. За первую неделю модулей стало тринадцать.

А потом появилась охрана. Дом можно поставить на сигнализацию и снять с неё одним нажатием, видно все датчики, журналы и логи, открываются ворота гаража. И всё это получилось красивенько:)

Вот тут у меня возникло очень чёткое ощущение. Я посадил в дом зерно, и оно прорастает. Осваивается. Само подбирает доступы и способы управления к каждому устройству, начинает их понимать и контролировать. Помогает мне находить и исправлять ошибки, которые годами жили в доме незамеченными.
И я уже не понимаю, зачем мне руками настраивать Hi-Fi колонки. Он сам выставит скорость соединения, проведёт тесты и убедится, что они висят на правильной точке Wi-Fi.
Потом пришла очередь стиральных машин, домашнего кинотеатра и много чего ещё. Вот ещё несколько органов, которые выросли сами.



Немного статистики. С 27 сентября прошло 17 дней. За это время в проекте появилось 2285 изменений, больше 200 тысяч строк кода, почти 300 тысяч строк тестов, больше семи тысяч самих тестов и 18 модулей. Сам я не написал ни строчки кода. Я разговаривал:)
У дома теперь есть имя, её зовут Марта. Её можно позвать по имени, поговорить с ней голосом и даже перебить, если она увлеклась :) А под меню висит светящийся шар, по которому видно, слышит ли она меня и что отвечает. Он виден почти на всех скриншотах выше, слева внизу.
Представьте себе сцену
На Mac mini одновременно работают пять-шесть агентов. Один растит «Энергию», другой чинит «Климат», третий делает мне голосовой шар. Выкатывать изменения в работающий дом нужно по очереди, и они договариваются между собой. В каждом чате вежливо: «Начинаю деплой, остановите, пожалуйста, тесты». — «Тесты остановлены». — «Деплой закончен, можно подтягивать». И так по кругу :)
Мне надоело читать эту переписку во всех чатах, и я попросил их перестать. Один из агентов сам сделал общий замок: кто держит замок, тот и выкатывает, остальные ждут. Переписка прекратилась, очередь осталась. Колония организовалась сама :)
Так возникла концепция
Я назвал это ксеноморфным софтом. Знаю, о чём вы сейчас подумали :) Да, ксеноморф — это тот самый Чужой из фильмов.
И, если честно, сравнение оказалось точнее, чем я думал. Ксеноморф не приходит готовым. Он вырастает внутри своей среды и берёт от неё форму. В «Чужом 3» ксеноморф, выросший в собаке, бегает на четырёх лапах. Один и тот же зародыш в разной среде становится разным существом.
Ровно это происходит с моим софтом. Обычная программа заранее содержит всё, что умеет: список поддерживаемых устройств, функций и сценариев. Ксеноморфная такого списка не содержит. Она приходит в среду ростком с предназначением, у меня это «чтобы в этом доме хорошо жилось». Дальше сама изучает, что вокруг, и доращивает нужное. Через год два одинаковых ростка станут двумя разными существами, потому что выросли в разных домах для разных людей.
Человек в этой схеме не пользователь и не администратор. Он хозяин среды. Задаёт направление и говорит «да» или «нет».
Честно о страхах
Но раз уж вспомнили Чужого, давайте честно. Фильмы про него — это истории про страх. Люди столкнулись с новым организмом, который растёт, меняется и выходит из-под контроля. Признаться, у меня тоже есть этот страх. Что агенты однажды вырвутся. Что софт начнёт расти сам по себе и не туда.
Отрицать его глупо. Но будет ли это опасным, во многом зависит от нас. Мы понимаем саму суть: софт выращивается. Значит, и механизмы защиты нужно выращивать вместе с ним и учиться их контролировать. Вот что у меня получилось на сегодня.
Первое — ступеньки доверия. Каждый новый орган сначала только смотрит и показывает. Потом работает в пробном режиме: решает и записывает, что сделал бы, но ничего не отправляет. Право управлять он получает только после моего слова. Посмотрите на скриншот «Климата», там прямо написано: «пробно 2, боевой О». У «Стирки» и у части «Зарядок» управление до сих пор выключено, и это нормально. А всё опасное, вроде сауны, включается только из дома.
Второе — каждое изменение одного агента проверяют другие. Один строит, другие ищут ошибки и дыры в безопасности. И это не формальность. Недавно агент, который делал мне голосовой шар, случайно стёр кусок собственной документации. Проверяющий заметил, и всё вернули :)
Третье — клетка. Самостоятельный рост, когда дом без меня выращивает себе новые органы, я пока запер в отдельного пользователя на Mac mini, из которого ему не дотянуться до остального. Открою, когда буду уверен.
И четвёртое, мне кажется, самое важное. Модель нужна для роста, а не для жизни. Выращенные модули — это обычный код. Если завтра отключить всех агентов, дом продолжит работать: станция будет показывать выработку, кондиционеры слушаться, охрана охранять. Агенты нужны, чтобы расти, лечить и разговаривать.
Наш ксеноморф вырос не на чужой планете, а у меня дома. И вырос он для того, чтобы в этом доме хорошо жилось :)
Зерно и садовник
Сначала мне казалось, что агент должен жить внутри программы. Оказалось, не обязательно. Он может быть снаружи, и выращивание тоже может происходить снаружи. У меня мозг дома так и называется, Садовник. Это отдельная служба рядом с домом. А сам дом живёт своей жизнью.
Получается, что программа — это зерно: предназначение, скелет и способность расти. А садовник может быть где угодно: на том же Mac mini, на соседнем компьютере или в облаке.
От дискеты к ксеноморфному софту
Если посмотреть на историю, мы уже несколько раз меняли способ доставки софта. Сначала были коробки с дискетами и CD. Потом программы стали скачивать из интернета. Потом софт уехал в облако, и появились SaaS-сервисы, которые работают где-то там, а мы открываем их в браузере.
Возможно, следующий шаг — ксеноморфный софт. Он снова работает у нас, рядом с нашими устройствами и данными, но доращивается индивидуально под каждого. А может доращиваться и в облаке, если так нужно для задачи. В общем, это другая модель доставки: поставляется не готовый продукт, а росток, и он вырастает в продукт на месте.
Поддержка — это врач
И тут меняется роль поддержки. Если все экземпляры разные, привычная поддержка не работает. Невозможно написать инструкцию для программы, которая у каждого своя.
Мне кажется, поддержка становится похожа на врача. Организм вырос. Врач приходит к нему, и это тоже агент. Осматривает и смотрит, что вообще получилось. Изучает историю: почему организм стал именно таким. Проверяет, здоров ли он, целостен ли, верен ли намерениям и интересам хозяина. Ищет ошибки роста. Ставит диагноз, лечит, подправляет и снова отпускает расти.
Кстати, у Марты уже есть вкладка «Здоровье»: журнал, где видно, какой орган когда болел. Так что врачу будет с чего начать :)
А разработчик перестаёт выпускать версии. Он сажает ростки и наблюдает за популяцией, как натуралист: здоровы ли организмы, верны ли предназначению, куда растут.
Ещё одна интересная вещь — переселение. Когда тело становится тесным или стареет, софт может переехать в новое железо. Сначала новый экземпляр живёт рядом со старым и только потом его сменяет. В концепции это уже описано, а на практике я пока не пробовал. Mac mini справляется :)
В завершение
Мне нравится, что мой дом теперь растёт. Не я подстраиваюсь под программу, а программа под мой дом. Почти десять лет назад я научил дом жить на солнце. Теперь он учится жить сам :)
Концепцию целиком я описал в отдельном документе. Там анатомия такого организма, лестница доверия, принципы и открытые вопросы. Буду рад, если вы со мной поспорите. Сейчас самое время, пока ничего ещё не выросло окончательно :)
Мы не пишем программы. Мы их выращиваем.


