へにゃぺんて活動報告
2024 年春号［著］⼤神祐真

第⼗回 技術書同⼈誌博覧会 新刊

2024 年 5 ⽉ 12 ⽇

1

ver 1.0■免責
本書は情報の提供のみを⽬的としています。
本書の内容を実⾏・適⽤・運⽤したことで何が起きようとも、それは実⾏・適⽤・運⽤した⼈⾃⾝の責任であり、著者や関係者はいかなる責任も負いません。
■商標
本書に登場するシステム名や製品名は、関係各社の商標または登録商標です。
また本書では、™、®、© などのマークは省略しています。

2

はじめに本書をお⼿に取っていただき、ありがとうございます！ 最近、「DaisyOS」という⾃作 OS のゲームボーイ版の実装を進めています。それ⾃体はまだ完成とは呼べないものですが、できることはありますので、これを作るに⾄った近年のへにゃぺんての「⾃作 OS」に対する考え⽅と共に「活動報告」という形でまとめてみました。
独⾃な理論に基づく独⾃な OS を紹介する内容となっていますので、「こんな考え⽅もあるのか」と⾯⽩がっていただけたら幸いです。

本書の更新情報等について本書を含め、当サークルの同⼈誌・同⼈作品の情報は下記の筆者ウェブページにまとめています。

• http://yuma.ohgami.jp/
本書の内容について訂正や更新があった場合もこちらのページに記載します。何かおかしな点があった場合等は、まずこちらのページをご覧ください。

–i–
3

4

⽬次
はじめに
第1章

1.1
1.2
第2章

i
へにゃぺんての「⾃作 OS」について「独⾃な OS」とは . . . . . . . . . . . . . . . . . . . . . . . . . .
DaisyOS とバイナリ⽣物学 . . . . . . . . . . . . . . . . . . . . . .

⽣物的な振る舞いで⾃⼰制御している仕組み . . . . . . . . . . . . .

33682.4
操作例：デイジーを間引く . . . . . . . . . . . . . . . . . . . . . . .
2.5
操作例：地表温度に外乱を与えてみる . . . . . . . . . . . . . . . . .
2.6
操作例：各デイジーのメタデータ等を⾒てみる . . . . . . . . . . . .
2.7
操作例：評価関数を変えてみる . . . . . . . . . . . . . . . . . . . .
[コラム] ⽩/黒デイジーの命令列について . . . . . . . . . . . . . . . . . . . .

11121315172.1
2.22.3

DaisyOS GB v0.3
公開場所と実⾏⽅法 . . . . . . . . . . . . . . . . . . . . . . . . . .
「ガイア理論」と「デイジーワールド」について . . . . . . . . . . .

おわりに

19– iii –
5

1
1
2

6

第1章

へにゃぺんての「⾃作 OS」についてこの章ではへにゃぺんての「⾃作 OS」について重視している考え⽅などを説明します。この考え⽅が次章で紹介する「DaisyOS」へ繋がります。

1.1「独⾃な OS」とはへにゃぺんては「⾃作 OS」を軸に趣味で活動している個⼈サークルです。「独⾃なOS」であること、特に「⾃分の OS」と呼べるようなものになることを重視しています。

2017 年に初の同⼈誌を出した「OS5*1 」という⾃作の OS の頃からその事を重視してはいました。「OS5」はブートローダー・カーネル・ユーザーランド (アプリケーション群) を全てフルスクラッチした OS です。簡単なものではありますがフルスクラッチしていることで「⾃分の OS」と呼んでも良いかな、という思いでした。これは⾃⾝の勉強のために作ったものでもあり、OS の設計は現代の⼀般的な OS と同様に、メモリ管理・タスク管理・デバイスドライバやファイルシステムを有するものです。そして、ユーザーランドへ「プロセス」や「ファイル」といった抽象的な概念をシステムコールを通じて提供する、というものでした。
ただ、結局の所、中⾝の設計が⼀般的な OS と同じようなものなのであれば、それは⼀般的な OS の亜種に過ぎないのではないかと思ってしまいます。そして、「これ*1 http://funlinux.org/os5/–1–7

第1章

