Posts

Showing posts from 2018

NetBSD 8.0のnpf(7)の設定例

NetBSD/amd64 8.0でnpf(7)を使っている。npfは、NetBSD packet filterのことである。 あまり設定例が公開されていないようなので、備忘のために書いておく。 xennet0インターフェイスで、TCPの80番・443番・25番・22番・8080番・53番ポートとUDPで53番ポートを通過させ、ログをnpfd(8)で取得する設定である。 #set bpf.jit off $ext_if = { ifaddrs(xennet0) } $services_tcp = { http, https, smtp, ssh, 8080, domain } procedure "log" { log: npflog0 } group default { pass in final family inet6 proto ipv6-icmp all pass in final family inet4 proto icmp all pass stateful out final all pass stateful in final proto tcp to $ext_if port $services_tcp apply "log" pass stateful in final proto udp to $ext_if port domain apply "log" pass final on lo0 all block all apply "log" }

FreeBSDのconsoleのkeymapの変更

FreeBSD/amd64 11.2-RC3を使っているのだが、NetBSDで/etc/wscons.confにencoding us.swapctrlcapsと指定するのと同じ設定が必要だった。 このNetBSDの設定では、CAPS lockキーと左Ctrlキーを入れ替えるのだが、以下のFreeBSDの設定では、CAPS lockが左Ctrlキーになる。 私としては、その方が望ましい。 # vi /etc/rc.conf keymap="us.ctrl" us.ctrlの部分は、/usr/share/vt/keymapsにあるファイル名から.kbdを取ったものを指定する。

AndroidのGmailアプリのExchange and Office 360アカウントのMobile device ID

AndroidのGmailアプリでは、Exchange and Office 365アカウントを追加することはできる。この際に、Mobile device IDというのが表示される。 これは、電子メールアドレスを入力してNextボタンを押下すると表示されるのだが、これは、1つ前の画面で入力した電子メールアドレスに無関係であった。 つまり、違う電子メールアドレスを入力しても、同じMobile device IDが表示される。

東京大学のOCWについて

東京大学のOCWには以下の問題があるようである。 1つ目は、Adobe Flashでビデオ配信されていることである。これ自体は、現状では問題ないのだが、今のメンテナンス状態を考えると、Adobe Flash Playerが提供されなくなった後に、HTML5等で更新されることもなさそうに思えるので、残念なことになってしまうかもしれない。 2つ目は、iiionline.iii.u-tokyo.ac.jpというウェブサイトへのリンクになっているビデオがあるということである。このウェブサイトが今はもう動いていないようである。ocw.u-tokyo.ac.jpにちゃんとまとめておかなかったのは失敗だろう。おもしろそうな講義もあったので残念である。

OCW「ビッグデータ時代の人工知能学と情報社会のあり方」(東京大学)

ビッグデータ時代の人工知能学と情報社会のあり方は、コースの半分近くのビデオは非公開になってしまっている。公開されているビデオは、人工知能に関する概論的な講義である。 私は、人工知能について学んで来なかったのだが、深層学習が人工知能の研究においてどのような意味を持つかを解説した第9回第10回は特におもしろかった。

OCW「情報工学概論A」(東京大学)

東京大学の「情報工学概論A」は、インターネットを実現する技術についての講義であった。 インターネットの運営に関することから、イーサネット等からHTTP等までのネットワークの技術、暗号化技術について、解説している。 内容は、基礎的なものであるので、2018年の今でも視聴する価値はあると感じた。しかし、実例として触れられているものは、古くなってしまっている。

OCW「データベース」(上智大学)

大学の公開している日本語の講義はいろいろあるのだが、内容が一部だけではなく役に立つものと言うと、あまりないように思える。 また、そのような講義がまとめられている物も見つけられない。 上智大学理工学部「データベース」は、 データベースとSQLについて全く知らなかった時期に、SQL ゼロからはじめるデータベース操作を 読むのと同時に視聴して大変役に立った。

スウェーデンとElsevier

Sweden ends contract with science publisher Elsevier, moving for open access for scientific articlesによると、 2018年6月30日から、スウェーデンの研究者は、Elsevierの学術雑誌に投稿したり、論文を閲覧したりできなくなるらしい。 商業的な学術雑誌ももう少しリーズナブルな価格になって欲しい。 オープンアクセスであれば、確かに私は助かるが、継続性があるのか良く分からないので。

Windowsマシンのuptimeを知る方法

