+++ /dev/null
-# go-plugin Internals
-
-This section discusses the internals of how go-plugin works.
-
-go-plugin operates by either _serving_ a plugin or being a _client_
-connecting to a remote plugin. The "client" is the host process or the
-process that itself uses plugins. The "server" is the plugin process.
-
-For a server:
-
- 1. Output handshake to stdout
- 2. Wait for connection on control address
- 3. Serve plugins over control address
-
-For a client:
-
- 1. Launch a plugin binary
- 2. Read and verify handshake from plugin stdout
- 3. Connect to plugin control address using desired protocol
- 4. Dispense plugins using control connection
-
-## Handshake
-
-The handshake is the initial communication between a plugin and a host
-process to determine how the host process can connect and communicate to
-the plugin. This handshake is done over the plugin process's stdout.
-
-The `go-plugin` library itself handles the handshake when using the
-`Server` to serve a plugin. **You do not need to understand the internals
-of the handshake,** unless you're building a go-plugin compatible plugin
-in another language.
-
-The handshake is a single line of data terminated with a newline character
-`\n`. It looks like the following:
-
-```
-1|3|unix|/path/to/socket|grpc
-```
-
-The structure is:
-
-```
-CORE-PROTOCOL-VERSION | APP-PROTOCOL-VERSION | NETWORK-TYPE | NETWORK-ADDR | PROTOCOL
-```
-
-Where:
-
- * `CORE-PROTOCOL-VERSION` is the protocol version for go-plugin itself.
- The current value is `1`. Please use this value. Any other value will
- cause your plugin to not load.
-
- * `APP-PROTOCOL-VERSION` is the protocol version for the application data.
- This is determined by the application. You must reference the documentation
- for your application to determine the desired value.
-
- * `NETWORK-TYPE` and `NETWORK-ADDR` are the networking information for
- connecting to this plugin. The type must be "unix" or "tcp". The address
- is a path to the Unix socket for "unix" and an IP address for "tcp".
-
- * `PROTOCOL` is the named protocol that the connection will use. If this
- is omitted (older versions), this is "netrpc" for Go net/rpc. This can
- also be "grpc". This is the protocol that the plugin wants to speak to
- the host process with.