へにゃぺんての「⾃作 OS」についてこそが⾃分の OS だ」と呼べるような独⾃性の⾼い OS を作るにはどうすれば良いだ
ろうかと考えるようになりました。
現代の⼤抵の OS は共通して「『ファイル』や『プロセス (アプリ)』といった抽象的な概念をユーザーに提供する」というものであると思います。「ファイル」や「プロセス」は基本的にハードウェア側には無い概念です。単なる 0 と 1 のバイナリ列を「これは画像ファイル」、「これはテキストファイル」、「これはアプリ」といったようにユーザーに対してあたかもそのような実体があるように OS が⾒せかけているだけです。ただ、「ファイル」・「プロセス (アプリ)」という抽象化はとても便利な概念であるが故に、⼤抵の OS は「ファイル」や「プロセス (アプリ)」を扱うものであるのだと思います。これは、OS がコンピュータに上に「ファイル」や「プロセス (アプリ)」という概念に基づく「世界観」を提供しているとも⾔えると思います。
ただ、そもそもコンピュータは基本的に「メモリから命令を読んで CPU で実⾏する」という機械であり、「『ファイル』や『プロセス (アプリ)』という世界観を提供する専⽤の機械」という訳では無いはずです。どのような世界観を提供するかは OS 次第であり、「ファイル」でも「プロセス (アプリ)」でもない独⾃な世界観を提供するOS があっても良いのではないかと考えています。そして、そのようなものができれば、それこそが「⾃分の OS だ」と呼べるような独⾃性の⾼い OS になるのではないかと考えています。

1.2

DaisyOS とバイナリ⽣物学「ファイル」でも「プロセス (アプリ)」でもない独⾃な概念として考えているのが「⽣物」です。「実⾏プログラムなどのバイナリ列を⽣物として扱う環境を提供するOS」というものを⽬指しており、それを実現する OS を「DaisyOS」と呼んでいます。
そして、それを実現するために、バイナリを⽣物として扱う仕組みを考え、設計や実装などを⾏う取り組みを「バイナリ⽣物学」と呼んでいます。具体的にどの様にして実⾏プログラムなどのバイナリ列を⽣物として扱うかについては、次章で「DaisyOS」の仕組みを説明する中で解説します。

–2–8

第2章

DaisyOS GB v0.3

バイナリが⽣物のように振る舞う事でできることの⼀つの例として、「ガイア理論」の「デイジーワールド」をゲームボーイ (GB) 版の DaisyOS 上に実装してみました。この章ではそれを⾏った最近の製作物である「DaisyOS GB v0.3」を紹介します。

公開場所と実⾏⽅法

2.1♣ 公開場所「DaisyOS GB v0.3」は「itch.io*1 」というインディーゲームを公開するサイトで公開中です。

• URL：https://yohgami.itch.io/daisyworld-demo-daisy-os-v030◦「daisyos gb v0.3」等で Google 検索するか、あるいは筆者のウェブサイ
ト*2 からもたどり着けます♣ 実⾏⽅法上記のページへアクセスすると図 2.1 の様に、「Run game」というボタンが表⽰されます。

*1 https://itch.io/*2 http://yuma.ohgami.jp/–3–9

第 2 章 DaisyOS GB v0.3

▲ 図 2.1: 「DaisyOS GB v0.3」のページを開いた直後
このボタンを押すと図 2.2 の様に実⾏を開始できます。

▲ 図 2.2: 実⾏の様⼦♣ 遊び⽅
基本的に⾒ているだけのソフトです。後ほど簡単に説明しますが、「ガイア理論」の「デイジーワールド」が動いており、四⾓の枠内の⽩と黒の花 (デイジー) の増減によって画⾯右上の「ちひようおんど (地表温度)」が、上下しつつもデイジーの⽣育適–4–

102.1 公開場所と実⾏⽅法

温 (20 ℃としています) 付近に⾃⼰制御されます。

..................................................
ROM ファイルも公開中
ページを下へスクロールすると、図 2.3 の箇所から ROM ファイルのダウンロードも可能ですので、お⼿元のエミュレータで試すこともできます。

▲ 図 2.3: ROM ファイルの公開場所..................................................
..................................................
スマートフォンでも動きます
ブラウザで動作する「binjgb*3 」というエミュレータを使⽤しています。このエミュレータはスマートフォンにも対応しており、筆者が確認する限り Androidの Chrome ブラウザでも動作します。
スマートフォンで試す際は、「Run game」ボタンをタップした後、GB 画⾯の右下に表⽰される最⼤化のボタン (図 2.4) をタップして実⾏画⾯を最⼤化してください。

▲ 図 2.4: 最⼤化ボタン
すると、最⼤化した画⾯の下部にタップで操作するコントローラが表⽰されます (図 2.5)。最⼤化しなくてもスマートフォンのブラウザで開けばタップで操作するコントローラは表⽰されているのですが、GB の画⾯表⽰⾃体に重なってしまっているため最⼤化した⽅が操作しやすいです。
*3 https://github.com/binji/binjgb