どうやら、uptime(1)コマンドにそっくりなものは、Windowsの標準機能にははないようだ。 その代わり、以下のようにすると、起動時刻を知ることができる。 > net statistics server \\client1 のサーバー統計情報 統計情報の開始日時 2018/05/15 6:43:10 受け付けたセッション 1 タイムアウトしたセッション 0 エラーが発生したセッション 0 送信バイト数 (KB) 0 受信バイト数 (KB) 0 平均応答時間 (ミリ秒) 0 システム エラー 0 アクセス許可違反 0 パスワード違反 0 アクセスしたファイル 0 アクセスした COM デバイス 0 スプールした印刷ジョブ 0 バッファーのオーバーフロー回数 ビッグ バッファー 0 リクエスト バッファー 0 コマンドは正常に終了しました。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#7

セマフォ

前節の排他制御の方式は、現実のシステムには適用しにくい。また適用するにしてもビジーウェイティングを使っているので、ごく短いクリティカルセクションへの利用に限定されるべきである。

より一般的な排他制御として、セマフォを導入する。

セマフォはプロセス間通信の伝達に使われる整数型の変数である。

セマフォは、0と1以外の値も取ることができ、より多くの情報を伝達できる。

セマフォは一般に、イベント変数と呼ばれるプロセス間の共通変数の一種である。

セマフォの変数へのアクセスも排他制御が必要である。

プロセス間で伝達されるイベントには以下が含まれる。
(1) プロセスがクリティカルセクションに入った。
(2) プロセスがクリティカルセクションから出た。
(3) 新しいプロセスが始まった。
(4) 入出力操作が始まった。
(5) 入出力操作が完了した。
(6) メッセージを受け取った。
(7) リソースを受け取った。
(8) リソースを開放した。

イベント変数は、
(1) イベントの履歴を記録するデータ構造(整数型の変数)。
(2) イベント変数の待ち条件が満たされるのを待っているプロセスの待ち行列。
からなる。

セマフォにはP命令(wait命令)とV命令(signal命令)が定義される。

P命令は、引数SについてS≧1が満たされるまでプロセスを一時停止させるのが役割である。もし、S≧が満たされていればSを1減らしてプロセスは継続する。

V命令は、引数Sのセマフォの待ち行列で待っているプロセスの中から1つが選ばれ、実行可能状態に移行させる。ディスパッチャーは実行可能プロセスから1つを選び実行する。もし、Sのセマフォの待ち行列が空であった場合には、Sは1増加させられVを実行したプロセスは続行される。

P命令とV命令は、セマフォを提唱したダイクストラの母語であるオランダ後のPasseren(パスを許す)とVerhoog(起こす)に由来する。

P命令とV命令はそれぞれ分割不可能でなくてはならない。つまり、ひとときにはある1つのセマフォに対して、1つのPまたはVしか実行できない。

P、V、ディスパッチャーは、いずれも共通データである待ち行列を操作するので、排他制御を必要とする。

pkgsrc/www/firefoxがNetBSDではすぐにクラッシュする件について

multiprocess windowの有効なpkgsrc/www/firefoxがすぐにクラッシュのは、 そださんの報告されている PR 53273 が原因とのこと。 Chromiumも同じような問題があったように思うので、どうにかして直して欲しい。 browser.tabs.remote.autostartを無効化しておけば(falseにしておけば)、multiprocess windowは無効にできる。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#6

並列プロセス

プロセスがCPUディスパッチャーにより同時実行されると、互いに作用し干渉し合う。例えば主記憶やI/Oを取り合うかもしれないし、同一のファイルに同時に書き込もうとするかもしれない。

相互作用や干渉は、意図的/偶発的、協調的/競合的に起こり得る。

プロセス間の相互干渉は、正しい制御化におかないと好ましくない状況を招く。

プロセス間の相互干渉は、
* プロセス間通信
* プロセス同期
* プロセス統合
などとして研究されている。

プロセス間の相互交渉は3種に分類できる。
(1) 協調
    複数のプロセスが相互に情報交換を行いながら、共通の目的のために処理を進める。
(2) 競合
    リソースを取り合うといったように互いに他のプロセスの存在を意識しなくてはいけないが、自分の処理のためには他のプロセスは不要な場合。
(3) 干渉
    相手のプロセスの中断など、はっきりと他のプロセスに影響を与える場合。

例えば、整合性を保ってクリティカルセクションまたはクリティカルリージョンは、分割不可能にする必要がある。

