Report: State of Gopher+, 2023

Published 2023-07-30

Preface

Lately, I have been getting interested in gopher+ again. I've been doing some research and reading through the spec, and trying to collect any information that I can find on the protocol. Unlike gopher classic, which is still comprehensively documented and talked about, secondary sources for gopher+ are practically non-existent on the internet. There are a few random magazine articles and educational materials in '94, but practically nothing after that point. Which makes sense I guess, since gopher declined pretty rapidly to WWW.

I wanted to do a survey of gopherspace to see if anyone is still out there, playing around with gopher+. I asked on the gopher-project mailing list but didn't get much of a response. Then I was looking at gopher and thinking about it some more, and I figured there are only 300-ish servers out there, so why not try them all and see for myself?

My message on the mailing list

So here are the statistics on gopher+ support on the public internet, July 2023.

Method

I grabbed the list of gopher hosts from Mateusz's OGUP page, which gave me 311 URLs to check.

OBSERVABLE GOPHERSPACE UNIVERSE PROJECT (OGUP)

My plan was basically to go through each server and make a simple gopher+ request, and then check the response for a valid gopher+ header. If the header existed, it would indicate that the server had a least the bare minimum implementation of gopher+.

I used this gopher request, which asks for the root gopher menu and indicates that the client supports gopher+:

And then I checked if the first byte of the response was a "+" or "-" character (which indicates success or failure in gopher+). If it was a match, I poked around the server by hand a bit more to profile the software it was running.

Results

Here are the results:

Of the 311 servers, I was able to connect to 300 of them.

Of those 300 servers, I received a gopher+ response for 41 of them.

Of those 41 servers,

See the full results below. Please forgive the awful formatting, this was originally a log file and I went in and butchered it by-hand.

see the full results

Commentary

It ended up being super easy to profile which software the servers were running.

Pygopherd

Pygopherd is one that I am intimately familiar with, since I did the work myself to upgrade it python 3 a few years ago. If you send pygopherd an invalid selector, it will respond with an error page formatted like this:

Note: I didn't keep count, but I would say that about half of the servers had an unconfigured email address like above, and half of them had filled in the details in their pygopherd config.

Pygopherd source code in Github

Example pygopherd server, gopher://gopher.quux.org

Synchronet

Synchronet is one that I had never encountered before. Thankfully, the server name and version are helpfully indicated from the root gopher menu.

It's BBS software that also includes a handy gopher frontend, I guess.

Synchronet BBS Software

Example synchronet server, gopher://centralontarioremote.com

Unfortunately, I found that synchronet responds to every single gopher+ request with exactly the same thing,

Which in gopher+ speak means "this is an empty file". I guess this was their attempt to indicate a lack of gopher+ support (Not that this makes much sense, as the whole gopher+ protocol was intentionally designed to be backwards compatible with old servers).

Bucktooth & Gophernicus

I'm aware that Bucktooth and Gophernicus (at least those two, possibly more) have a similar hack to indicate non-support to gopher+ clients.

Bucktooth: Gopher+ (non)support

These responses weren't captured in my survey because I sent a "+" character instead of a "$" character. But I think they fall into the same bucket as synchronet, and shouldn't be considered as having any *actual* gopher+ support.

Others

Even though I suspected this already, I'm disappointed to see that pygopherd is the only gopher server left out there. I was holding out hope that there would be a random gopher+ server still alive with an example +ASK query or something interesting in it. Or at least someone running the original gopherd software from UMN (I thought this was more widely used)?

Pygopherd is great as a static-file server, but its support for CGI and dynamic responses is lacking. It can't do +ASK forms or multiple +VIEWS for selectors. Which means if I want to play around with gopher+ properly (which I do), I'm going to have to write my own server. I guess this was inevitable. I'm hoping that Flask-Gopher (my own server) is easy enough to extend to support gopher+, because it would give me a flexible base to work with.

Flask-Gopher on Github

Gopher+ Clients

I'm not aware of any modern gopher clients supporting gopher+, although I haven't yet done a comprehensive search yet.

One gopher+ client that I did find is FORG from David Allen, circa 2001. It's written in a very old version of python using Tkinter.

There has been some recent work from Tom4hawk modernize it, which is how I found the repo.

FORG Gopher Browser on Github

Proxied content from gemini://mozz.us/journal/2023-07-30.gmi (external content)

Gemini request details:

Original URL
gemini://mozz.us/journal/2023-07-30.gmi
Status code
Success
Meta
text/gemini; lang=en
Proxied by
kineto

Be advised that no attempt was made to verify the remote SSL certificate.