1
1–5–

第 2 章 DaisyOS GB v0.3

▲ 図 2.5: スマートフォンのブラウザ上で最⼤化した状態..................................................

2.2「ガイア理論」と「デイジーワールド」について

このソフトは「ガイア理論」の「デイジーワールド」というものを、⼀部独⾃な解釈も含みますが、GB 版の DaisyOS 上に実装したものです。
「ガイア理論」と「デイジーワールド」が何なのかが分からないとこのソフトが何をやっているのかも分からないため、それぞれについて簡単に説明します。

..................................................
「よりシンプルなバイナリ⽣物学の本」を既読であれば次節の「PDP-7版との違い」の項まで⾶ばして構いません
以降から次節の「PDP-7 版との違い」の項までは、⽂章⾃体は書き直していますが、内容としては既刊「よりシンプルなバイナリ⽣物学の本」と同じです。
そのため、その既刊を既に読んでいただいているようであれば、次節の「PDP-7版との違い」の項まで⾶ばして構いません。

..................................................

–6–

1
2

2.2 「ガイア理論」と「デイジーワールド」について♣ ガイア理論とは「ガイア理論」は、「ガイア仮説」とも呼ばれるもので「⽣物は地球と相互に関係し合い、⾃⾝の⽣存に適した環境を維持するための⾃⼰制御システムを作り上げている*4 」とする仮説です。

♣ デイジーワールドとは「デイジーワールド」は、ガイア理論の妥当性を⽰すために考えられたモデル環境です*5 。そこでは、まず⽣物としては⽩と黒の 2 種のデイジーしか居ない世界を想定します。加えて、これらの 2 種のデイジーの⽣育適温は同じであるとします。すると、この世界に降り注ぐ太陽光の量が増えた時、⽩いデイジーは⽩が光を反射することで放熱の効果があるため⽣き続けることができますが、逆に黒いデイジーは⾃⾝の黒が蓄熱の効果があるために⽣育適温を超えて暑くなりやすく死滅していきます。したがって、太陽光の⼊射量が増え、デイジーが居ない地⾯では単純に地表温度が上昇していく状況でも、デイジーが存在することで地表温度がデイジーの⽣育適温付近で⼀定に保たれると考えられます。逆に、太陽光の⼊射量が減った場合も、黒いデイジーが蓄熱の効果により⽣き続けることができ、逆に⽩いデイジーが死滅していく事から、同様に地表温度が保たれます。これらは正にデイジー⾃⾝の⽣存に適した環境を維持するための⾃⼰制御システムができていると考えられ、ガイア理論の妥当性を⽰しているとされています。

♣ ⼀部独⾃解釈している部分
デイジーワールドを DaisyOS 上で表現するにあたり、実装の都合で以下の独⾃解釈をしています。

•「太陽光」という要素は登場しない◦ ⽩いデイジーは地表温度を下げ、黒いデイジーは上げるというだけ• ⽣育適温から外れても死ぬことはない◦ 死は寿命のみ◦ ⽣育適温から外れると増殖しにくくなる∗ 暑くなるに連れ、黒いデイジーは増殖しにくくなる∗ 逆に寒くなるに連れ、⽩いデイジーは増殖しにくくなる*4 ref.https://ja.wikipedia.org/wiki/ガイア理論*5 ref.https://ja.wikipedia.org/wiki/デイジーワールド

13–7–

第 2 章 DaisyOS GB v0.32.3

⽣物的な振る舞いで⾃⼰制御している仕組み♣ 概要
前章で説明した「実⾏プログラムなどのバイナリ列を⽣物のように扱う」事をどのように表現しているかというと、まず、実⾏画⾯の枠線内の⽩と黒の花 (以降、それぞれを「⽩デイジー」・「黒デイジー」と呼ぶことにします) がそれぞれ⼩さい実⾏プログラムになっています。⽩デイジーは、⽩は光を反射する事から放熱の効果があるということで、地表温度を少し (0.1 ℃) 下げます。逆に黒デイジーは、黒は光を吸収する事から蓄熱の効果があるということで、地表温度を少し (0.1 ℃) 上げます。「地表温度」は内部的には単なる変数です。以上より、まとめると、⽩デイジーは地表温度という変数から 0.1 を減算するプログラムで、黒デイジーは逆に 0.1 を加算するプ*6ログラムです。