クリティカルセクションは混合して実行されることがないようにする。これにより、共通変数の読み書きは1つのプロセスしか実行できないようになる。

共通変数へのアクセスを同時に1つのプロセスに限ることを排他制御または相互排除と言う。

2つのプロセスがメッセージをやりとりする機構を、メッセージ転送またはメッセージ交換と言う。

タイムシェアリングシステムでもマルチプログラミングシステムでも、他のプロセスを一時停止させる必要が生じることがある。例えばメモリーコンパクション(主記憶内の小さな空き領域を大きな空き領域にするために、主記憶内でプログラムを動かすこと)や、スワップアウトする場合である。

排他制御はプロセスの競合を正しく行うのに必要であり、次の3つの要求を満たさなくてはならない。
(1) クリティカルセクションを実行しているプロセスが1つもない時、クリティカルセクションに入る要求をしたプロセスは、ただちに許可を与えられなければならない。
(2) 2つ以上のプロセスがクリティカルセクションに入ろうと争っているR時、その選択は無期限に延期されてはならない(デッドロック防止)。
(3) いかなるプロセスも、あるプロセスがそのクリティカルセクションに入るのを無期…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#5

CPUスケジューリングとオペレーティングシステム

CPUスケジューリングは、ハードウェアに一番近いレベルの仮想化である。

CPUスケジューリングより上のレベルでは、CPUを獲得したり開放したりといったことを考慮する必要はなく、各プロセスが仮想CPUを独占しているように振る舞うと考えて良い。

CPUスケジューリングはショートタームスケジューリングとも呼ばれる。

コンピューターシステムは、循環型待ち行列システムとみなせる。

ロングタームスケジューリングは、ジョブの起動やスワッピングを行い、どのジョブが主記憶に入るのを許されるか、つまり、循環型待ち行列システムでショートタームスケジューリングによりCPUを割り当てられるようになるかを決める。

ミディアムタームスケジューリングは、ページングのレベルのもので、ページフォルトを生じたジョブは、循環型待ち行列システムのI/O待ち行列に入れられる。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#4

スケジューリング方式

基本的なスケジューリング方式
(1) 到着順(FCFS))
(2) 処理時間順(SPT)、残っている処理時間の短い順(SRPT)
(3) 優先度順
(4) アラウンドロビン
(5) フィードバック待ち行列(フォアグラウンド・バックグラウンド待ち行列)(FB)

プロセスとジョブを基本的に同一視する。

性能評価基準
(1) 応答時間
    タイムシェアリングシステムや対話型システムではレスポンスタイムと言い、バッチシステムではターンアラウンドタイムと呼ぶ。
(2) スループット
    単位時間に処理するジョブの数で、CPUなどのデバイスの利用効率に比例する。


ラウンドロビン方式では、かかる時間の短いジョブが優先されることとなる。

SRPT方式はSPT方式の変形である。

SPT・SRPT方式は、平均応答時間を最小にする。

スケジューリング方式によって、応答時間は大きな影響を受ける。

一般に、応答時間を短くするという要求と、利用効率を改善するという要求は相反する。

自分でスケジューリングをやってみた。
同一のスケジューリング方式の下では、応答時間と利用効率は、ほぼ反比例の関係にある(単一サーバーシステムでも、マルチサーバーシステムでも)

単一サーバーシステムとは、CPUやI/Oなどの能動的な入出力機器が1個のシステムを言う。

マルチサーバーシステムとは、複数個のサーバーを持つシステムを言う。

マルチサーバーシステムでは、サーバー間で干渉が起こる(1つのサーバーにジョブが集中してしまい、他のサーバーが遊んでしまう)ことにより、無駄な待ち時間が生じてしまう。この待ち時間をスケジューリング方式によって減少させられれば、応答時間の減少と利用効率の向上を同時に実現できる。

マルチプログラミングの主要な目的は、リソース利用の向上またはジョブのスループットの増加である。

一般に、マルチプログラミングは利用効率(ジョブのスループットと比例する)を最大にすることを目的とする。

一般にタイムシェアリングシステムは応答時間を最小にすることを目的としている。

利用効率と応答時間以外の性能評価基準
(1) 予測性
    平均としては短いがばらつきの大きな応答時間より、安定した応答時間が好まれることもある。
(2) 公平性
    あるジョブが無期限に塩基されるのは不公平で…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#3

