Remembering…

Clacks Overhead

CW: Mentions of death; suicide.

Something which very recently came back into my mind, and only because a recent update on my home Mastodon instance of glitch.social interfered with its normal operation for a single page of the site, is the X-Clacks-Overhead HTTP header. For those not familiar, X-Clacks-Overhead is a (non‐standard) means of commemorating the departed through a tiny piece of extra information sent alongside internet responses from servers. The name and design of this header comes from Terry Pratchett's Discworld series, and you can read more about it here.

X-Clacks-Overhead has special significance to my community on the fediverse, as instance admins have used it to commemorate Natalie Nguyen (aka @tipsytentacle), one of our own who lost her life to suicide last November. It's a very sad story with a lot of accompanying hurt and trauma that I'm not going to go into here, but suffice to say that the X-Clacks-Overhead has been our way of preserving her memory, as we knew her and as she wished to be known.

The X-Clacks-Overhead, as an HTTP header, is designed to be completely unobtrusive, invisible to people who don't know where or how to look for it there. For example, you might not be aware that websites such as mozilla.org and archiveofourown.com serve X-Clacks-Overhead headers with every webpage they serve. They do, and you can see them with browser extensions like this one for Firefox and this one for Chrome.

However, sometimes we might want to commemorate our loved ones in a more visible way. On the fediverse in particular, we might want to make our Clacks overheads visible through the same JSON(-LD) tools used to process our ordinary content. Indeed, we might want to let users (and not just admins) generate overheads of their own.

And so, because I couldn't find any reference or existing best‐practices for doing this online (it is admittedly difficult to web‐search), I'm writing this document as a casual specification for a single new datatype and a single new property for describing Clacks overheads in RDF—and, by extension, protocols like ActivityPub.

The base URI for these definitions is tag:gnuterrypratchett.com,2015-03-12:. (Note that I do not control this domain. But using a personal domain for something as meaningful as this didn't seem prudent, and gnuterrypratchett.com is arguably the canonical website on the subject.) In this document, I will represent this URI using the prefix clacks:.

The datatype being introduced is clacks:gnu, which is a restriction on xsd:string via the following pattern and with the whiteSpace facet set to collapse:

GNU\s.+

That is, clacks:gnu must be a string which begins with the characters "GNU", followed by a space, followed by one or more characters, with sequences of whitespace collapsed to a single space character prior to processing.

The property being introduced is clacks:overhead, which must have exclusively (but potentially multiple) clacks:gnu values.

A sample JSON-LD object with a clacks:overhead is:

{
  "@context": {
    "clacks": "tag:gnuterrypratchett.com,2015-03-12:",
    "overhead": {
      "@id": "clacks:overhead",
      "@type": "clacks:gnu"
    }
  },
  "overhead": "GNU John Dearheart"
}

Just like with X-Clacks-Overhead, clacks:overhead will likely be ignored silently by any unrecognizing servers or clients. However, implementations which recognize this property should preserve it as they federate our objects evermore out into the cybre.