そして、「⽣物のように扱う」といっても想定するのは単細胞⽣物程度の振る舞いです。具体的には細胞分裂と突然変異です。単細胞⽣物は⾃⾝のコピーを作ることで増殖します (細胞分裂)。そして、時々、その際にどこかがバグります (突然変異)。今回の⽩と黒のデイジーとしては、⼤抵の場合、⽩デイジーは⽩デイジーを産み、黒デイジーは黒デイジーを産みますが、時々、⽩デイジーが黒デイジーを、黒デイジーが⽩デイジーを産む事もある、という訳です。
このようにして、⽩と黒のデイジーが勝⼿に増えていく訳ですが、他に「実⾏と評価」と「死」の仕組みがあります。「実⾏と評価」は、周期的に環境上の全ての実⾏プログラムを実⾏し、それぞれを評価関数で評価する仕組みです。この評価関数から得られる値を「適応度」と呼んでおり、適応度が⾼いほど増殖しやすくなるようにしています。今回の場合、⽩/黒のデイジーにより地表温度を 0.1 ℃下げた/上げた結果が⽣育適温 (20 ℃としています) より⾼ければ⽩デイジーの適応度を⾼くし、逆に低ければ黒デイジーの適応度を⾼くするように評価関数を設定しています。これにより、⽣育適温より暑い状況では放熱の効果がある⽩デイジーの⽅が増殖しやすく、逆に寒い場合は蓄熱の効果がある黒デイジーが増殖しやすくなります。
また、「死」の仕組みにより、環境上の全ての実⾏プログラムは無限に存在し続ける事はなく、いずれ消去されるようになっています。
以上の仕組みにより、地表温度を⽣育適温付近へ⾃⼰制御することが可能になります。
*6 実際は直接「地表温度」の変数へ 0.1 の加算/減算を⾏うのではなく、別の変数へ 1 ずつ加算/減算を⾏い、10 あるいは-10 に⾄ったら「地表温度」変数へ 1 を加算/減算する、という事を⾏っています。ただ、本質的には「地表温度」変数へ 0.1 を加算/減算している事と変わらないので、説明の簡単のため「地表温度変数への 0.1 の加算/減算」として説明します。

–8–

14

2.3 ⽣物的な振る舞いで⾃⼰制御している仕組み♣ 各デイジーの周期動作
前項の内容を含めた各デイジー (実⾏プログラム) の周期動作をまとめると図 2.6の通りです。

▲ 図 2.6: 実⾏プログラムの周期動作「代謝/運動」
・「成⻑」
・「増殖」
・「死」の振る舞いを実⾏プログラムが⾏うようにしています。
「代謝/運動」は具体的には「実⾏と評価」です。前項で説明した通り、⽩/黒のデイジーを実⾏し地表温度へ 0.1 ℃の減算/加算を⾏います。そしてその結果の地表温度に応じてそれぞれのデイジーへ適応度を設定します。
適応度は次の「成⻑」のフェーズで環境から「1 バイト」を取得できるか否かに関わります。この「1 バイト」は何かというと、実⾏プログラム⾃⾝の命令列のいずれかの 1 バイトです。GB 版 DaisyOS では、それぞれの実⾏プログラムが⾃⾝を構成する命令列をもう⼀つ揃えると「増殖可能」となります。即ち、適応度が⾼いほど「成⻑」のフェーズでどんどん「1 バイト」を取得できるため⾃⾝を構成する命令列を揃えやすく、増殖しやすいという訳です。
そして、増殖の際、ある確率で突然変異します。前項で説明した通り、突然変異は⽩デイジーが黒デイジーを産むかその逆のいずれかです。なお、突然変異確率は⼀定ではなく、適応度が低いほど突然変異しやすくなるようにしています。これは、環境の変化に対して⽣物が突然変異による進化の仕組みで適応していく様⼦を表現しているつもりのものです。元々環境に適応していればそれほど突然変異は起こらないと思われますが、「突然地球全体が極寒に覆われる」など、環境が変化し⽣きにくい状況になると、恐らく細胞分裂時のエラーも起きやすく、突然変異が起きやすくなるので

15–9–

第 2 章 DaisyOS GB v0.3

はないかという考えです。
最後に「寿命を迎えたか」を確認します。寿命はこの周期動作を何回繰り返せるかというサイクル数で設定されます。現状は適応度などに関わらず全て同じで 30 サイクルとしています。そして、寿命を迎えると「死」としてそのデイジー (実⾏プログラム) は消去されます。

