OpenVMS (Open Virtual Memory System) は、ディジタル・イクイップメント・コーポレーション (DEC、現在はヒューレット・パッカード・エンタープライズ) によって設計された、タイムシェアリングシステム、バッチ処理およびトランザクション処理用のオペレーティングシステムである。当初は単にVMSと一般的には呼ばれており、元々はVAXシステム上で動作していたが、後にDEC Alphaとインテル Itaniumに移植された。
2014年、ヒューレット・パッカードはVMS Software, Inc.にOpenVMSの将来のリリースを開発する独占的な権利を与えると発表した。

## 経緯

### 起源と名前の変遷

1975年4月、PDP-11用に32ビットの仮想アドレス拡張を設計するために、DECはコードネームStarというハードウェアのプロジェクトを開始した。それに伴って、Starファミリのプロセッサ用にRSX-11Mを基にした全く新しいオペレーティングシステムを開発すべく、コードネームStarletというデヴィッド・カトラー率いるソフトウェアのプロジェクトも1975年7月に開始された。これら2つのプロジェクトは当初から緊密に統合されていた。Star・Starletの両プロジェクトは、VAX-11/780コンピュータとVAX-11/VMSオペレーティング・システムとして結実した。

年を経るにつれて製品名は変化していった。1980年にはバージョン2.0のリリースに伴ってVAX/VMSと改名された(同時にVAX-11コンピュータは単にVAXと改名された[最初のVAXコンピュータは1984年発表のVAX8600である])。1991年には、POSIXやUNIX互換性といった業界標準のサポートを示唆し、さらにはDECの64ビットDEC Alpha RISC CPUへの移植が進行中であったので、特定のアーキテクチャとの繋がりを断ち切るために、OpenVMSと再度改名された。OpenVMSの名前はバージョン5.5のリリースとともに最初に登場した。

### DEC Alphaへの移植

VMSのDEC Alphaへの移植は、32ビットと64ビットの各アーキテクチャ向けに別々のコードの作成を必要とした。1992年にはAlpha AXPシステム用の最初のバージョンのOpenVMSがリリースされ、OpenVMS AXP V1.0と名づけられた。その後、OpenVMS AXP 1.5がVAX/VMS 5.5相当としてリリースされた。(OpenVMS AXPの試作品クオリティのリリースに1.xといったバージョン番号を使用したことは顧客に混乱をもたらし、その後の移植版では繰り返されなかった)

1994年には、OpenVMSバージョン6.1のリリースに伴って、VAXとAlpha版の機能(とバージョン番号)が同等になった。その後のVAXとAlpha版の製品のバージョン番号は一貫している。

### Itaniumへの移植

2001年、DECを買収したコンパックがヒューレット・パッカード (HP) へ吸収される直前に、OpenVMSをインテル Itaniumアーキテクチャへ移植することを発表した。この移植はAlphaのコードを利用して行われ、VAXコードの成熟もあって移植プロセスは大幅に簡略化された。VAXコードベースの「スナップショット」がAlphaリリースの基として使用されたVAX版のAlphaへの移植と異なり、OpenVMSのAlphaとItenium版は共通のコードベースを利用してビルドされている。

最初の試作品クオリティのリリースであるOpenVMS IA64 V8.0は、2003年に出荷された。最初の製品クオリティのItanium版リリースであるOpenVMS V8.2は2004年後期に出荷される予定だったが、OpenVMS/Itanium移植版は2005年1月18日に発表された。V8.4でHP Integrity VMのゲストOSとしてサポートされた。

## 機能

OpenVMSは3つのレイヤに分けることができる:

- 入出力、メモリ管理およびプロセス管理サブシステムからなるカーネル
- en:DCL、en:RMS、en:DECwindows(OpenVMSのX11準拠ウィンドウ・システム)およびen:RTLからなるコア・サービス
- サポート、システム管理およびプログラミングのためのユーティリティ・プログラム

### クラスタリング

OpenVMSはクラスタリング (VAXclusterと呼ばれ、後にVMSclusterとなった)をサポートし、これにより、特別なハードウェアまたはイーサネットで接続された複数のシステムが、処理、ジョブ・キュー、プリント・キューおよびディスク・ストレージ、ファイルとファイルレコードを共有することができる。この場合の共有は、分散ロックマネジャを使用したShared Everythingと呼ばれクラスタ内のすべてのシステムから同時にアクセスが可能である。イーサネットによるクラスタは、Local Area Network VMSclusterを意味するLAVCと呼ばれる。OpenVMSは単一クラスタあたり96ノードまでサポートし、VAXとAlphaシステム、あるいはAlphaとItaniumシステムが単一のクラスタ内で共存するような混成アーキテクチャ・クラスタもサポートする。(OpenVMS Engieeringは理論上3アーキテクチャクラスタも可能であることを示唆していたが、HPはサポートしない)

### Common Language Environment

OpenVMSの特筆すべき機能の一つがCommon Language Environmentであり、これはプログラミング言語から独立して、スタックやレジスタの使用も含めた関数やサブルーチンの呼び出し方を定義する、厳格に定められた標準である。これにより、対象となる言語の実装の詳細を知ることなく、ある言語(例えばFORTRAN)で書かれたサブルーチンを他の言語(例えばC言語)から呼び出すことが可能である。OpenVMS自体は多種の異なる言語(BLISS、VAX Macro、Ada、PL/I、C、FORTRAN、BASICなど)によって実装されており、ほぼ全体がC言語によって実装されているUNIXなどのシステムとは対照的である。

### ファイルシステム

OpenVMSは、ストリームやレコード志向の入出力、アクセス・コントロール・リスト、ファイル・バージョニング等をサポートする非常にリッチなファイルシステムを持っている。例えば、ファイル・バージョニング機能により、ファイルの編集・保存を繰り返すたびにファイルの名の後ろの番号が(foo.c;1、foo.c;2、foo.c;3、...、foo.c;nnnnn のように)インクリメントされる。もっとも大きい番号が最新版である。また、UNIXとは異なりファイル名の大文字と小文字は区別されず、ディレクトリのパス名は大カッコで囲む必要があり、パス名内のディレクトリはピリオドで区切る必要がある。つまり、UNIX での /home/myname/work/foo.c は、[home.myname.work]foo.c;n のようになる。en:OpenVMS filesystemを参照のこと。

### 時刻の管理

VMSは、エポックからの経過ナノ秒を64ビットで保持することで時刻を管理している。OpenVMSのエポックは、修正ユリウス日が0となる1858年11月17日の真夜中である。

## OpenVMS ホビイスト・プログラム

商用オペレーティングシステムでありながら、1997年にはOpenVMSホビイスト・プログラムの一環として、OpenVMSと複数のレイヤ化された製品(レイヤード・ソフトウェア)が、ホビイストの非商用利用については無料で利用可能となった。それ以降、OpenVMS用ソフトウェアを生産している複数の会社が、自社の製品を同様の条件で利用可能とした。