Get Started: Before we Begin
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.
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.
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.
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.
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:
- Chapter 15 "Doors" of UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications, Prentice Hall, 1999, ISBN 0-13-081081-9.
- DOOR_CREATE(3C)
- "Doors" in SolarisTM: Lightweight RPC using File Descriptors
- Door API Details
- illumos-fuse2
- Linux Doors
- @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