GB 版 DaisyOS では以上の周期動作を実⾏プログラムに対して実施することで、実⾏プログラムを⽣物のように扱います。そして、それによりデイジーワールドによる地表温度の⾃⼰制御ができ、ひいては、実⾏プログラムを⽣物のように扱うことでこういった制御を⾏う事もできるという⼀つの例になっています。

♣ PDP-7 版との違い
PDP-7 版との設計の違いとして、実⾏プログラムが持つメタデータの違いがあります。PDP-7 版では設計の簡単化のために「エネルギー」という GB 版には存在しない項⽬がメタデータ内にあります。これはその名の通りでもありますが、「これが0 になると死ぬ」というものです。PDP-7 版ではこれを⽤いて、「成⻑」のフェーズでは適応度に⽐例したエネルギーを獲得できることとしています。そして、増殖のコストをエネルギーから払って増殖することとしました。*7「エネルギー」という項⽬によってどの様に簡単化したかと⾔うと、GB 版の実⾏プログラムにメタデータとして存在する「取得フラグ」・「寿命」・「余命」という項⽬が「エネルギー」という項⽬により不要になります。
まず、「取得フラグ」は、GB 版において「成⻑」のフェーズで取得済みのバイトを⽰すビットフィールドです。GB 版では「⾃⾝を構成する命令列をもう⼀つ揃えると増殖可能」であるためこの様なビットフィールドが必要になります。しかし、PDP-7版は「増殖のコスト以上のエネルギーがあれば増殖可能」であるため「取得フラグ」は不要になります。
また、「寿命」・「余命」はそれぞれ「実⾏プログラムが⽣まれてから死ぬまでのサイクル数」と「現在の残りサイクル数」です。項⽬を分けている理由は後述します。

PDP-7 版では「エネルギーが 0 になると死ぬ」としている事に加え、1 サイクル毎に「成⻑」で獲得するエネルギー量より多いエネルギー量を「定常的なエネルギー消費」として消費するようにすることで、実⾏プログラムが無限に⽣き続けることが無いようにしています。これにより「寿命」・「余命」という項⽬も不要になります。
主な違いとしては以上の通りです。ただ、これらはあくまでも簡単化のためのものであり、本質的な設計の違いはありません。

*7 増殖のコストは⽐較的⾼めにしています。

– 10 –

16

2.4 操作例：デイジーを間引く

2.4

操作例：デイジーを間引く

基本的に⾒ているだけのソフトですが、ユーザーが⾏える操作も少しあります。以降の節ではそれらを紹介します。
まず⾏える操作として、画⾯上のデイジーを間引く (消去) 事ができます。⼗字キーでマウスカーソルを動かして枠内のいずれかのデイジーに合わせて B ボタン (PC のブラウザ上の場合は Z キー) を押してみてください。すると、マウスカーソルで選択されたデイジーが間引かれて画⾯から消えます。
これにより、「意図的に⽩デイジーを減らして黒デイジーばかりにしてみる」(あるいはその逆) といった実験を⾏ってみることができます。試しに⽩デイジーをどんどん間引いて黒デイジーばかりにしてみると、黒デイジーの蓄熱が⽩デイジーの放熱に勝ることで地表温度を上昇させることができます (図 2.7)。

▲ 図 2.7: ⽩デイジーを間引いて地表温度上昇
ただし、だんだんと⾼温では黒デイジーが増殖しにくく、逆に⽩デイジーが増殖しやすくなることから、ユーザー操作で⽩デイジーを間引くより早く*8 ⽩デイジーが増殖していくようになり、急増した⽩デイジーにより地表温度がまた⽣育適温付近へ戻されます (図 2.8)。

*8 頑張れば⽩デイジーの増殖より早く間引いていくこともできるかもしれませんが。
。

17– 11 –第 2 章 DaisyOS GB v0.3

▲ 図 2.8: 反動による⽩デイジー増殖で⽣育適温付近へ戻される
ただ、これはピンと張った弦を引っ張って弾いたようなもので、急増した⽩デイジーによる温度低下は⽣育適温を超えた温度低下を招きます。今度は低温で⽩デイジーが増殖しにくく、黒デイジーが増殖しやすくなることで地表温度が上昇し、という形で何度か揺り戻しがありながらもだんだんと⽣育適温付近を保つようになっていきます。

2.5

操作例：地表温度に外乱を与えてみる

