コンピュータの歴史は、仮想化の歴史と言えるほど、抽象化、仮想化は古くからある考え方であり、抽象化、仮想化によってハードウェアで行っていたことも見掛け上ソフトウェアで実装できるようになったり、機器の小型化も進んでコンピュータ本体の小型化も為されました。
近年、仮想化をサービスとして提供しようということから改めて仮想化に注目が集まり、そうしたソフトウェアが各種リリースされています。
仮想化ソフトウェアの注目を集めるべく、その一環としてオープンソースやフリーソフトウェア、一定試用期間内のみ利用可能な評価版提供なども活発で個人でも使ってみたくなる、とても有用なものとして1台のPC上で異なるOSやバージョン違いのOSなど複数のOSをインストールでき、更にCPUやメモリに余裕があれば並行して実行でき、通常のOS同様個々にアプリケーションもインストール可能、バックアップも他PCでの利用もファイルのコピーや移動でOKという仮想マシン作成・実行ソフトウェアがあります。
PC自体のOS(ホストOS)としてWindows、Mac OS X、Linux、Solaris...、他方、これらを含む多くのOSを仮想マシン上にインストール(ゲストOS)できる仮想マシン作成・実行ソフトウェアとして多機能で使い勝手がよいものにVMware PlayerやVirtualBoxがあります。
(CPUがx86/IA-64/AMD-64のPC/AT互換機で利用可能)
元は、Macintosh用でホスト型の仮想化ソフトウェアVirtual PCとして誕生、サーバ仮想化製品も完成間近でしたが、Virtual PCが、WindowsやOS/2にも移植されるとMicrosoft社が関連特許や事業を買収、Virtual PC 2004として販売、Virtual PC 2004 SP1から無償提供すると共にMacintoshのホストOSとしてのサポートを終了、ホストOSをWindowsのみとし、ゲストOSも一部のWindowsとOS/2のみ、後継としてVirtual PC 2007/Virtual PC 2007 SP1、Windows 7でXP Modeをサポートする為のWindows Virtual PC、Windows 8になると先の事業買収時にリリース前だった技術を基にWindows 2008/2012といったサーバ用としてリリースしていたHyper-Vのクライアント版としてWindows 8 pro(x64)に標準採用されるに至り、Virtual PCは、以後リリースされないようです。
ただ、XP Modeの利用はスムースに進まなかったこともあり、マシンスペックの関係含め、Virtual PC 2007や他の仮想化ソフトウェアへのニーズもまだまだあります。
Windows上で他のWindowsを使えればよいとか、Windowsとの相性はやっぱりこれと思う場合は、選択肢の1つになるでしょうが、他と比較するとホストもゲストも限定されてしまうことはデメリットでしかないと言えるでしょう。
また、x86/IA-32/AMD32、ARM、MIPS、SPARCなど、場合によっては、PowerPC、S390などマシンやCPUアーキテクチャーを越えてホスト・ゲストに同じまたは、異なるCPU対応のOSを起動することも可能な仮想化ソフトウェアにQEMUやBochsなどがあります。
VMware PlayerやVirtual PC、VirtualBoxなどが、物理マシンのCPUを利用する形で実装されるのに比べ、QEMUは、物理マシンとCPUが同一であっても、そのCPU上で、別途CPUを丸ごとエミュレートする為、オーバーヘッドは大きいですが、当該ホストにおいて負担にならない軽量なOSを動かす分には、他のどれよりも軽快で快適と言えます。
KVMやXen、VirtualBoxなどでは、一部の機能においてQEMUを採用しています。
この他、Windows上でLinuxを利用することだけが目的ならcoLinux(Cooperative Linux)という選択肢もあります。
ここでLinux/BSD/PC-UNIXと一口に言っても数多くの種類があるので、それでもほんの一部ではありますが、当サイトで主にVirtualBox、補佐的にVMware Player、QEMUを使って起動、インストールしてみたものを列挙、各リンク先にその詳細を記しておきます。
下記は、こうしたLinux/BSD/PC-UNIXのスクリーンショットの一覧ですが、このように各種仮想化ソフトウェアを利用しているのは、相性があるからです。
仮想マシンは、物理PCから見ると1つの大きなファイルであり、通常、1つのフォルダ単位でまとめられています。
ちょっと知っておきたいことはあるにしても仮想マシンの移動やコピーも簡単にでき、更にちょっとしたテクニックを加えれば、バックアップや別の仮想マシンとしてクローンを作ることもできるということです。
一方、このように複数の仮想化ソフトウェアで仮想マシンを作成していると時にある仮想化ソフトウェアで作った仮想マシンを違う仮想化ソフトウェアで使えたら。。。といった衝動に駆られることがあります。
そんな時、知っていると便利なのが、以下で他の仮想化ソフトウェアで作った仮想マシンを直接、または、間接的、または、変換して再生することもできたりします。
仮想マシンよりもリソース消費が格段に少なく素早く高速に構築でき、並列稼働、連携までできてしまう仮想化技術にコンテナ型があり、知名度の高いものにLinuxコンテナ(LXC)や当初、これをベースエンジンとして開発されたDockerがあります。
Dockerなら、Dockerfileというテキストにやることを書いておけば、何度でも、いくつでも全く同一の環境を、DockerをインストールしたパソコンとDockerfileがあれば、どこにいても自動的に構築してくれます。
ここで試したCoreOSでもDockerが使われていますが、Dockerは、その仕組みからDocker内や仮想マシン、クラウド上でも起動させることができることもあり、一層、注目を浴びています。
こうした仮想化ソフトウェアを使うと新たにPCを購入しなくても低コストまたは、コストをかけずに異なる環境の勉強、研究、検証ができたり、開発環境、コンパイル環境、実行環境としてもOS含めて調達することができますし、古いPCや壊れたPCのOSをゲストOSとして継続利用でき、そこでしか動かないアプリケーションやゲームを実行することもできたりしますし、OSがWindowsでPCが古いだけなら、それに最新、または比較的新しい軽量Linuxをインストールしたり、ファイルサーバや外付けHDD、各種外付けデバイスやセカンドモニタ代わりやルータとして利用するといった新たな展開も生まれたりするのでいろんなシーンで重宝するでしょう。
そこでOS選定にあたり、主にLinux/BSD/PC-UNIXに関する情報とMS-DOS/FreeDOS/Windows含むこれまでに検証したOSにおけるRAM容量別の起動状況一覧を参考までに掲載しておきます。
実際のパソコン上と同様、仮想化ソフトウェアで作成した仮想マシン上でOS、ソフトウェアのインストール、マルチブート等々の練習やOSの選定もできるので十二分に堪能して気に入ったOSがあったら手持ちのパソコンのスペックと相談しながら実際にインストールしてみるとよいでしょう。
例えば、Windowsのサポート期限が切れたPCだってOSさえ入れ替えれば、たいていの場合、まだまだ現役で使えるわけで活用してみるのも楽しいですよ。
SOTEC e-one 500A CPU Celeron 500MHz/RAM128MB/HDD13GBといったスペックのWindows 98 SEプリインストールマシンのOS入れ替えを検討してみたり。
FUJITSU FMV C6320 CPU Celeron 1.60GHz/RAM512MB/HDD40GBといったスペックのWindows XPプリインストールマシンのOS入れ替えを検討してみたり。
TOSHIBA dynabook Satellite T30 160C/5W CPU Celeron 1.60GHz/RAM512MB/HDD80GBといったスペックのWindows XPプリインストールマシンのOS入れ替えを検討してみたり。
Pavilion Slimline s3140jp CPU Intel Core 2 1.80GHz/RAM1GB/HDD160GBといったスペックのWindows VistaプリインストールマシンのOS入れ替えを検討する以前にHDD交換やRAMを増強してみたり、CD/DVDドライブを追加購入してみたり、結果OSを検討してみたり。
メインとしていたTOSHIBA dynabook Satellite T30 160C/5WもサブとしていたHP Pavilion Slimline s3140jpもACPIにやられてしまい、BIOSが追従できず、前者はPC自体機能不全、後者はサスペンド・ハイバネートを有効にすると正常に機能せず、電量の無駄マシンとなってしまったため、急遽、低消費電力のノートパソコンを1台調達。
元々UNIX、Linuxユーザーだったり、Mac OS Xユーザーであれば、UNIX/LinuxコマンドとShellはなじみ深く、DOS、コマンドプロンプト、Windows Script Host、Power Shellなどへの抵抗も薄いかもしれませんが、Windowsユーザーでもこれらを使わないGUI/Graphical User Interface専門のユーザーやWindowsに付属するこうしたCUI/Character User Interface環境を使うユーザーでもUNIX/Linux/Mac OS Xへの抵抗は大きいかもしれません。
でも、ある程度覚えてしまえば、更に英語へのアレルギーがなければ尚更、DOS、MS-DOSプロンプト、コマンドプロンプト、Windows Script Host、Power Shellよりも、むしろUNIX/LinuxコマンドやShellの方が、スッと入ってきやすい気がしますし、できることも比にならないほど多く、機能性も高く、拡張性も高いので使い勝手も良いように思います。
UNIXは、1969年にアセンブリ言語ベースで開発開始、1973~1973年にC言語で書き直され、移植性が高まったことで、それまでメインフレーム(大型汎用機)メーカーが専用に用意したオペレーティングシステムも次第にUNIXの様々な系統のが派生が登場し、採用されました。
1970年代から1980年代、大企業や大学や研究機関などでもUNIXの利用が広がり、カリフォルニア大学バークレー校に由来するBSDが登場、後にUNIX特許問題が勃発し、1990年代まで尾を引きましたが、PC用のUNIXとしてUNIX System VやBSDベースのいわゆるPC-UNIXも登場するに至りました。
UNIXの特許問題に嫌気がさし、MINIXが教育用に専念し、汎用として公開されないことにやきもきしたとされるフィンランドの大学院生だったリーナス・トーバルズ氏が、1991年、特許にかかるUNIXコードを使わないLinuxカーネルを開発、徐々に有志が集まり始め、急速に開発が進み、複数のLinuxディストリビューションが登場、更に様々な派生が登場しました。
折しも1991年は、一般にWindows 3.0がリリースされた年であり、1993年にはWindows 3.1がリリースされ、MS-DOSとのインタフェースの様変わりは、ユーザーフレンドリーなものとして受け入れられ始め、Windows 95に続くわけですが、Linuxカーネルも、UNIXを意識していたこともあり、興味関心の高い人が開発に携わり、利用するMS-DOSのようなコマンドライン(CUI)ベースのオープンソースであり、デスクトップ環境といったユーザーフレンドリーなインタフェースについては、重視どころか、着目すらされていなかったと言えるでしょう。
よって一般のPCユーザーへのLinux認知度は、低く、仮に知っていても玄人向けという印象が強かったと言えますが、その後、一般向けよりも企業向けの特にサーバ用途としての需要が伸びていき、仕事でUNIX/Linuxに関わる人々の一部は、Windowsとのハードディスク上でのマルチブート、LiveCD/DVD/USBといったメディア上にインストールされたLinux/BSDとのマルチブートやレスキュー用途などで利用されたり、PCカスタムビルド製品では、Linux/BSD搭載マシンも登場するまでになりました。
更に近年、一般ユーザーにも使いやすいデスクトップ環境を備えるLinux/BSD/PC-UNIXも一般的となり、ルック&フィール(見た目や使い勝手)がWindowsに慣れ親しんだユーザーにも違和感がないほど使いやすくなっていて遜色ありませんし、セキュリティ面もWindowsより高く、更に強化しようと思えばでき、低コストでありつつ、選択肢も多いというメリットの方が、今あるWindows専用アプリケーションが使えないという点を遥かに凌いで余りある程だとも思えますが、それが気になる場合にも仮想マシンを使えば、解消される可能性もあり、ましてBSD系UNIXをベースに開発され、バージョン10.5 Leopard含む以降UNIXと認定されたMac OS X/OS X、IntelのCPUを採用したIntel Macにおいては、仮想マシン上でWindowsとLinuxをインストールすれば、今やMac/UNIX/Linux/Windows全て1台のPC上で使うことができたりします。
また、AndroidのベースはLinuxですからスマートフォン・タブレット市場でも利用されることで、実は、一般ユーザーにも普及しており、Androidではなくタブレット対応Linuxも登場しています。
ちなみに良いことずくめに見えるMacintoshは、WindowsやLinuxとは、キーボードやマウス操作が若干異なる為、慣れる必要があり、Boot CampでWindowsとマルチブートしたり、仮想マシンを使って他のOSを利用するなら別途Windows(やLinux/BSD)用にキーボードやマウスを用意することもできますが、そもそもWindowsやLinuxが動くPC/AT互換機よりも割高感がある上に64ビット版Windows 7/8も同様ですが、Mac OS X/OS Xだけでもマルチコア、メモリ2GB以上を要するので仮想マシンを使うにしてもそのOSが同等以上となるとメモリ4GBでは、ぎりぎりなので32ビットでは補いきれず、64ビットに1本化され、4GB、6GB、8GB、16GBと往々にして高いマシンスペック、つまり、最新スペック且つ、より高額なPCを要求されることになったりします。
超薄型のノートPCを選択する場合は、Windowsにしろ、MacにしろHDDよりもSSD(まだまだ高価で小容量)が採用されることも多くなっていると思いますが、仮想マシンを使って多くのOSを取っ換え引っ換えしたい場合には、それだけでハードディスク容量100GBはあっという間に消費するので外付けHDDは必須と言えるでしょう。
その点、Linux/BSD/PC-UNIXは、デスクトップ環境でもメモリ1GB以上を必要とするケースは、少なくとも今のところ稀であり、中には、700MB以上要するものもありますが、セキュリティ上、あまりおすすめできないものの、最新のカーネルにこだわらなければ、Linuxでも、OpenBSDやNetBSDなら最新のオリジナルカーネルと標準システムでも今尚、128MBならギリギリ、256MB、512MBなら十分動作する環境を選択できますから、最新のPCでなくとも一昔、二昔前のPCでもマルチブートや仮想マシンで当時主流の32bit/64bitのWindows XPやVistaといったWindowsやそれ以前のWindowsとたいていのLinux/PC-UNIXの組み合わせることができ、デュアルコアCPU、メモリ2GBもあれば、多くのOSを利用することができます。
セキュリティアップデートサポートがあるなら別ですが、XPのセキュリティアップデートサポート終了も迫り、後のバージョンも何れはそうなる中、サポート終了後は、無防備で無法地帯であるネットに接続することすら危ぶまれることを考えれば、サポート切れのWindowsを前段のVMwareやVirtualBoxといった仮想マシン関連のリンク先にある方法等で仮想マシンにインストールして、かたやWindowsの新たなバージョンを購入するにしてもやはり、仮想マシンでLinuxに慣れ親しむなどして併用、もし、慣れて遜色なくなればLinux/*BSD/PC-UNIXのデスクトップ環境に載せ換えるというのも経済的、現実的かつ有力な選択肢の1つと言えます。
Linux/UNIX/BSDを知る上でbash、UNIX/Linuxコマンド、vi/vimは、基本と言ってよいでしょう。
Linux/BSD/PC-UNIXは、ディストリビューションやバージョンによってカーネルバージョン、パッケージマネージャ、用途、ベースとして収録されるソフトウェア構成、安定版重視か、最新版重視か、採用するShellの種類などによって特色があります。
ただ、UNIX/Linuxコマンドは、ほぼ共通ですし、Shellは、B Shell系とC Shell系に大別され、tcshが登場するまでのcshの不安定さなどの背景もあり、特にB Shell系のBourne Shell、その流れを汲むbashは広く利用されてきたこともあり、他のShellを日常的に使っているユーザーでもBourne Shell/bashコマンドを知るユーザーは多いと思われます。
また、UNIX/Linuxでは、ほぼ全てをファイルとして表現することからも必要不可欠とも言えるテキストエディタも種類は豊富ですが、vi/vimやEmacsユーザーが多く、viは、どのディストリビューションにも標準で含まれるので日ごろ他を使うにしても操作方法を知っているユーザーも多いと思われます。
bashにしろ、viにしろ、より多くの人が知っているということは、情報量が多いということでもあり、困った時の助けにもなり、ジェネレーションギャップも小さく、他の人と共通語で話せる感覚があるという意味でも、仮に他を使うにしても基本として覚えておくに越したことはないでしょう。
Windows上の開発では、Microsoft系のプログラミング言語を中心に各種IDE/Integrated Development Environment(統合開発環境)を利用することも多いでしょうが、coLinuxのような.exeファイルとして実行可能なLinux環境やCygwin、MinGWといったUNIX/Linux代替環境、UNIXやLinuxはもちろんWindowsも実行可能な仮想マシン作成・実行ソフトウェアで仮想マシンを作成してLinux/*BSD/PC-UNIXをインストールするといった選択肢もあります。
UNIX/Linux Shell環境を体験してみたい、手軽に使ってみたいという場合には、CygwinやMinGWという選択肢もありますが、CPUやメモリ、HDD容量等の条件にマッチしない場合を除き、ダウンロードやインストール、日本語対応のチューニング等を考えても、手間のない仮想マシンの方が簡単な上に重宝すると思われる為、ベター(より良い選択)、その場合、追加でcoLinux、CygwinやMinGWの何れかもインストールしておき、使い分けるというのがベスト(最も良い選択)と言えるかもしれません。
Cygwinを先に知って仮想マシンを後から入れて併用している経験からすると現状に満足していますが、もし、仮にCygwinより先に仮想マシンを知っていたら、ましてCygwinインストールとその後の手間に遭遇したら、今頃使っていなかったかもしれず、むしろ、先にCygwinを知ったことは、(手間への免疫ができ、他のケースにおいても手間への抵抗が軽減されたかもしれないことも含め、)結果的に良かったと思います。
Shellとは、UNIX/LinuxにおけるCUIとしての入出力機構であり、スクリプト言語でもあり、(実際は逆でDOSとバッチファイルがシェルに似ているわけですが、)DOSとバッチファイルの関係に似ています。
Shellには、Bシェル系とCシェル系の2系統をはじめ、その派生など複数あります。
Bシェル系として代表的なShellとしてBourne Shellを改良したBashがあります(が、バスケットシューズではありません)。
HTMLと同じ系統のSGMLから派生したものとして策定されているXMLは、HTMLと融合したXHTMLも派生としてありますが、これら予め固定のタグが決められたマークアップ言語とは異なり、SGMLの厳格さを継承した拡張可能なマークアップ作成言語であり、データ交換したい任意の業界・企業・団体・グループ、場合によっては個人同士でも規則に沿って自由にタグを作成・利用することができますし、ソフトウェアアプリケーションのチューニング用構成データファイルやインストール時の構成ファイル、ネットワーク経由のデータ交換、時にデータベースとして等々、様々な用途に合わせて一から設計できる柔軟な言語です。
ajaxは、XMLを使った非同期通信とJavaScript(ECMAScript)を融合した仕様です。
XSLは、XML文書のモニタ表示時や紙面などへの印刷時の出力状態における装飾用マークアップ言語であり、簡単に言うとHTML/XHTMLで言うところのCSSに当たります。
XSLTは、あるXML文書から他のXML文書、HTML/XHTML、PDF等々への書式変換や装飾変換などに利用可能なXML用の変換用言語です。
XSLやXSLTの実行結果などXMLをモニタなどに表示、確認する際などには、文法を解析、表示可能なXMLパーサー、または、単にパーサーが必要であり、パーサー単独、または、ブラウザに組み込まれたパーサーには、DOM/Document Object ModelやSAX/Simple API for Xml、(Simple Object Access Protocolの略として開発されたものの、後に意味を持たない文字列であるものとされた)SOAPといったプロトコルの実装が必要となります。
PCシステムの普及に伴い、物理的なメディアなどの持ち出しによる故意または、過失によるデータ紛失などに起因する情報漏洩、インターネットの普及に伴い、ウイルスやスパイウェア、スパイボットなどによる盗聴や情報・データ搾取、稼働を阻害する攻撃など様々な脅威が顕著になったことから情報セキュリティの重要性が高まっており、オンラインシステムにおいては、サーバに情報が集約されることからサーバのセキュリティが最も重要度が高いといえます。
外部ネットワーク、主にインターネットと内部ネットワークの出入り口でセキュリティを強化するのは、今や当たり前であり、入り込む前に、出て行く前に対処できればそれに越したことはなく、その為には、ハードウェアやソフトウェアから成るファイアウォールを利用することはもはや大前提となっており、インターネットとWebサーバ間、Webサーバと内部ネットワーク間にそれぞれファイアウォールを設置して二重にガードすれば、より強固にすることが可能です。
ファイアウォールの機能を実装する為に使われることもあるルータとは、ネットワーク内のプライベートIPアドレスを管理し、データの出入りの流れを制御しつつ、ネットワーク内の必要な端末にデータを送り届けたり、受け取ったデータをネットワークの外に送信したりするハードウェアです。
インターネットとの接点におかれ、世界で唯一のグローバルIPアドレスが割り振られたルータをグローバルルータと呼びます。、のデータとして外部に送信する、主にインターネットとの接点にあり、世界で唯一のIPアドレスが割り当てられたルータをグローバルルータと呼びます。
尚、ISDN、ADSL、FTTH、CATV回線などと接続しているブロードバンドルータは、プロバイダのグローバルルータから内部ネットワーク用として自動的にIPアドレスを割り振られるか、または、プロバイダから通知された固定の静的なプライベートIPアドレスを設定することにより、実際には、プロバイダのグローバルルータを通してインターネットと接続しているに過ぎませんからブロードバンドルータは、グローバルルータではありません。
ルータは、静的または動的な経路情報に基づいて作動しますが、その経路情報は、IPテーブルやルーティングテーブルと呼ばれるデータベースに書き込まれます。
例えば、Perlというスクリプト言語単体のセキュリティ対策の1つには、cryptというものがあります。
ウェブサイトやホームページへのアクセス時に安全に通信を行う技術にSSLがあり、Webサーバ上で設定できるのが一般的でWebサーバがApacheならその設定でSSLを有効、無効にできます。
但し、その場合、Webサーバ上で設定したかしないかとうだけであり、Webサーバの運営者側の話であって、URL欄に[http://...]ではなく、[https://...]とあることで第三者でも一応の確認ができますが、そのSSLを実装しているというサイトの主張が本当であり、安全であるかの保証をVeriSignなど外部の認証機関が行っているものの安全性が高いとされており、その証として複製できない認証機関のバナーが表示されているのが一般的です。
その認証バナーを設置できるのは、認証機関と有償契約を結び、そこで付与されるサーバIDを持っている企業・団体や場合によっては個人です。
SSLは、公開鍵暗号方式を採用しており、サーバ側が持つ秘密鍵で暗号化され送信されたデータは、公開鍵で開けられますが、その公開鍵で暗号化され、送信されたデータはサーバが持つ1対の秘密鍵でしか開けられないという仕組みによってサーバに送信されるデータが保護されるようになっています。
公開鍵暗号方式は、構成文字列の複雑さと鍵の長さによる為、同じ公開鍵暗号方式でもその精度には複数ありますが、その鍵長は、その時代のコンピュータ性能などから決められ、第三者が何らかの方法で解読しようとしてもとてつもなく年単位で長い時間がかかると想定されることで解読できたとしてもその時には、既に意味を成さないということで成り立つものとされます。
こうしたことから、個人情報やカード情報などの入力の可能性があるショッピングカートなどでは、SSLの採用を前提にすべきとされるほど、強く推奨されます。