# DCE/RPC

DCE/RPC, short for "Distributed Computing Environment / Remote Procedure Calls", is the remote procedure call system developed for the Distributed Computing Environment (DCE). This system allows programmers to write distributed software as if it were all working on the same computer, without having to worry about the underlying network code.

## History

DCE/RPC was commissioned by the Open Software Foundation in a "Request for Technology" (1993 David Chappell). One of the key companies that contributed was Apollo Computer, who brought in NCA - "Network Computing Architecture" which became Network Computing System (NCS) and then a major part of DCE/RPC itself. The naming convention for transports that can be designed (as architectural plugins) and then made available to DCE/RPC echoes these origins, e.g. ncacn_np (SMB Named Pipes transport); ncacn_tcp (DCE/RPC over TCP/IP) and ncacn_http to name a small number.
DCE/RPC's history is such that it's sometimes cited as an example of design by committee. It is also frequently noted for its complexity, however this complexity is often a result of features that target large distributed systems and which are often unmatched by more recent RPC implementations such as SOAP.

## Software license

Previously, the DCE source was only available under a proprietary license. As of January 12, 2005, it is available under a recognized open source license (LGPL), which permits a broader community to work on the source to expand its features and keep it current. The source may be downloaded over the web. The release consists of about 100 ".tar.gz" files that take up 170 Megabytes. (Note that they include the PostScript of all the documentation, for example.)
The Open Group has stated it will work with the DCE community to make DCE available to the open source development community, as well as continuing to offer the source through The Open Group’s web site.
DCE/RPC's reference implementation (version 1.1) was previously available under the BSD-compatible (Free Software) OSF/1.0 license, and is still available for at least Solaris, AIX and VMS.
DCE is also still available under the previous non open-source license terms from the Open Group website.

## Uses

It was used in the UK's National Insurance Recording System (NIRS/2).
It is used by:
* Pennsylvania State University's student information portal, eLion
* the older version of HP OpenView Operations for Unix/Windows Agents
* Microsoft Exchange/Outlook (MAPI/RPC)
* Call of Duty: Modern Warfare 2 for Multiplayer lobbies, making small clouds to decide on a host or lobby migration.

## Alternate versions and implementations

* FreeDCE is the DCE 1.1 reference implementation ported to Linux, supports 64-bit platforms, and is autoconf'd to make porting to further platforms much easier: a Win32 port is underway.
* Entegrity Solutions licensed the OSF's entire DCE 1.2.2 source code and ported it to Win32, creating a product called PC/DCE - see https://web.archive.org/web/20060106153229/http://support.entegrity.com/private/pcdce32.asp
* Microsoft's version of DCE/RPC, called "MSRPC", is integrated into Windows NT. MSRPC is derived from the DCE 1.1 reference implementation.
* Samba contains an implementation of MSRPC that is intended to be network-interoperable and IDL-interoperable with MSRPC. It is not binary-interoperable with MSRPC.
* The Wine Project contains an implementation of MSRPC that is intended to be binary-interoperable and IDL-interoperable with MSRPC. It is not network-interoperable with MSRPC.
* In 2008, Likewise Software released an implementation of the DCE 1.1 reference.
* J-Interop is a working MSRPC implementation in Java. This library can be used on any Non-Windows platform and without using Java Native Interface (JNI) to provide COM access. It is currently used by OpenNMS for retrieving WMI data for system monitoring.
* Jarapac - DCE/RPC in Java

## Books

* Luke Kenneth Casson Leighton (1999). DCE/RPC over SMB: Samba and Windows NT Domain Internals. Sams. ISBN 1-57870-150-3.