また実は、地表温度はユーザー操作で上げたり下げたりといった外乱を与えることができます。地表温度の操作は画⾯右上の「ちひようおんど」の欄の右側にある「▲」と「▼」のボタンで⾏えます (図 2.9)。「▼」ボタンにマウスカーソルを合わせて A
ボタン (PC 上の場合は X キー) で 1 ℃上げ、「▼」ボタンで 1 ℃下げます。ボタンのリリースのタイミングで処理を⾏っており、押しっぱなしには対応していません。*9▲ 図 2.9: 地表温度を操作する▲‧▼ボタン(ちょっと⼤変ですが、)「▼」を連打して-100 ℃くらいまで強制的に下げてみると、*9 なので、いっぱい温度を上昇/下降させたい場合は頑張って連打していただく必要があります。
。

– 12 –

182.6 操作例：各デイジーのメタデータ等を⾒てみる

前節とは逆に⽩デイジーが減り、そして黒デイジーが増えて地表温度を上げる⽅向へ⾃⼰制御が働く様⼦を確認できます (図 2.10)。

▲ 図 2.10: 地表温度を-100 ℃辺りまで下げ、黒デイジーばかりになっている様⼦

2.6

操作例：各デイジーのメタデータ等を⾒てみる♣ 開発版について
この節と次節の内容は 2024 年 3 ⽉時点では開発版で公開している内容です。開発
版は以下で公開しています。

• URL：https://yohgami.itch.io/daisyos-dev◦「daisyos dev」等で Google 検索するか、あるいは筆者のウェブサイトからもたどり着けます「Run game」を押して起動した直後の⾒た⽬に違いはありませんが、セレクトボタン (PC で実⾏中の場合、TAB キー) でデイジーを表⽰している枠外の表⽰を以下の順に切り替えることができます。

1. ソフト説明表⽰ (デフォルト)
2. 実⾏プログラムの情報表⽰
3. 評価関数設定表⽰
4. 1. へ戻る
なお、スタートボタン (PC で実⾏中の場合、Enter キー) で「ソフト説明表⽰」へ

19– 13 –第 2 章 DaisyOS GB v0.3

戻すことができます。

♣ 実⾏プログラムの情報表⽰について
ここでは、「実⾏プログラムの情報表⽰」を紹介します。画⾯表⽰をこの表⽰にした状態で、マウスカーソルをいずれかのデイジーに合わせ、B ボタン (PC で実⾏中の場合、Z キー) を押してみてください。すると、マウスカーソルで指定したデイジーの情報が表⽰されます (図 2.11)。

▲ 図 2.11: 実⾏プログラムの情報表⽰例
表⽰されているそれぞれの項⽬について説明します。まず「ふらぐ (フラグ)」は、その名の通り各種のフラグが設定されるビットフィールドです。ただ、現状は最下位ビットがこの実⾏プログラムの⽣死を⽰しているのみ (1 の場合、⽣きている) であり、表⽰されている実⾏プログラムは全て⽣きているので常に 1 です。
「ざひよう (座標)」は、この実⾏プログラムがデイジーとして存在している座標です。座標値は、画⾯左上を原点とした 8x8 ピクセルのタイル単位の値です。
「よめい/じゆみよう (余命/寿命)」もその名の通りですが、「余命」は現在から死までのサイクル数で、「寿命」は⽣まれてから死までのサイクル数です。前述の通り「寿命」は全ての実⾏プログラムで共通で 30 サイクルです。そのためこのデイジーワー
ルドの実装の場合、「寿命」をそれぞれの実⾏プログラムで持っている必要は無いのですが、過去の実装では突然変異の際に寿命も変化させていた事がありました。その際は親の寿命をベースとしており、突然変異しなかった場合も親の寿命を⼦の寿命としていたため、毎サイクルでデクリメントされる余命とは別に寿命をそれぞれの実⾏プログラムで保持しておく必要がありました。

– 14 –

202.7 操作例：評価関数を変えてみる「てきおうど (適応度)」は、前述の通り、評価関数で評価した結果の評価値です。
「ばいなり (バイナリ)」と「さいず (サイズ)」は、実⾏プログラムの命令列⾃体とそのバイト数です。サイズは⽩デイジー・黒デイジー共に 5 バイトで、たったそれだけのサイズですが、⽩デイジーでは「地表温度を下げる」、黒デイジーでは「地表温度を上げる」命令列になっています。それぞれの命令列について詳しくは章末のコラムをご覧ください。
「しゆとくふらぐ (取得フラグ)」は、⾃⾝の命令列の各バイトを取得したことを⽰すビットフィールドです。⽩/黒デイジー共に 5 バイトの命令列なので、0X1F(16 進数で下位 5 ビットが 1 になった状態) になると増殖可能となります。

