なぜ私はES-VMを作るのか?

  • (by K, 2020.07.16)

(0)

  • 私はここ20年くらい、Windows用のプログラムばかり書いています。なぜ私はLinuxやmacOSに見向きもしないのでしょう。そしてそんな私が今ES-VMを作っているのはなぜでしょう。そんなことを考えてみました。

  • (註)ES-VMでできること
    • [1]言語処理系がES-VMバイトコードを出力する
      • この「出力」はファイルに出力してもいいが、メモリに出力しておくだけでも良い
    • [2]ES-VM処理系は、バイトコードをJITコンパイルして機械語にしてすぐに実行することができる(JavaやC#と似た挙動)
      • もしくは様々なOS用の実行ファイルを生成することができる(コンパイラに似た挙動)
    • ES-VMは言語処理系のバックエンド処理ルーチンとして、Kが作る言語に埋め込まれて使われます。

(1-1)

  • 私は基本的に自分のためにプログラムを書いています。誰かに使ってもらうためではありません。だからOSのシェアを意識してプログラムを書いているわけではなく、私にとって現在どのOSが流行っているかはどうでもいいことです。
  • Windowsは、過去のバージョンとの互換性をとても大切にしてくれているOSだと思います。2000年ごろに書いたwin32のアプリケーションは今でも再コンパイルすることなく動かすことができます。
  • これと比べてLinuxはどうでしょう。今でも32bitをサポートしているディストリビューションはあるけど、でもメジャーなところはみんな32bitのサポートを切ってしまっています。
  • じゃあmacOSはどうでしょう。Catalina以降はアプリの32bitサポートをやめています。しかも数年後にはARM64に移行するという話もあると聞きました。
  • そう、Windows以外は過去バージョンとの互換性なんて、その程度にしか考えていないということなのです。そして私は早くからその違いをかぎ分けていて、迷わずにWindowsだけを使い続けてきたのです。
  • そんなに32bitのプログラムを使い続けたいのなら、古いOSを使い続ければいいじゃないかというかもしれません。基本的にはそれはその通りです。しかしハードウェアはいつか壊れてしまうのです。そうしたら買い替えることになります。そして古いOSは新しいハードウェアのデバイスドライバがありません。だから古いOSを使い続けることは容易ではないのです。
  • OSが32bitのサポートを切ってしまったら、自作アプリをソースから再コンパイルすればいいじゃないかというでしょう。それでうまくいく場合もありますが、コンパイラの仕様がかわったせいで無修正ではコンパイルが通らないことがありますし、バイナリはあるんだけどソースはなくしてしまったという場合もあります(他人が作ったライブラリを使っていた場合とかもこれに該当)。買ってきた古いゲームもこれに該当するでしょう。
  • 私はこういうことで悩まされるのが嫌いなのです。だから互換性を大切にしてくれるOSが好きなんです。

(1-2)

  • しかし私はWindowsのアプリを作っていて全く不安を感じないわけではありません。なぜなら、Windowsは64bit化したときに16bitアプリのサポートを切ってしまったからです。だからWindowsといえども、やむを得ない時は過去のアプリケーションとの互換性を切りうるわけです。まあでもそれは仕方ないことなのかもしれません。
  • ということで、どんな互換性もいつかは切られるかもしれないと仮定しましょう。そうすると、win32だっていつ切られるかわかりません。そうなったら、私は自作ソフトウェアを何とかして救済したいです。つまりWindowsエミュレータ的なものを用意しなければいけないのです。きっと誰かが作ってくれるさと他人任せにして期待することもできますが、私はいざとなったら自分で作らなければいけないだろうと覚悟しています。そして、もしそうなったら、それは結構しんどいだろうなあと今から気が滅入ります。

(1-3)

  • そうであるならば、特定のOSに依存するのはやめて、たとえばJavaとかC#にするのはどうでしょうか。これならOSが変わってもJREや.NETフレームワークが吸収してくれそうです。・・・しかしこれらも同じ不安があります。もしJavaが何らかの理由で打ち切られてしまったら?もしC#が何らかの理由で打ち切られてしまったら?・・・そしたら私が代替の実行環境を開発しなければいけないのですが、果たして私にそれができるでしょうか。
  • JavaScpriptではどうでしょうか。ブラウザさえあればJavaScriptは実行できます。・・・しかし、私はやっぱり心配です。あのFlashでさえ見捨てられました。JavaScriptではそれが起きないとどうして確信できるでしょうか。・・・そしてもし見捨てられたら、私はJavaScriptの代替品を作る自信はありません。システムが巨大すぎます。

(1-4)

  • そう考えると、やっぱり私はES-VMを自分で作るしかないのです(ES-VMはJavaみたいなバイトコードをいろんな環境で動くようにするための仕組みです。現在開発中)。ES-VMは(私が作る以上は)ほぼ間違いなく小規模な実装になります。それならいろんな環境に私だけの力でも対応できるはずです。これで私は本当に安心してプログラムをかけるようになるのです。

(2-1)

  • 私は20年ほど前に、「OSは互換性に縛られているせいで進化が遅くなっている、けしからん」みたいな意見を書いていました。「だからこそ互換性はエミュレータ技術で解決して、OSは互換性に縛られずに自由に改良されるべきだ」とも言いました。この私の意見と、上記の話は、整合性が取れていないと思うかもしれません。つまり川合はOSに互換性を求めているのかいないのか、と。
  • 私は上記の通り互換性が欲しいのです。それは非常に重要なんです。・・・それはOSで達成されてもいいですし、他の方法で達成されてもいいのです。・・・まあ私の持説を考慮すれば、OSの進化のためにはOS以外の方法で達成されるべきでしょう。
  • 互換性を別の方法で解決できるようになれば、私はOSを自由に選べるようになります。それは想像しただけワクワクすることです。今までずっと縛られてきたので、夢のようです。私はどのOSへ引っ越しても、何年先でも何十年先でも、自作ソフトウェアを全部連れていくことができるはずなのです。OSやCPUの進化をいつも心から喜べるようになるのです。

(2-2)

  • 私はつい先日までJavaやC#を競争相手だと思ってきましたが、ES-VMバイトコードからJavaバイトコードや.NETバイトコードを生成できるようになれば、これらの実行環境にタダ乗りできるなと思いつきました。バカ正直に競争するしかないわけではないということです。先駆者がいるのなら、それを利用することもできるわけです。

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-07-17 (金) 13:02:26 (132d)