CPUスケジューリング

プロセスは、
(1) 実行中
(2) 実行可能
(3) 待ち状態
のいずれかの状態になっている。

CPUスケジューラー = ディスパッチャーである。

あるプロセスに割り当てられた時間をクオンタムと言い、クオンタムが終了すると、実行中から実行可能状態に移行させられる。

クオンタムは、タイムクオンタム、タイムスライス、量子時間とも言う。

待ち状態は、ある条件(I/Oや他のリソースが空くのを待つなど)が成立していないといけない時にとる状態を指す。

実行可能状態から待ち状態への移行は、プロセス自身によってなされる。

待ち状態から実行可能状態へは、他のプロセスからのSIGNAL命令によって移行させられる。

SIGNAL命令とは、他のプロセスを起動させる(実行可能状態にする)命令である。

プロセスは3つの状態それぞれのキューに入っている。

プロセッサーの数に依らず、この考えは適用できる。

CPUをあるプロセスから別のプロセスに切り替える方式は2つある。
(1) イベントドリブン
(2) タイムスライシング

イベントドリブンとは、システムの状態が変化したのを、割り込み機構により切り替える方式である。

割り込みで割り込まれたプロセスは、割り込まれたことを感知しない。

タイムスライシングは、時分割とも言う。

タイムスライシングでは、システムの状態変化とは無関係にプロセスを切り替える。

タイムシェアリングシステムの実現には、タイムスライシングが必要である。

タイムスライシングでは、インターバルタイマーにより、ウオンタムが終わったら割り込みを発生させる。

マルチプログラミングシステムの性能を向上させるためには、イベントドリブンにタイムスライシングを組み合わせることが効果的である。

マルチプログラミングは、イベントドリブンのみで実現できる。

マルチプログラミングにタイムスライシングを導入すると、性能が向上する。

タイムシェアリングシステムにイベントドリブンを導入すると、リソース利用効率を向上できる。

各プロセスは見た目上はCPUを独占しているようであり、このようなCPUを仮想CPUと呼ぶ。

仮想CPUは、実際のCPUよりも実行速度は遅いが、独自のレジスターを持ち全ての命令を実行できるCPUととらえて良い。

システムコールは、I/Oを要求する等のために呼ばれるもので、スーパーバイザーコール(SVC)によって行われる。

スーパー…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#2

第1章 オペレーティングシステムとは コンピューターの分類をしている箇所があり、その中の一つとして「実時間処理用コンピューター」と言うのが挙げられている。 今の状況で考えると組み込み用のコンピューターのことを指していておかしくないのだが、なんとなく、ここでは違うものを指している ような気がする。しかしプロセス制御用コンピューター(process computer)と言うのも別に挙げられているため、 これとは違うと考えると、やはり組み込み用途のものを指していると考えるべきかもしれない。 バッチ処理、オンライン処理(リアルタイム処理とも言うと書かれている)、タイムシェアリング処理、分散処理というように、 ジョブの処理形態を分類してる箇所がある。 そこで、オンライン処理では「保安性」に細心の注意を払う必要があると書かれている。 保安性という用語は、少なくとも現在では一般的な用語ではないように思われる。 システムの運営に、信頼性と並んで必要なものとして挙げられているため、可用性を指しているのかもしれない。 「プロセス」の定義を「ユーザーの代理」として、これが現代のオペレーティングシステムを考える上では最も適切であるとしている。 「実行中のプログラム」と言う定義は、歴史の初期のものとされている。 プロセスを「ユーザーの代理」とする定義が現在主流であるような気がしないのだが、この書籍ではこのような定義であることをきちんと覚えておきたい。 ちなみに「オペレーティングシステムの基礎」大久保 英嗣 著(1997年刊)という書籍が手元にあるが、プロセスは「特定の仕事を遂行するために一連の操作系列を実行する活動のこと」としている。 オペレーティングシステムの定義として「ハードウェア資源であるCPU、主記憶、二次記憶、入出力機器をユーザーが必要とするだけ仮想的に作り出し、 しかも場合によってはそれをハードウェアそのものよりも使いやすい形で提供する」ものとしている。 そして、これを「仮想化」と呼びこととしている。この書籍はこの仮想化について述べているとしている。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#1

