生命システムの動作継続性:フィードバックループの束
私はシステムエンジニアとしての観点から、生命の起源について個人研究を行っています。
この記事では、システムの動作継続性という観点から、ソフトウェアシステムと生命現象を眺めることで、システムとしての生命についての理解を深めて行きたいと思います。
記事の前半では、ソフトウェア開発者が、そのソフトウェアが動作するためのコンピューティング環境をどのように意識しているかという話から、システムが動作継続するためには多数の高度な機能が必要になる点について解説をしていきます。
システムの動作継続という点を生命現象に当てはめて考えると、生命現象は単一や少数の機能があれば済むようなものではなく、種類の異なる多数の機能が無ければ、成立し得ないという原則がある事に気づきます。
もちろん、生物はそれ自体が複雑な多数の機能を持ちますが、生命の起源という生物が出来上がるまでの過程においても、この原則があてはまるはずです。そうなると、シンプルな少数の機能から生命が出発し、それが徐々に進化して複雑になったと考える事が難しくなります。
そこには、高度に発達した複数の機能と、それを束ねる仕組みが必要になるはずです。それがどういった仕組みだったのかという新しい謎が浮かび上がってきます。
記事の後半は、私がこれまで別の記事でも立ててきた生命の起源の仮説を少し振り返りつつ、この新しい謎をどのように解釈できるかを考えていきます。
■ソフトウェア開発者から見たコンピューティング環境
ソフトウェアエンジニアは、ソフトウェアが動作するコンピューティング環境を、しばしば当たり前に存在し、動作し続けるものとして考えてしまいます。
特に、単に学校でプログラミングを習っただけの人や、趣味でソフトウェアを作っている人はそうした考えになりがちです。また、仕事としてソフトウェアを開発していても、パソコンやスマートフォンの上で動作するアプリケーションソフトウェアの開発者や、クラウド上のサーバレスアプリケーションの開発者やブラウザで動作するフロントエンド部分の開発者には、その傾向が強いと感じます。
一方で、製品に組み込まれるソフトウェアや、サーバ上で動作するソフトウェアを開発する人は、ソフトウェアが動作するコンピューティング環境についても注意を払います。こうした人は、単にソフトウェアだけでなくハードウェアも考慮するという意味で、システムを開発しているという意識を持っています。
ソフトウェアのコンピューティング環境を意識して、システムとして捉えた場合、そのシステムが正しく動作することにも注意深く意識を向ける必要があります。システムには電源が入って起動しますし、意図的に電源が切られることもあれば、アクシデントで電源が断たれる場合もあります。また、ハードウェアが全面的に故障することもあれば、部分的に不調に陥る事もあります。異なる二つの異常が、偶然同時に起きる事すらあります。
■ソフトウェアシステムにおける動作継続性
サーバ上で動作するシステムの場合、システムが正しく動作するための環境を維持する役割は、システム運用者やサーバ管理者と呼ばれる人が担います。
ソフトウェア開発者がこの観点で考えるべきことは、異常や予期しない事が起きた場合には、それを自律的に検出して、運用者や管理者に知らせるための機能をソフトウェアとして実現することです。
この他、そうしたトラブルの原因を把握しやすいようトラブルの有無にかかわらず動作の記録を残しておく機能や、トラブルのために本来とは異なる状態で保存されたデータによって処理が混乱しないように、中途半端な情報を運用者や管理者がクリーンな状態にするための機能も考えられます。データ破損に備えてデータのバックアップや二重化をしておくための機能も検討すべきでしょう。
同じくシステム的な観点での開発が必要になる、製品へ組み込まれるソフトウェアの開発者は、サーバ上のシステムの開発者に比べて、更に多くの考慮を求められます。なぜなら、組込みソフトウェアが入った製品には、サーバ運用者や管理者のような立場の人に頼りきりにはできないためです。そうした立場の人は存在しないか、存在したとしても1つのシステムの専任ではなく多数の製品を監視しています。このため、人の手ですぐに適切な対処がなされることを期待できません。
もちろん、ソフトウェアで全ての問題を解決できるわけではありませんが、様々な状況に適切に対応しながらできる限り自律的に機能を維持できるようにすることが求められます。
これは、サーバシステムであれば運用者や管理者が提供するはずのシステム維持管理のためのサービスを、ソフトウェアの機能によってできる限り内部化する必要があるという事です。これは、システムが自己認識し、自己保全をし、自己復旧や自己トラブルシュートや自己縮退を試みるという、極めて高度で複雑な仕組みの開発を必要とします。
■システムの動作継続の複雑さ
このように単にソフトウェアという点だけでなく、そのソフトウェアが動作する環境も含めたシステムとして捉えると、システムの動作の継続性というのはとても複雑なものであることが分かります。
システムで実現したいメインの機能は単純であっても、それが動作を継続するためには、予期しない操作や不測のトラブルに対して、人の力や自律的な内部の機能によって、対応していく必要があります。そうした対応が出来なければ、システムはどこかで止まってしまい、それ以降はメインの機能を提供することができなくなります。
システム設計者は、そうした観点から、メインの機能の設計の他に、保守運用のための機能の設計、自律的な自己保持のための機能の設計を行います。また、ソフトやシステムだけでなく、人間による保守運用体制の設計や、利用者や保守運用者に提供するマニュアル等のドキュメントの設計も行います。これは、既存のシステムの機能拡張開発や、類似システムの開発であれば、既にあるものに手を加えるだけですが、全くの新規の開発であれば、それぞれ一から考える事になります。
先ほど見たように、組込みシステムの場合は、より高度な事が求められます。このため、通常、メインの機能の開発よりも、システムの動作継続性のためのこれらの設計や開発の方が、はるかに大きな仕事の量になります。
■生命現象
組込みシステムにおけるシステムの動作継続をするための仕組みの複雑さと高度さを振り返ると、生命現象を理解する際の視点も変わってくるでしょう。
生物は、高度な動作継続性が求められるシステムです。動作が継続しないという事は、言うまでもなく、生物にとって死を意味するためです。
システムの動作継続性という観点から考えると、生物の生命が維持されるためには、何か決定的な1つか2つの機能が精巧な仕組みで作られれば済むというものではないはずです。
生物が活動する中で遭遇する、様々な外的な変化や内的な変化、変動やトラブルがあるはずです。その一つ一つに適切に対応するためには、それぞれに対する機能やメカニズムが必要になるはずです。例えば100種類の問題があれば、100通りの対応ができるような機能が必要です。仮に1つのメカニズムで10通りの対応ができるなら、10個の機能が必要です。
生物が遭遇する変動やトラブルの種類は100種類などでなく、桁が違うはずです。単細胞生物であっても例えば10000個以上の細かな機能があるとしても、全く不思議ではありません。このように考えると、生命現象をどんなに抽象的に説明しようとしても、数個の機能の説明で収まるはずはありません。
■生命現象における機能を束ねるもの
多数の異なる機能が必要になる、ということは、生命現象の理解を複雑にします。一方で、生命現象は、単一の機能ではなく、多数の機能の束であるという点は、私にとっては1つの発見でした。
生物にとって、多数の機能の束であることが必要な要件であるか、単一あるいは少数の機能から出発して、徐々に複雑化していったのかという問いに対して、少なくとも私は、前者が正しいという確信を持ちました。
変動やトラブルに対処する機能の質や種類が不十分であれば、生物における生命現象は長く継続する事が出来ません。例え子孫を残す機能と進化による適用性の向上の能力があっても、個々の生物が十分な時間安定して動作することができなければ、意味がありません。
動作継続に必要になる機能の種類や個々の機能の具体的なメカニズムの事はさておき、多数の機能が束ねられることが生物の要件だとすると、その機能を束ねる仕組みがあるはずです。生物が成立するために、必要な機能を束ねる仕組みとは何か、それが新しい問いとして浮上してきました。
■フィードバックループの視点
私は、生命現象における動作継続の仕組みは、個別に発達した自己強化的なフィードバックループによるものだと考えています。そのループは、最終的に生物の内部に完全に入り込んだものや、生物と環境の相互作用によるものがあると考えています。
これらのフィードバックループは、元々は、生命が誕生する以前の太古の地球において、無生物により形成された現象だったと考えられます。
地球上には複数の池や湖があり、その間を水が循環しています。化学物質が池や湖に蓄積し、太陽や地熱などのエネルギーを受けて化学反応を起こして新しい化学物質が生成されます。川の流れ、蒸発、雲の移動、降雨を含む水の循環の中で化学物質が移動すると、そこにフィードバックループが形成されます。
そうして形成された個々のフィードバックループが、それを構成する要素を徐々に複雑な化学物質に置き換えながら進化していったというのが、私の仮説の出発点です。最終的には、それらの化学物質が細胞膜にカプセル化されることで、生命の原型ができたというのが私の仮説です。
この時、単一のフィードバックループであっても生命の原型になることができ、それが進化して機能が加わっていったと解釈するのであれば、ここで話は終わりです。
しかし、多数の機能が束ねられていることが生命の必須要件であると考えると、単一のフィードバックループは相変わらず単に無生物的な現象に過ぎないという事になります。単体のたんぱく質が、それ自体が生命とは言えないという事と同じです。
そして、生命が成立するために必要となる多数のフィードバックループが、どのような原理で上手く細胞として束ねられたのか、ということが謎になります。
■フィードバックループの束の形成過程
一つ考えている事は、フィードバックループ同士の依存関係がループを形成したという可能性です。
フィードバックループ同士にも依存関係が存在するケースはあるはずですので、その依存関係がくるっと一周してループ構造を持てば、確かにフィードバックループが束ねられたという形に見えるでしょう。
フィードバックループ同士が、さらに依存関係のループを形成するという複雑な構図がなぜ必要だったのかという点も問題になります。これは、初期のフィードバックループが化学物質の移動に地球の水の循環の仕組みを利用していて、生物はそれを利用していない点に目を向けると理解ができます。
地球における初期の化学的なフィードバックループは、化学物質を安定して移動させるために地球の水の循環の仕組みに依存することで実現されたと考えられます。このフィードバックループを土台にして、そこで生成される化学物質を使って、別のフィードバックループも形成されるでしょう。
多数のフィードバックループが依存関係を持ちながら生成されていきます。その中で、初期のフィードバックループが必要としていた化学物質の移動の機能を代替する仕組みを生成できるフィードバックループが現れたと考えてみます。すると、化学物質の移動の機能を、地球の水の循環に頼らずに実現できるようになります。かつ、その状態は、フィードバックループの依存関係がくるっと一周してループ状になっています。
地球の水の循環に依存していた無生物のフィードバックループ群が、地球の水の循環から独立することができた時、その自立したフィードバックループ群は生命の出発点のように見えるはずです。つまり、地球の水の循環からの独立が、無生物から生命現象が現れた一つの段階だったのではないかというのが、私の考えている仮説です。
そのように捉えると、地球の水の循環からの独立するために必要な多数のフィードバックループ群が、さらに依存関係のループを形成することが、生命の出発点において必要だったと言えます。すると、必然的にそこには依存関係で結びついた多数のフィードバックループの束が現れることになります。
これが、動作継続のために必要になる多数の機能を持つフィードバックループの束が形成された過程と、その原理についての、私の仮説です。
■さいごに
組み込みソフトウェアは、コンピューティング環境の制約と安定動作が要件として求められるという制限があります。このため、インターネットで検索したり技術ブログなどを読むと登場する、最新のソフトウェア技術やソフトウェア開発手法などを、組込みソフトウェアの開発者が取り入れることは難しいという事情があります。このことは、組込みソフトウェア開発者に、世の中の技術から取り残されているという思いを抱かせています。
しかし、最新のソフトウェア技術が使えるかどうかは、システム開発者としては表面的な問題でしかありません。組込みソフトウェア開発者は、先ほど見たように、システムの実行環境の自律性という分野においては、他のソフトウェア開発者より高度で深い知識や実践的ノウハウ、そして設計スキルが求められます。
こうした自律的なシステムを実現するための様々な機能は、サーバ上で動作するソフトウェアであれ、パソコンやスマートフォン上のアプリケーションソフトウェアであれ、備えていれば役に立つ機能です。それを適切に設計できるのであれば、決してエンジニアとしてのスキルとして、組込みソフトウェアの開発者が後れを取っているという事はありません。
この記事では、組込みシステムの開発者が、新しい製品を開発する度に、その製品とその上のコンピューティング環境の特性を加味して取り組んでいる、自律的な動作継続性の確保という難易度の高い問題について、焦点を当てました。そして、その問題から得られた知見に基づいて、私の個人研究のテーマである生命の起源についての洞察を導きました。
組込みシステムやソフトウェアの開発の他にも、世の中には様々な仕事があり、一見地味に見えるものも多いと思います。そうした仕事の中にも、じっくりと観察すると本質的な難しさや難易度の高いものがあり、おそらくそういう部分に、新しい気づきや発見は眠っているのだと思います。もし、それが純粋な科学や論理の組み立てだけで容易に解決できるのであれば、とっくにその仕事はもっとシンプルで簡単なものになっているはずなのです。
難しさが残っているなら、私たちが見つめるべき何か本質的な知恵や発見があっても、不思議ではないと思っています。
サポートも大変ありがたいですし、コメントや引用、ツイッターでのリポストをいただくことでも、大変励みになります。よろしくおねがいします!