2.7

操作例：評価関数を変えてみる♣ 評価関数を変えてみる
それでは次に「評価関数設定表⽰」について説明します。この表⽰に切り替えた状
態は図 2.12 の通りです。

▲ 図 2.12: 評価関数設定表⽰状態
ここでは評価関数を別のものへ変更してみることができます。画⾯下部の「ひようかかんすうせんたく (評価関数選択)」の枠内にあるものが選択できる評価関数です。
この表⽰ではマウスカーソルが消え、上下キーによりこの評価関数を切り替えることができます。デフォルトでは「でいじーわーるど (デイジーワールド)」が選択されていますが、下キーで「つねに 255(常に 255)」へ変更してみてください。

21– 15 –第 2 章 DaisyOS GB v0.3

♣ 各実⾏プログラムの適応度がどうなったか⾒てみる「つねに 255(常に 255)」は、その名の通り、常に適応度として最⼤の 255 を返す評価関数です。この関数へ変更したことで、各実⾏プログラムの適応度がどうなったか⾒てみましょう。再度、「実⾏プログラムの情報表⽰」へ切り替えてください。
そして、適当なデイジーを B ボタンで選択すると、どのデイジーも適応度が0XFF(255) になっていることが確認できます (図 2.13)。

▲ 図 2.13: 適応度が 0XFF(255) になっている♣ 地表温度変化の外乱を与えてみる
評価関数が「常に 255(最⼤) を返す」ものに変わったというのはどういう状況かというと、イメージとしては「⽩は放熱し、黒は蓄熱するというルールが無くなり、いずれのデイジーも温度によらず常に最適に⽣存している」という状況です。実⾏プロ
グラムの周期動作で⾔うと、「成⻑」のフェーズで必ず 1 バイトを取得できる事になり、⽩/黒いずれのデイジーも増殖しやすい状況になります。*10
それでは、「2.5 操作例：地表温度に外乱を与えてみる」で試したように画⾯右上の「▼」にマウスカーソルを合わせて A ボタン (PC の場合 X キー) を連打し、地表温度を-100 ℃程まで下げてみてください。すると今度は以前のように黒デイジーばかり*11になるような事も無く、地表温度の⾃⼰制御も働きません (図 2.14)。
*10 ただし、メモリサイズと実装の都合上、存在できる実⾏プログラムの数は 50 個が上限です。そのため、枠内の全てのマスがデイジーで埋まることはありません。
*11 ただし、たまたま黒デイジーが多い状況だったりすると、地表温度が上がっていくことはあるかと思います。

– 16 –

22

2.7 操作例：評価関数を変えてみる▲ 図 2.14: 今度は地表温度を-100 ℃付近まで下げても黒デイジーばかりになったりしない
この様に、評価関数を切り替えることで、個々の実⾏プログラムにより全体としてどのような振る舞いをさせるのかを変えることができます。

【コラム】⽩/黒デイジーの命令列について⽩/黒デイジーの命令列を解説します。まず⽩デイジーの命令列はアセンブリ表記を併記すると表 2.1 の通りです。
▼ 表 2.1: ⽩デイジーの命令列
CPU 命令0x21 34 c0

アセンブリ表記0x35

DEC (HL)

0x00

NOP

LD HL, 0xc034

3 つの CPU 命令です。まず 1 つ⽬の LD という命令では HL という 16 ビットのレジスタ*12 へ 0xc034 という値を設定しています。なお、「レジスタ」とはメモリ (RAM) よりも⾼速ですが⼩容量な記憶領域です。CPU 命令のレベルでは主にレジスタを対象に演算を⾏います。(必要に応じてメモリへもアクセスします。)

2 つ⽬の DEC 命令では、レジスタ HL に設定されている 16 ビットの値をアドレスとし、そのアドレスが指す先の値をデクリメントしています。なお、レジ23– 17 –第 2 章 DaisyOS GB v0.3

スタ HL に設定していた「0xc034」は地表温度の変数を 1 ずつ増減させる前段の変数のアドレスです。(前述もしましたが、) この変数をインクリメント/デクリメントしていき、10 あるいは-10 に達したら地表温度の変数を 1 ずつ増加/減少させています。これにより、デイジー 1 つあたりの影響が 0.1 ℃となるようにしています。

