Рубрика:
Карьера/Образование /
Образование
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АЛЕКСЕЙ МИЧУРИН
Второе начало термодинамики – гарант успеха систем с открытым исходным кодом
Мы вышли на развилку, нам некуда вперёд;
Идти назад нам не позволит наша честь.
Непонятно, что такие, как мы,
До сих пор делаем в таком отсталом месте, как здесь.
Борис Гребенщиков
Мы живём в очень интересное время. Информационные технологии настолько прочно вошли в жизнь человечества, что без них уже невозможно представить не только развитие, но и существование нашей цивилизации. Жизненная необходимость разработки и совершенствования ПО уже не вызывает никаких сомнений, и нет оснований полагать, что ситуация изменится в ближайшее время. Поэтому особую остроту моменту придаёт то, что человечество фактически стоит на распутье. Стало очевидно, что есть две принципиально разные доктрины разработки и распространения ПО – с открытым исходным кодом и с закрытым кодом, оба убедительно демонстрируют свою успешность. Единого мнения, какое ПО успешней, нет. Множество людей ведут горячие споры о преимуществах и недостатках того или иного пути. Ситуация стремительно меняется. Человечество пытается принять решение.
Почему термодинамика?
Обычно при обсуждении вопросов выбора между ПО с закрытым и с открытым кодом в расчёт идут соображения экономического, этического характера, другие доводы. Но в этой статье я хотел бы взглянуть на проблему выбора доктрины разработки ПО с необычной стороны: не с точки зрения человека (производителя, потребителя...), а с точки зрения Природы (или правильнее: с точки зрения современных представлений о Природе). Давайте посмотрим на проблему с точки зрения термодинамики (ТД) – физической теории, описывающей поведение систем, состоящих из большого числа элементов. А именно, второго начала ТД – закона возрастания энтропии.
На мой взгляд, термодинамический подход здесь более чем уместен. Взгляните сами: ТД рассматривает системы большого числа частиц. Частицы могут быть нескольких сортов, но каждый сорт представлен большим числом частиц. Очень сходная ситуация наблюдается и в мире ПО. Существует некоторое количество программных продуктов, каждый из которых проинсталлирован множество раз. Невольно напрашивается мысль продолжить аналогии и посмотреть, какие результаты дадут фундаментальные законы ТД, если их применить к миру ПО. Я обращусь ко второму началу ТД – фундаментальному закону, определяющему направления развития (эволюции) подобных систем.
Давайте сперва разберёмся, что такое энтропия, как применить это понятие к нашему вопросу и почему она возрастает.
Энтропия – мера возможностей
Все знают магические слова: «энтропия – мера беспорядка», но мало кто задумывается о том, что за беспорядок имеется в виду.
Строго говоря (по определению), энтропия данного макросостояния системы – величина, пропорциональная логарифму числа микросостояний, которыми реализуется данное макросостояние. Понятнее не стало? Давайте разбираться.
Простой пример: у нас есть два спичечных коробка и четыре спички. С нашей макроскопической точки зрения спички неразличимы, одна ничем не хуже другой. Для нас важно только, сколько в каком коробке находится спичек. Это макроописание системы. Однако, на микроуровне (на уровне спичек) они (спички) различимы и их можно, например, пронумеровать и раскладывать в коробки разными способами, получая одну и ту же макроконфигурацию. Сколькими способами мы можем реализовать макросостояние: в первой коробке – одна спичка, во второй – три (обозначим это состояние 1 + 3)? Или иначе, сколькими способами мы можем разложить четыре неодинаковые спички по двум коробкам, получая заданное макросостояние 1 + 3? Очевидно, таких способов четыре (см. рисунок). А сколькими способами можно реализовать состояние 2 + 2? Шестью (тот же рисунок). Энтропия последнего состояния больше. Энтропия же состояния 0 + 4 равна нулю, так как это состояние реализуется только одним способом (логарифм единицы – ноль).
В этом смысле действительно уместна аналогия с порядком и беспорядком. Если все спички лежат в одном месте, это полный порядок и нулевая энтропия. Если всё разбросано хаотично, в беспорядке, то энтропия максимальна. Но это только одна из точек зрения на смысл энтропии.
Я хочу подвести читателя к мысли, что энтропия показывает не столько беспорядок в бытовом смысле этого слова[2], сколько число возможностей для реализации заданного макроскопического состояния (как это и говорилось в определении).
Если рассмотреть больше коробков, то драматизм ситуации ещё более возрастает. Например, для четырёх коробков и восьми спичек конфигурация 1 + 1 + 1 + 5 реализуется 336 способами, а ситуация 2 + 2 + 2 + 2 может реализоваться 2520 способами. Энтропия последнего состояния, как вы понимаете, гораздо больше. Даже минимальное отклонение от этого состояния в состояние типа 2 + 2 + 3 + 1 уменьшит количество возможных реализаций на треть (до значения 1680 шт.).
Надеюсь, теперь определение энтропии, данное в начале этого пункта, уже никому не кажется странным или пугающим. Мы уже обжились на микро- и макроуровнях рассмотрения систем и можем смело двигаться дальше.
Второе начало ТД
Второе начало ТД, как известно, утверждает, что энтропия изолированной системы не убывает, то есть возрастает или остаётся постоянной.
Теперь это утверждение становится более понятным. Если мы предоставим спички из нашего примера самим себе (по условию система должна быть изолированной, т.е. наше вмешательство в систему категорически исключено), то они, скорее всего, придут к состоянию, отвечающему равному заполнению коробков и обладающему большей энтропией. Именно поэтому воздух в вашей комнате заполняет каждый её уголок равномерно: он просто распределился таким образом, чтобы энтропия стала максимальной.
Эволюция Живого
Я хотел бы немного отвлечься и взглянуть на эволюцию Живого в Природе (слово «Жизнь» я буду писать с большой буквы, подчёркивая тем самым, что я имею в виду не мою и не вашу жизнь, и даже не жизнь человечества, а Жизнь как минимум на планете Земля). На мой взгляд, здесь это будет вполне уместно по двум причинам. Во-первых, мир программ и вычислительных машин, усложняясь и организуясь, приобретает всё больше черт, роднящих его с живыми существами. Это видно даже из терминологии, достаточно вспомнить термин «virus» или оператор «die» (язык Perl), или команду «kill» (ОС UNIX). Во-вторых, любая эволюция подчиняется одним и тем же глобальным законам, но эволюция Живого гораздо старше эволюции ПО и может преподать много поучительных уроков.
Что же демонстрирует эволюция Живого? Она красноречиво свидетельствует, что Живое всё время стремится к разнообразию. ДНК – основной носитель наследственной информации – наращивается[3] в ходе эволюции (эквивалентно увеличению числа коробков в наших захватывающих опытах со спичками). Таким образом, увеличивается число возможностей реализовать Жизнь. То есть Природа остаётся верна себе, постоянно увеличивая энтропию. При этом увеличивается не беспорядок в бытовом смысле, а скорее информационная ёмкость. Возвращаясь к нашему определению энтропии: возрастает количество микросостояний, доступных системе.
Больше того, Жизнь «изобретает» способы, ускоряющие процесс создания различных модификаций, ярчайший пример – появление двух полов. Благодаря постоянной рекомбинации (перекомбинированию) генетического материала каждый индивид даже одного вида становится уникален.
Представьте на минуту горе-человечество, размножающееся почкованием, где каждый человек несёт один и тот же набор генов и обладает одним и тем же набором форм иммунного ответа (защитных реакций). Такое человечество крайне нестабильно. Довольно быстро появится вирус (например), который истребит всех. К счастью, все люди разные, и человечество в целом продолжает здравствовать и по сей день.
Подобная ситуация наблюдается и в любой другой эволюционирующей системе большого числа элементов. Эволюция общественного строя, эволюция инструментов труда, эволюция языков (в том числе и языков программирования), эволюция системы частиц газа в вашей комнате – все они ведут к увеличению числа возможностей реализации системы, то есть к увеличению энтропии. (В обществе всё больше различных «вакансий» для человека, инструменты труда предоставляют всё больше возможностей для достижения целей, языки предлагают всё больше вариантов выражения мыслей...)
Но мы уже рискуем увлечься, вернёмся теперь в мир ПО.
Эволюция в мире ПО
В мире ПО царят те же самые законы, и эволюция неминуемо пойдёт по единственному возможному пути. ПО с закрытым исходным кодом, не допускающее модификацию, обречено, как и гипотетическое почкующееся человечество. Напротив, ПО с открытым кодом неминуемо восторжествует, так как каждая «пересобранная» из исходных кодов система уже является новой модификацией (не клоном, но новым индивидом того же вида), отличающейся от других возможно даже частью функциональных возможностей.
Акт заимствования фрагмента кода из другой системы в чём-то сродни актам создания новых комбинаций генетического материала и тоже повышает устойчивость всего информационного сообщества (конечно, не обходится и без ошибок, но «мутанты» не живут долго).
Представьте себе Интернет, на всех серверах которого стоит один набор программ, скомпилированных одним компилятором с одним набором параметров компиляции, установленных с одного диска одним касанием клавиши Enter... Клоны, клоны, клоны... ни чем не отличающиеся друг от друга. В конце концов, появится вирус, который воспользуется общей уязвимостью и разрушит весь этот мир. Если же ядро ОС каждого сервера и программное обеспечение хотя бы просто перекомпилированы, то атаки, направленные, скажем, на переполнение буферов (наверное, наиболее опасные и эффективные атаки[4]), затронут только тот soft, который имеет строго определённый двоичный код. Остальной soft будет неуязвим. Это простой пример, только один из многих.
Тут читатели меня спросят: «Как же всё произойдёт? Что будет переломным моментом? Когда ждать предсказываемой мною победы OpenSource?»
К сожалению (или к счастью?), я не могу ответить на эти вопросы, как не могу ответить, почему именно эта молекула воздуха оказалась именно здесь и когда здесь окажется другая.
Возможно, должны измениться экономика и мораль, прежде чем ПО с открытым исходным кодом займёт то место, которое предназначено ему общеэволюционными законами. Возможно, что и сами способы разработки, лицензирования и распространения ПО изменятся до неузнаваемости. Трудно представить, что человечество не найдёт каких-то компромиссов и более совершенных решений. Я не знаю, когда это случится. Как не знаю, почему именно сочетание букв с-т-а-т-ь-я выражает то, что я сейчас пишу. Я только знаю, что языки становятся всё выразительнее и богаче, и в них найдутся слова для моих мыслей; что воздух по-прежнему равномерно заполняет мою комнату и я не задохнусь; Жизнь ищет всё новые пути разнообразить себя; ПО с открытым исходным кодом непременно восторжествует, второе начало ТД останется непоколебимым и Природа остаётся верна своим законам.
Дополнение 1: Несколько слов об изолированности системы
Я уже слышу возмущённые голоса читателей: «Уважаемый автор совершенно верно сказал, что второе начало ТД справедливо только для изолированных систем, а сам применяет его к чему попало! Ведь всем ясно, что наша планета не является термодинамически изолированной системой, получая тепло от Солнца. Тем более не являются изолированными подсистемы, упомянутые автором: компьютеры подключены в сеть электропитания, программисты потребляют еду и напитки... Как же можно применять второе начало ТД ко всем этим системам?».
Читатель абсолютно прав. Упомянутые системы не изолированы в термодинамическом смысле, но это не должно нас смущать, ведь и энтропию мы рассматриваем не в термодинамическом смысле. Мы не рассматриваем атомы и молекулы, как это делает термодинамика, мы выбрали другие микро- и макроуровни рассмотрения.
Давайте вернёмся к примеру со спичками. Если мы нагреем нашу систему коробков-спичек, то термодинамическая энтропия, конечно, возрастёт, но спички останутся на своих местах и наша энтропия не изменится. Т.е. система вполне сохранила изолированность в нашем понимании.
Точно так же появление новой операционной системы на компьютере практически не связано с количеством потреблённой им электроэнергии и ещё меньше связано с количеством попавших на него солнечных лучей. Термодинамическая изолированность или неизолированность здесь до известной степени ни при чём.
Однако все законы продолжают выполняться и в нашем случае. Так, чтобы уменьшить энтропию, необходимо совершить работу. В нашем случае со спичками – продумать, как их разместить, и выполнить необходимые перестановки, переведя систему, скажем, из состояния 2+2 в состояние 0+4. Это сродни той работе, которую вы затрачиваете на уборку, складывая равномерно разбросанные вещи (два карандаша на столе, два – под столом) в одно место (все четыре – на столе, ноль – под столом). Причём я имею в виду не просто механическую работу (тем более не теплоту в термодинамическом смысле), а усилия в самом общем смысле: сюда включены и поиски карандашей, и подбор наиболее подходящего для них места... Опять же, неизолированность вашего стола и карандашей в термодинамическом смысле (их возможность обмениваться теплом с другими телами) нисколько не повлияет на ход вашей уборки, потому что ваши усилия иные, нежели теплообмен с системой.
Конечно, последовательный анализ изолированности указанных систем (в указанном, не термодинамическом, смысле) требует отдельной статьи, но я думаю, что приведённых доводов достаточно, чтобы развеять многие опасения и сомнения.
Дополнение 2: Несколько уточнений об эволюции Живого
Искушённый читатель, конечно, знает, что клоны тоже не эквивалентны. Позвольте сказать об этом несколько слов, чтобы отвести от себя возможные упрёки читателей в несправедливом проведении аналогий между миром живых существ и миром ПО. А заодно подкрепить выводы статьи дополнительными соображениями.
Наивно было бы думать, что в течение жизни организма его генетический материал остаётся неизменным. Под воздействием неблагоприятных условий окружающей среды (различные излучения, химически активные вещества...), по вине случайных флуктуаций (нарушений хода деления клетки) могут произойти мутации как на уровне одного гена, так и на уровне целого генома.
Вы видите, что невозможно в живом мире существование двух одинаковых организмов, даже если один из них является клоном другого. Конечно, генетический материал гораздо более подвержен изменениям, чем, скажем, код программ. И, конечно, нельзя получить копию живого организма так же, как копию файла. То есть наша аналогия между эволюцией живого и эволюцией ПО может показаться не вполне справедливой. Но при внимательном рассмотрении легко заметить, что указанные здесь несоответствия только добавляют весомости сделанным в статье выводам.
Действительно, даже несмотря на то, что гены меняются самопроизвольно, а точное копирование живого невозможно, Природа была вынуждена изобрести способы дополнительного ускорения создания новых и новых комбинаций генов. И принудил её к этому всё тот же закон возрастания энтропии.
Сможет ли эволюция ПО устоять перед этим фундаментальным эволюционным законом? Сама Природа, выбирая между неизменным и изменчивым, всегда отдаёт предпочтение последнему.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|