最初にコンピューターを使ったのはFujitsu Micro 8 (FM-8)だった気がする。 F-BASICしか使わなかった。 次にはエプソンQC-10IIというCP/Mか何かが動くマシンを使った記憶もある。 私が最初にOSとして独立したものを使ったのは、このCP/M風のものだったのだろう。
あれから30年以上、コンピューターとオペレーティングシステムを使っている訳だが、 コンピューターについても、オペレーティングシステムについても、 良く理解しているとは言えないように感じている。 コンピューターサイエンスについてもちゃんと体系的に学ぶ機会はなかった。 だが、オペレーティングシステムについて、学びたいとは長く思っていた。
今、手元に「岩波講座 ソフトウエア科学6『オペレーティングシステム』前川 守 著」と言う 35mmほどの厚さの書籍がある。 これの全てを理解することを目標に、読んでいきたい。

「まえがき」について 一般のユーザーの言うオペレーティングシステムは、以下ようなものが含まれているらしい。
ユーザーインターフェイスウィンドウシステムネットワーク機能リアルタイムシステム機能エディター文書処理機能コンパイラー
ここで、分からないのは「リアルタイムシステム機能」である。 「エディター」と「文書処理機能」は、UNIXを意識したものであろう。 UNIXにはedやviといったエディターがあるし、 文書処理ソフトウエアであるroffはUNIX V7にも含まれていたはずである。
リアルタイムと言うと、最近の文脈で言えば、リアルタイムオペレーティングシステムというのがある。FreeRTOSやRTEMS、eCosなどである。 思い出すと、UNIXにもUNIX-RTやUNIX-RTRというのがあったので、それを意識してのことかもしれない。
だが、少なくとも現在では、RT-LinuxやINTimeなどはあるものの、汎用オペレーティングシステムにリアルタイムオペレーティングシステムの機能は含まれないと言って良いように思う。INTimeは使われている製品を使ったことはあるが、Windowsとどう統合されているか分かっていないので、的外れかもしれないが。
一方で、NetBSDでもlibrt (POSIX Real-time Library)というのはあって、 s…

modular X.orgなNetBSDマシンからssh -Yで接続して、X11 forwardingする場合

NetBSDのxsrcのfontconfigが新しくならないので、最近は、X11_TYPE=modularでpkgsrcを使っている。つまり、pkgsrcからX.orgをインストールしている。 そうやって生活していく中で、自分のNetBSDマシンのX serverにリモートマシンのXアプリケーションのウィンドウを表示させようとした場合に、 これまでやったことのない設定が必要だったので書いておく。 そもそもOpenSSHというのはいやに奥が深くて、全く分かったような気にならない。 よくあるX11フォワーディングの際の設定というのは、リモートマシンがmodular X.orgの/etc/ssh/sshd_configに以下のように記述することである。 X11Forwarding yes XAuthLocation /usr/pkg/bin/xauth 今回問題になったのは、X server側、つまり手元のマシンの設定である。リモートマシンをmodular X.orgにしたことは何度もあったのだが、手元のマシンをmodular X.orgにしたのは 経験がなかった。 このような場合には、手元のマシンの/etc/ssh/ssh_configファイルに以下のような設定が必要になる。 XAuthLocation /usr/pkg/bin/xauth こうしないと、ssh -Yvvv remotehostnameを実行した場合に、以下のような表示になってしまう。 debug1: No xauth program. Warning: No xauth data; using fake authentication data for X11 forwarding. debug1: Requesting X11 forwarding with authentication spoofing. そして、 $ echo $DISPLAY localhost:11.0 のように表示されているのに、 $ xhost Invalid MIT-MAGIC-COOKIE-1 keyxhost: unable to open display "localhost:11.0" のように表示されてしまう。

CLIP STUDIO PAINT EXのフィルタープラグインとVisual Studio Community 2017

