Portable Distributed Objects ( PDO ) は、コンピュータネットワーク上でリモート実行可能なオブジェクト指向コードを作成するためのアプリケーションプログラミングインターフェース(API)です。NeXT Computer, Inc.が自社のOpenStepシステムを使用して開発しました。OpenStepはObjective-Cを採用しているため、非常に簡単にコードを作成できます。PDO は、 CORBAなどの類似システムと比較して、非常に軽量で高速であるという特徴があります。
PDO のバージョンはSolaris、HP-UX、および OPENSTEP システムのすべてのバージョンで利用可能でしたが、当時まだ OSF/1 として知られていたDigital Unix用のバージョンを作成する契約も発表され、SunOS および Solaris 用のバージョンがリリースされた後に提供される予定でした。これらのプラットフォームの製品ライセンスの価格は、「小型サーバー」で使用する場合は 2,500 ドルから、「大型サーバー」で使用する場合は 10,000 ドルまででした。[ 1 ] Microsoft OLEと連携するバージョンもD'OLEと呼ばれており、[ 2 ] PDO を使用して任意のプラットフォームで記述された分散コードを、ローカル OLE オブジェクトであるかのように Microsoft システムで表示できます。
一方、PDOは移植性と配布の両方を処理するために、 Objective-Cランタイムの少数の機能に依存していました。重要な機能は、すべてのクラスで「セカンドチャンス」メソッドをサポートする言語でした。オブジェクトがメソッドをサポートしていないためにオブジェクトに対するメソッド呼び出しが失敗した場合(通常、ほとんどの言語では強い型付けのため許可されていません)、ランタイムはメッセージをコンパクトな形式にバンドルして、オブジェクトのforwardInvocationメソッドに渡します。[ 3 ]
通常の動作ではforwardInvocation、メッセージ(「呼び出し」)から取得した詳細情報を含むエラーが返されます。PDO は代わりに、呼び出しオブジェクトをネットワーク上の別のマシンに渡すメソッドを持つ多数の新しいオブジェクトを提供しforwardInvocation、さまざまなネットワークとプラットフォームをサポートするためにさまざまなバージョンを用意しました。リモートオブジェクトのメソッド呼び出しはほとんど目に見えません。ネットワーク設定(通常は数行)の後、PDO オブジェクトはローカルでインスタンス化され、システム上の他のオブジェクトと同じように呼び出されます。その後、PDO オブジェクトは呼び出しをリモート コンピュータに転送して処理し、結果が返されたときに結果をアンバンドルします。
CORBAと比較すると、PDOプログラムは通常1/10以下のサイズでした。NeXTのスタッフが雑誌に寄稿して、数ページにわたるCORBAの記事をわずか15行程度のコードで再実装する方法を示すことはよくありました。[ 4 ]プログラミングの観点から言えば、PDOほど使いやすいものはほとんどありませんでした。
しかし、PDOは動作するために完全にObjective-Cに依存していた。当時C++の方が広く使われており、コードベースをまったく新しい言語とパラダイムに移行する作業はあまりにも負担が大きいと考えられていたため、ほとんどの人がこの代償を払うことを望まなかった。[ 5 ] PDOはあまり使われることはなく、NeXTは1995年に新しいWebObjectsフレームワークに重点を移した。
ローカルプロセスが認識している任意のオブジェクトを、他のプロセスからインスタンス化できる機能は、既知のセキュリティ脆弱性であり、そのためAppleはPDOの使用を強く推奨していません。
OS X プラットフォームに加えて、分散オブジェクトの独自の実装を持つGNUstepもあります。 [ 6 ]