3 つ⽬の NOP 命令は「何もしない」命令です。実装上、各実⾏プログラムの命令列は 5 バイトだと都合が良いため、この「何もしない」命令を置いています。
そして、黒デイジーの命令列は表 2.2 の通りです。
▼ 表 2.2: 黒デイジーの命令列
CPU 命令0x21 34 c0

アセンブリ表記0x34

INC (HL)

0x00

NOP

LD HL, 0xc034

2 つ⽬が INC という命令になっている他は⽩デイジーの命令列と同じです。
INC 命令では、レジスタ HL に設定されているアドレス先の値をインクリメントしています。これにより、黒デイジーでは地表温度を 0.1 ℃上昇させます。

*12 正確には H という 8 ビットのレジスタと L という 8 ビットのレジスタの 2 つなのですが、これらを合わせて 1 つの 16 ビットのレジスタとして使うことができるようになっています。

– 18 –24おわりにここまで読んでいただきありがとうございます！ 本書では近年のへにゃぺんての⾃作 OS についての考え⽅を紹介し、最近の製作物である GB 版 DaisyOS の現時点のバージョンでできることを紹介しました。まだできることは少ないですが、「実⾏プログラム等のバイナリを⽣物として扱う」事で何かを⾃⼰制御するような事が可能であることを⽰すことはできたかと思います。興味深いと考えているポイントは「何らかの制御を⾏っているプログラムが直接的に存在するわけではない」という所です。実⾏プログラムをちゃんと⽣物として扱う事で結果的に⾃⼰制御がなされていきます。今回で⾔うと、「変数から 0.1 を減算するプログラム」と「変数へ 0.1 を加算するプログラム」を、⽩と黒のデイジーとして、「⽩は放熱」し「黒は蓄熱」するという所も含めてちゃんと⽣物として扱うと、結果として地表温度が⽣育適温付近へ⾃⼰制御されていくようになります。

DaisyOS は何ができる OS なのかという事を明確に⾔葉で表現することは、まだ考え中な所もあり難しいですが、デイジーワールドで確認したように、⽣物として扱うことで結果的に起こる「何か」が「DaisyOS でできる事」なのだと考えています。
基本的には、環境上に存在するバイナリを環境設定 (評価関数) に応じて進化させていく、というものなので、「とある変数の制御」以外にもできることは⾊々あるだろうと考えています。
ただし、現状の GB 版 DaisyOS ではユーザーができる操作としては、外乱を与えたり、評価関数を変更できたりするくらいなので、もっとユーザーのできることを増やしていきたいと考えています。例えば、現状では評価関数として 2 つの関数しか選べませんが、もっと⼯夫した関数を⽤意すれば、例えば「⽩/黒のデイジーで枠内に何かを描く」といった事もできるのではないかと考えています。あるいはそもそもユーザーが評価関数を DaisyOS 上で⾃由に作れるようになればもっとできることが増えると思います。
他にも突然変異の際、現状では「0.1 を減算するプログラム」か「0.1 を加算するプログラム」にしか突然変異しませんが、「命令列上の任意の命令が別の命令に変わる」、あるいは「任意の命令が追加/削除される」、といった突然変異ができるようになれば、評価関数を満たすような任意のプログラムを進化の仕組みで⽣成することも可能です。*13

DaisyOS は、筆者⾃⾝もまだ気づいていない未知の可能性を秘めた OS だと考え
*13 実は過去にその様にして ELF 形式の実⾏バイナリを⽣成するツールを作成し実験していたことがありました。詳しくは既刊『バイナリ⽣成環境「daisy-tools」実験報告』をご覧ください。

25– 19 –おわりにています。それを⾃分でも実際に⾒てみたく、そして皆さんにお⾒せできるように、まず直近では GB 版でのユーザーの⾃由度を上げ、この OS 上で表現できることの幅を広げていきたいと考えています。
この様な特殊な (変な) 活動ではありますが、へにゃぺんてを引き続き⾯⽩がっていただけると幸いです。

– 20 –

26

27

へにゃぺんて活動報告 2024 年春号
2024 年 5 ⽉ 12 ⽇著

ver 1.0 （第⼗回 技術書同⼈誌博覧会 新刊）

者

⼤神祐真

発⾏者

⼤神祐真

連絡先

yuma@ohgami.jp
http://yuma.ohgami.jp@yohgami (https://twitter.com/yohgami)
印刷所

⽇光企画

© 2024 へにゃぺんて(powered by Re:VIEW Starter)

28