/revolving-door

A tutorial on the Illumos Doors API

Primary LanguageCBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Get Started: Before we Begin

Revolving Doors

Learning the illumos Doors API

illumos Doors are a novel form of inter-process communication. They allow a thread in a client process to call a function in a server process, automatically spawning a handler thread in the server process if needed.

overview

This repository includes a set of annotated code examples of increasing complexity, each of which discusses a different aspect of the doors API. Though unusual, this API is not very big. The goal of this project is to help folks become comfortable with the doors API in two or three attempts.

Prerequisites

You should know a little C, and have an interest in systems programming. More specifically, this tutorial assumes you either understand or can teach yourself about the following:

  • When a process opens a file, it gets back a "file descriptor" which is an int
  • Making a "System Call" is really just asking the OS to do something for you
  • C represents arrays by a pointer to the beginning of some data, and its length
  • printf takes some funky arguments, and you have to look those up sometimes.
illumos

Of course, to play with doors, you will need access to illumos! I recommend these two routes, depending on your preferences:

  • Want to run it in a VM on your desktop? Try OpenIndiana.
  • Just want to spin up a cloud instance? I like SmartOS on Joyent.

Doors are super lightweight, so feel free to be as cheap as you want. You will not need significant resources for this tutorial.

Sources

I am writing this because there seems to be so little about doors on the internet. Here is what I have been able to gather, in order of usefulness:

Special Thanks

  • @jack-morrison and @AnthonyDiGirolamo for encouraging me to get the OpenIndiana setup guide together
  • Nicole Deasy for suggesting explicit forward/backward navigation over github's built-in nav
  • u/jking13 for this excellent feedback