はじめに http://www.clip-studio.com/clip_site/download/clipstudiopaint/cspsdk にCLIP STUDIO PAINT EXのフィルタープラグインSDKと言うのがあって、 CLIP STUDIO PAINT EXにC++で独自のフィルターを書けるようになっている。 まあ、CLIP STUDIO PAINT EXとのインターフェイスの部分だけC++であれば、 別に全てをC++で書く必要はないだろう。 Visual Studio Community 2017でビルドしてみる 文書によると、フィルタープラグインはVisual Studio Expressではビルドできないそうである。 これは、実際に附属のサンプルをビルドしてみれば理由は簡単に分かった。 MFCが必要なのである。 なので、Visual Studio Community 2017ではMFCをインストールしておけば 問題なくビルドできる。 ライセンスの考察SDKのライセンス上、自作のフィルタープラグインをオープンソースな ソースコードを再利用できるか、オープンソースで開発できるか考えてみる。 copyleftなライセンスだと、SDK付属のヘッダーファイルとは混ぜられないし、SDKの再発明は禁止されているので、copyleftなライセンスのコードは採用できないだろう。 copyleftなライセンスの場合には、フィルタープラグインの配布はセルシス社のプラットフォーム上に限定されているので、 そもそもソースコードの配布ができるのかを確認しておかないといけないと言う課題もある。 現実的に考えて、copyleftなライセンスなソースコードを再利用するのは無理であろう。 BSDライセンスやMITライセンス等であれば、外部のソースコードを再利用することも可能だろう。 ソースコードを公開するとしたら、SDK由来のコード(ヘッダーファイル等)は含めることができないのは間違いない。 その上で、セルシス社のプラットフォーム上でソースコードを公開できるのかどうかに、ソースコードを公開できるかは依存していると考えられる。 現実的ではないような気もする。

Git for Windowsでgit statusの表示中のパスの日本語文字列が文字化けする場合の対処方法

Git for Windowsは、Git bashのみで使っている。 基本的にはGit bashの内部で困ることはないのだが、 唯一パスに日本語の文字列が含まれている場合に文字化けしてしまって 判別できないのが不満だった。 ~/.gitconfigに、以下のように追加すれば文字化けはなくなった。 $ vi ~/.gitconfig [core] quotepath = false

電話サービスの通話料の比較

NTT加入電話への通話料SMARTalk8円/30秒みおふぉんダイアル10円/30秒ひかり電話8円/3分 こう比較すると、自宅のひかり電話の回線から発信できるような仕組みを作りたくなってしまう。

Oracle OLEDB Provider Version 12.2.0.1.0 for Windows x86をインストールする際のエラー

Image
Windows 7 Professional 32-bitに、Oracle OLEDB Provider Version 12.2.0.1.0をインストールするには、 例えば、C:\app\instantclient_12_2に必要なDLLを揃えて、PATH環境変数にこのディレクトリーを追加した後で、 regsvr32 C:\app\instantclient_12_2\oraoledb12.dllを実行すれば良い。 しかし、「指定されたモジュールが見つかりません。」のエラーが出ることがある。 こうなるとOLEDB Providerは登録されないので、OLEDB経由でOracle Databaseに接続することはできない。 これは、Visual C++ 2013 redistributableを インストールすることで解消された。

Is it time for open processors?

Is it time for open processors? を読んだので翻訳しておく。 ただし、正しく訳せているとは思わない。 これは、 Jonathan Corbet氏による2018年1月9日のlwn.netにおける記事で、 Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) で公開されている。 Is it time for open processors? MeltdownとSpectreの2つの脆弱性の公開により、 ハードウェアレベルのセキュリティー上の問題が存在し得ることに、 改めて注目が集まっている。 ソフトウェアの脆弱性に関しては、まだ脆弱なソフトウェアのセキュリティー の解消のために非常に多くの努力がされているが、 ハードウェアな脆弱なままであれば、全て無駄な努力である。 私たちのシステムを動かしているCPUは、高度にプロプライエタリーであり、 嬉しくない驚きを内包していることが示されている (例えば、Intel Management Engine)。 そうなると、ソフトウェアがそうであったように、 オープンソースハードウェアに移行しようという動きがでてくるのは当然だろう。 オープンソフトウェアハードウェアへの移行は可能かもしれないし、 確かに利点はあるが、それで全てが解決する訳ではないだろう。 現代のCPUは複雑であり、販売されている市場は過酷な状況である。 オープンなやり方でCPUを開発しようと言うのは驚かれるかもしれない。 しかし、この分野でもオープンな開発を進める動きはある。 オープンなCPUと言う考えは、ファンタジーではない。 以下に、いくつかの事例を紹介する。しかし網羅的なものではない。 既に公開されているもの POWERアーキテクチャーを元にしたOpenPOWERの事例を見てみよう。 これは真にオープンソースではない。 主体的に利用するのであれば、OpenPOWER Foundationに加盟しなければならない。 しかし、プロセッサーを共同作業として開発するという例ではある。 比較的オープンな設計に基づいた製品が出荷されている。 OpenPOWERは、ハイエンドに特化している。 この設計に基づいたチップが、近い将来携帯電話やノートP…