Недавно я слушал по радио передачу об эволюции альтруизма. Обсуждался вопрос о том, каким образом «ген альтруизма» выдерживает естественный отбор. Это обсуждение навело меня на мысли о том, какие функции должны присутствовать в современных сетевых приложениях, чтобы они «выживали» в естественном отборе.
С первого взгляда кажется, что тот, кто жертвует собой ради другого, не оставляет потомства и, таким образом, его альтруистические гены не должны сохраниться.
Даже предположение о том, что работает групповой отбор (жертва собой ради группы улучшает выживание группы) не спасает, поскольку для группового отбора требуются очень специальные условия, да и внутри группы тоже есть конкуренция.
Как же выживает ген альтруизма?
Положительным фактором для выживания гена альтруизма является самопожертвование в пользу носителя такого же или близкородственного гена.
В итоге получается, что, хотя особи погибают, ген альтруизма выживает, причём даже лучше чем эгоистический, поскольку на него скоординированно работает большее количество особей.
Вершиной развития альтруизма между одноклеточными является многоклеточный организм, у которого все клетки имеют единый генетический код, размножаются только половые клетки, а остальные обеспечивают их выживание. Межклеточный альтруизм доходит до того, что регулярно происходит плановая гибель клеток (лейкоцитов, клеток ЖКТ).
Дальнейшее развитие по этому пути, например, пчелы — многоклеточные организмы с одинаковым генетическим кодом, готовые ради семьи жертвовать собой.
Смысл генетического кода можно определить как записанный образ действия для его носителя.
Если в определённой ситуации организм жертвует собой ради родственника по причине генетической запрограмированности, и тот, в свою очередь, делает то же самое, это можно представить как сеть узлов с установленным одинаковым программным обеспечением, реализующим протокол взаимодействия, частным случаем которого является самопожертвование.
Получается, что если в коде прошито распознавание своих и специальное взаимодействие с ними, то все свои образуют систему высшего порядка, что резко повышает эффективность выживания и способствует размножению.
С другой стороны (как упоминалось в этой же передаче), если многоклеточный организм создаётся из клеток с разным генетическим кодом, результат получается «не очень».
Существуют примеры, когда одноклеточные, относящиеся к одному виду, но с разным генетическим кодом, в трудные времена объединяются в одно плодовое тело. При этом те, кто образует ножку этого тела, не размножаются.
Тут налицо негативный фактор отбора для альтруистов. В ножку пропадать не выгодно, не смотря на то, что ножка очень важна для выживания плодового тела в целом.
Путём естественного отбора появляются «хитрецы», которые попадают только в шляпку. В результате, насколько я понимаю, такой способ выживания как плодовое тело, после вымирания тех, кто составляет ножку, приходится «изобретать» каждый раз заново. Поэтому многоклеточные организмы со сложной структурой так и не могут появиться из клеток с разным генетическим кодом.
Общество
Подобный подход можно применить к обществу людей.
Прежде всего, сразу становится понятной клановая структура общества.
Так же, становится понятной невозможность построения сложного и эффективно устроенного общества.
Кланы наверху, кланы внизу, причём нижних всегда пытаются раздробить на отдельных людей и управлять их популяцией разными способами, чтобы не было конкурентов.
Действие в интересах всего человечества (попадание в «ножку») приводит к вымиранию. Действие в интересах только своего клана, как минимум, не приводит к развитию системы в целом.
«Плодовое тело» разваливается.
Из людей «в чистом виде» невозможно построить достаточно большую, и сложную систему, эффективность которой была бы резко повышена за счёт кооперации.
Если рассмотреть не только генетическую, но и другие виды информации в человеке, то ситуация будет несколько лучше.
Общие приобретенные привычки, общее воспитание, идея, захватившая умы, действуют точно так же как и общая ДНК.
Однако человек не является надёжным в этом смысле.
Во-первых, необходимо в процессе воспитания и образования долго «устанавливать» идеи в сознание, причём каждый раз индивидуально и без гарантии результата.
Во-вторых, он может забывать.
В третьих, на него действуют нижележащие генетические программы альтруизма только в родственном круге (который очень ограничен) и программы конкуренции со всеми остальными.
В четвёртых, ресурсы его сознания очень ограничены.
Получается, что некоторая структура общества и разделение труда присутствуют, однако, их сложность и эффективность не могут развиться в достаточной мере.
Всю свою историю человечество пыталось выработать код, который исполняли бы все. Создавались законы, и контролировалось их исполнение, проводилось обучение и пропаганда. Код записывался на внешних, по отношению к человеку, носителях (книгах) и становился более стабильным и общим для всех. Когда это получалось, эффективность совместной работы людей повышалась. Но исполнением кода все равно занимались люди, со всеми вышеописанными побочными эффектами.
Решение проблемы
За последние десятилетия появилось ещё одно место, где может быть записан подобный код — персональный компьютер. И не только записан, но и выполнен независимо, как при обработке ДНК.
По сравнению с использованием человеческого сознания в качестве носителя, такой подход имеет подавляющее преимущество.
Во-первых, быстрая установка приложения.
Во-вторых, легко достижимо стопроцентное совпадение кода у всех пользователей.
В третьих, своими считаются все, у кого установлен тот же код, сколько бы их ни было, а значит, отсутствует ограничение на количество пользователей.
В четвёртых, существенно большая возможная сложность кода и объём информации.
В пятых, на порядки выше быстродействие.
Серьёзное повышение эффективности возможно за счёт того, что действия других узлов предсказуемо полезны для общего дела. В данном случае «альтруизм» — это предоставление своих ресурсов, действие в соответствии с заранее заключенными договоренностями — протоколами, реализованными в коде и направленными на взаимную поддержку.
Напрашивается гипотеза: для повышения эффективности в какой-либо области необходимо разработать для неё сетевое программное обеспечение на принципе всеобщей p2p-кооперации.
Следует уточнить, что одинаковым должен быть не собственно исполняемый код программы, а поддерживаемые протоколы взаимодействия.
Выживание программной системы
Попробуем представить, какими свойствами должна обладать программная система, чтобы выжить.
Выживание и размножение системы зависит от её приспособленности к среде. Эта среда — люди, пользователи компьютеров.
Они принимают решения о появлении или удалении копии на своём компьютере на основе оценки эффективности функционала системы, удобства пользования и возможности контроля работы программы.
Если программа организована по принципу p2p с едиными протоколами, то по сравнению с «обычными» конкурирующими программами, повышение эффективности будет очень существенно, так что пользование новым программным обеспечением будет реально выгодно.
У биткойна изначально была одна программа, устанавливавшаяся на все узлы, работавшая как клиентом, так и майнером. Только потом, когда сеть разрослась, произошла «дифференциация клеток». Клиенты и майнеры стали по смыслу разными типами узлов, хотя и по прежнему несущими в себе полный «генетический код».
С другой стороны, попытки создать массовые p2p — системы, где человек должен будет постоянно принимать решения сам, выставлять рейтинги, выделять ресурсы, оценивать результаты, настраивать и т.д., по-моему, обречены на провал.
Если образ действия не зашит в одном, общем для всех, протоколе, а доверен человеку, то соответствующего повышения эффективности не будет (недостатки человека описаны выше). А значит, не будет и заинтересованности пользователей в этой системе.
Недавно появившаяся платёжная система Ripple заставляет пользователя самому формировать свой круг доверия и следить за его актуальностью. Такой подход — попытка перевалить управление рисками на конечных пользователей. Это эквивалентно разному «генетическому коду», определяющему поведение программы, со всеми вытекающими последствиями.
Правильной реализацией был бы единый программный код, содержащий общесистемный и автоматический алгоритм управления рисками, прозрачный для пользователей. При этом большинство пользователей никогда не будут пытаться разобраться в нём, а просто запустят программу.
С точки зрения удобства пользования конкуренция будет выигрываться теми системами, которые после установки просто работают и «каши не просят». Они могут грузить процессор, сеть, занимать место на жёстком диске, но если система не требует от пользователя «лишних» с его точки зрения телодвижений (вроде уже упомянутой настройки, выставления рейтинга и т.д.) то это решающий плюс к удобству.
Управление и контроль
Тут тоже аналогия с биологическими системами.
Приспособление к потребностям пользователей должно происходить при помощи «мутаций» — изменений функционала, производимых в одном месте и выживающих или нет в естественном отборе. Таких мест мутаций должно быть много, а значит, система должна иметь открытый исходный код.
Изменения это ответ на потребности пользователей в определённом функционале или в увеличении его эффективности. Часть кода, реализующую определенный функционал, назовем расширением (по примеру расширений к браузерам).
Естественный отбор среди расширений должен производиться путём автоматической общесетевой (чтобы проявился кооперативный эффект) проверки на соответствие требованиям пользователя, что-то вроде этого. Иными словами, пользователь не выбирает реализацию, а задаёт требования к результатам её работы.
Требования к файлообменной сети с позиций пользователя могут звучать так: скачивать гигабайтный файл за пять минут. По этому критерию торренты выиграли в естественном отборе.
Даже если у системы и существуют настройки, они должны иметь значения по умолчанию, а также несколько режимов работы, что-то вроде: простой, продвинутый и эксперт.
Контроль пользователя над системой состоит в том, что при желании (в основном, когда что-нибудь не нравится) он мог бы разобраться в её работе с выбранной им степенью погружённости в предмет и изменить понятные ему параметры.
Крайний случай — возможность удаления или запрета на использование определённого расширения.
Требования к пользователю
Мы рассмотрели, что даёт система пользователю. Теперь определим, что пользователь даёт системе.
Если коротко, то ресурсы своего компьютера и ввод информации.
Естественное желание пользователя — просто потребить функционал системы и выключить компьютер.
Чтобы этого не произошло, система должна снимать ограничения или предлагать дополнительный функционал в обмен на какие-то действия.
Торрент трекеры, особенно в начале своего развития, выдвигали жёсткие требования к соотношению количества скачанного/розданного и ограничивали скачивание, в случае если пользователь недостаточно оставался на раздаче.
В системе биткойн реализован механизм в виде возможности майнинга, т.е. получения монет за деятельность по поддержанию её существования.
Если рассматривать достаточно общий случай, то можно сформулировать следующий механизм.
В системе существуют (или могут быть созданы) информационные ресурсы, влияющие на реальную жизнь пользователя. Это могут быть деньги, рейтинг или диплом, элементы портфолио и т.п.
Система предлагает эти ресурсы по общему прозрачному алгоритму в обмен на некоторую деятельность во благо системы.
Среди необходимых задач могут быть:
— осуществление транзакций (как в биткойне);
— подтверждение фактов реального мира;
— написание нового кода системы;
— необходимая деятельность в реальном мире, подтверждённая другими пользователями;
— хранение у себя данных системы;
Подобный подход требует идентификации пользователя и ведения истории по нему, а в некоторых случаях и деанонимизации.
Итак, какой должна быть эффективная система?
1. Распределенной.
2. Без привилегированных узлов.
3. С единым кодом во всех узлах.
4. Устойчивой к уничтожению узлов.
5. Вновь установленная копия должна быть работоспособна сразу с дефолтными настройками.
6. Никакой конкуренции между узлами, только кооперация и работа на общее благо.
7. Открытый исходный код.
8. Настройки системы должны представлять собой формально заданные требования, на основе которых автоматически выбирается исполняемый код.
9. Система должна стимулировать пользователей к системно-полезной деятельности путём выделения на это ресурсов.
Практические реализации
Примером подобных систем могут служить: протокол обмена файлами bittorrent, криптовалюта биткойн, интернет-телефония Skype.
Скачивание «с торрентов» возможно с очень высокой скоростью за счёт того, что все остальные узлы готовы отдавать.
Кооперация узлов сети Биткойн приводит к невиданной до сих пор надёжности и защищённости от взлома. Просто так создать новые биткойны не сможет никто. Арестовать счета невозможно. Очень дешёвые транзакции. Легко хранить. Эти особенности, существенно превосходят «обычные» реализации того же функционала.
Скайп существенно снизил затраты на связь.
Недостатки существующих систем
Тот же скайп не полностью децентрализован, т.е. имеет некоторый набор узлов, на которых установлено программное обеспечение, не такое как на большинстве (например, ведущих списки пользователей). Кроме того, у него закрытый исходный код.
Одна из основных претензий к биткойну — необеспеченность реальными ресурсами. На это его сторонники отвечают, что все остальные валюты обеспечены не более. Это так, но это не ответ на запрос подобной функциональности. Она не реализована ни в биткойне, ни в обычных валютах.
По поводу Ripple написано выше.
Какие системы нужны?
Конечно же те, которые реализуют необходимый пользователю функционал. Здесь поле не паханое.
Можно просто ткнуть пальцем в любой информационный процесс, происходящий в обществе и увидеть, что его p2p-реализация будет гораздо эффективнее с позиций большинства (но не с позиций тех, кто этим процессом рулит сейчас).
Вот несколько примеров навскидку.
Система хранения общественно значимой информации
Основное требование — информацию должно быть «не вырубить топором». Интернет в общем справляется с этой функцией, а где нет, там на помощь приходит кэш Гугла. Однако, до полной и автоматической децентрализации еще далеко. Информация сохраняется либо непосредственно людьми (что, как мы выше разобрались, неэффективно), либо роботами поисковых систем на своих серверах (автоматически, но недостаточно распределённо).
Примером действительно распределенного хранения информации может служить опять же биткойн.
Интересна реализация этой идеи на основе биткойна — «Proof of existence».
Реальное обеспечение криптовалют
Обеспечением валюты могут служить только реальные ценности. Как же привязать нечто материальное к чисто информационному объекту?
Так же как и в обычной жизни. Существуют кадастры объектов недвижимости, база автомобилей ГИБДД и тому подобное, вплоть до товарных накладных.
Нужно хранить всё это в общей распределённой базе данных и интегрировать с криптовалютой.
При продаже передача прав собственности должна производиться одновременно с противоположно направленным потоком денег. Весь документооборот, заключение договоров и т.д., всё так же как и сейчас, но внутри p2p сети со специальным программным обеспечением. Вся история как денежных транзакций, так и движения реальных ценностей доступна всем пользователям сети аналогично истории транзакций того же биткойна. На основе этой информации общесистемный алгоритм должен определять необходимость и способ эмиссии или уничтожения денег.
Документы
Зачем постоянно возить с собой бумаги, если можно в любой момент убедиться в личности человека, получив информацию из распределённой базы?
Производство и стандарты
Если путь материальных ценностей прослеживается в системе от карьера до магазина, то путём анализа использованных ресурсов можно сделать вывод об используемых технологиях и денежно стимулировать либо подавить их использование. Стандарты задаются требованиями пользователей, а реальные техпроцессы подстраиваются под них.
Заключение
Построение распределённых систем с единым кодом позволит сделать человечеству качественный скачок в эффективности своей деятельности. Фактически, это решение дилеммы узника в масштабе всего общества.
Процесс только начинается, но уже сейчас видны результаты. Посмотрим, что будет дальше.
Автор: Vladimir_Izotov