Visiting another world
The world wide web is truly a wondrous invention, but it is not without flaws. There are massive privacy woes that stem from its standards and implementation; it is also so fiendishly complex that few can truly grok all of its expanse. That complexity affords enormous flexibility, for good or ill. Those who are looking for a simpler way to exchange information—or hearken back to web prehistory—may find the Gemini project worth a look.
At its core, Gemini provides a simple, text-based way to present
information for others on the internet. It is positioned in between Gopher, from
before the advent of the web, and the HTTP and HTML of the web that fairly quickly
supplanted Gopher for most people. Gemini "explores the space inbetween gopher
and the web, striving to address (perceived) limitations of one while
avoiding the (undeniable) pitfalls of the other
". The intent is
that Gemini will coexist with the other two; Gopher has seen something of a
resurgence of late, while the web just keeps growing, of course.
The goal of Gopher, which Gemini has also adopted, is to provide the means to create an interconnected library of information. It is similar to the concept of hypertext, which underlies Hypertext Transfer Protocol (HTTP) and Hypertext Markup Language (HTML), but far less flexible and malleable. In particular, Gemini lacks any support for inline images, which obviously has some downsides in terms of visualization, but provides a number of benefits, not least removing the possibility of image-based advertising.
Gemini is built on a foundation that one network request for a resource simply returns the entire resource or an error. There are no multi-request documents, where various pieces are collected up from (potentially) multiple servers a la HTML. Each Gemini document (a .gmi or .gemini file) is a collection of text in a Markdown-derived markup language, along with links to other resources, but each appears as the only item on its own line. Other resources can be returned, identified by their Multipurpose Internet Mail Extension (MIME) media type, which clients can display or defer to another type of application depending on the type.
One could imagine stripping down the web to a tiny subset of its features, instead of coming up with something entirely new, but there are problems with that approach as the Gemini FAQ describes:
Of course, this is possible. "The Gemini experience" is roughly equivalent to HTTP where the only request header is "Host" and the only response header is "Content-type" and HTML where the only tags are <p>, <pre>, <a>, <h1> through <h3>, <ul> and <li> and <blockquote> - and the https://gemini.circumlunar.space website offers pretty much this experience. We know it can be done.
The problem is that deciding upon a strictly limited subset of HTTP and HTML, slapping a label on it and calling it a day would do almost nothing to create a clearly demarcated space where people can go to consume only that kind of content in only that kind of way. It's impossible to know in advance whether what's on the other side of a https:// URL will be within the subset or outside it.
Beyond that, it is difficult to create a browser that only supports the limited subset and ignores all of the other content; a Gemini client is much easier to write. Even if the limited browser existed, it would be hard to know which web sites support it. Gemini has a clear philosophical mission that is best served by going its own way:
Experience
In order to take a peek into Geminispace, I grabbed the AV-98 client that was created by the founder of Gemini, "Solderpunk". AV-98 is a 1500-line, terminal-based, Python program with no required dependencies beyond the Python standard library. When run, it gives a command prompt; the AV-98 "lightning introduction" suggested "go gemini.circumlunar.space", so that's what I did. I was greeted with the project's home page in Geminispace, which is the counterpart to the web-based home page linked above.
It gives a terse bulleted list for a project overview, along with several other categories (Resources, Web proxies, Search engines, Geminispace aggregators, etc.), each of which had entries preceded by a number. Those numbers can be typed to follow that link, thus retrieve the document described. For example, following the "Users with Gemini content on this server" to the entry for "solderpunk", gives the following document:
Solderpunk's Gemini capsule About Howdy, I'm Solderpunk - founder and de facto BDFL of the Gemini protocol and the circumlunar.space universe, Gopher phlogger and general grumpy digitial malcontent. This is where I "eat my own dogfood", as they say, with respect to Gemini. Contact • Email: solderpunk@posteo.net • XMPP: solderpunk@xmpp.circumlunar.space • Fediverse: @solderpunktilde.zone Gemlogs (Gemini logs) [1] My gemlog - verbose ramblings [2] My "pikkulog" - shorter and less focussed Non-Gemini presence Before the arrival of Gemini, my main online presence was my gopherhole at the Mare Tranquilitatis People's Circumlunar Zaibatsu. Nowadays I cross-post most of my long form content to both my gemlog and my phlog, so people can consume it via whichever protocol they prefer. But there's three years of pre-Gemini content available only via Gopher - check it out! [3] My gopherhole at the Zaibatsu [4] My minimal website at the Circumlunar web outpost
From that document, entering a "1" leads to the gemlog, which contains a list of post titles and dates, each with their own number that can be used to read more. Incidentally, the "phlog" Solderpunk referred to is a Gopher log, which is the analogue to the gemlog in Gopherspace. The "Non-Gemini presence" section of Solderpunk's home page links to a Gopher document at "gopher://zaibatsu.circumlunar.space/1/~solderpunk/" and a web page, which will open an appropriate browser (if available) when followed. It is, obviously, an intensely textual experience.
Using Gemini feels like you have entered a strange, new world—to a certain extent, that's clearly true. But for those of us who are sufficiently old, it is highly reminiscent of various previous worlds, such as bulletin board systems (BBSes), Archie, Veronica, and, of course, Gopher itself. Beyond that, it might also remind one of text-based adventures, multi-user dungeons (MUDs), and so on. It is, thus, no real surprise that many Gemini and Gopher participants are retrocomputing enthusiasts of various sorts as well.
Protocol
While the Gemini
specification describes an almost trivial request-response protocol,
its requirement for TLS connections might well be unexpected. TLS is, of
course, far from trivial, but it does provide encryption for more secure
communication. TLS 1.2 is still grudgingly supported, since OpenSSL is the
only major library with good TLS 1.3 support, as the best
practices document points out: "requiring TLS 1.3 or higher
would discourage the use of libraries like LibreSSL or BearSSL, which
otherwise have much to recommend them over OpenSSL
". The spec makes
it clear that TLS 1.2 support will be phased out when that situation changes.
TLS can also be used to authenticate remote sites, though the recommended "trust on first use" (TOFU) model blunts that ability somewhat. TOFU means that whatever certificate a remote site presents the first time it is visited is accepted and stored away. If said certificate changes before its expiration date on a subsequent visit, the user is supposed to be alerted to that fact. That TOFU acceptance explicitly extends to self-signed certificates, which are considered first-class citizens by the spec. Clients can choose to go a different route, though; for example, AV-98 has modes for both TOFU and certificate validation using certificate authorities (CAs).
Gemini uses uniform resource identifiers (URIs) with the "gemini" scheme. URIs are closely related to the URLs used by the web, a superset in fact; the URI of the Gemini home page is, thus: "gemini://gemini.circumlunar.space/". The URI for the page shown above is: "gemini://gemini.circumlunar.space/users/solderpunk/".
A Gemini request is made by connecting to the server (on port 1965 by default), successfully negotiating a TLS connection, then sending a URI, followed by a carriage return and linefeed (CRLF). The response is a two-digit status code, a space character, a "meta" field of up to 1024 bytes, and a CRLF. The contents of the meta field are status-code-dependent. For success codes (those starting with a "2", so 2x), the meta field is a MIME media type that describes the type of the response, which directly follows the CRLF as the response body. The MIME "charset" parameter can be used to specify an encoding other than the UTF-8 default for the response body, but that is mainly meant for legacy documents; everything else in requests and responses is always in UTF-8.
The server closes the connection after it sends a response; the client can determine whether the response body is complete based on whether the TLS connection has been cleanly shut down or not. There are a few other status codes beyond the 2x success codes, including 4x and 5x error codes (temporary and permanent, respectively), 3x redirect, and 1x input required; the latter is how interactive Gemini applications prompt for user input (e.g. search terms). Beyond that, the 6x codes request a client TLS certificate (or indicate that the one provided was rejected). Using client certificates is a way to restrict access to a resource or to voluntarily establish a server-side session without requiring passwords, cookies, or the like.
Another interesting piece of the protocol is that it is explicitly designed to be non-extensible. There is no version number in the protocol, and the response layout was carefully constructed to make extending it hard:
As one might guess, there are no plans to smoothly upgrade to a "better" protocol down the road, so a version number was left out on purpose. That may strike folks as shortsighted or unwise, but Solderpunk and crew have looked at the history of Gopher and concluded that non-extensibility is the right path for Gemini:
Wrapping up
Geminispace is not for everyone, but it is an interesting niche. The goal that servers and clients can be written in a weekend project is certainly laudable—and, seemingly, doable. There is a small but growing community, so it is easy to have an impact with a new Gemini project of some sort. That has not been true of the web for quite some time at this point.
The name "Gemini" comes from the US space program. Gemini was the project in between Project Mercury, which put US astronauts into space for the first time in the early 1960s, and Apollo, which put the first (and so far only) humans on the moon. The NASA Gemini project bridged the gap between Mercury's proof-of-concept spacecraft and Apollo's moon-landing craft in an analogous way to how the Gemini protocol fits between Gopher and the web. Overloading the Gemini name, though, does make it somewhat difficult to search for information on the non-space project—at least on the web.
To get started exploring, one can start by getting a client program or by using a web proxy, such as the one at Mozz.us. In either case, visiting the Gemini home page (Mozz.us proxy link) gives a bit of a different view than the HTML version linked above; other links can be followed from there. There are search engines, Gemini Universal Search (GUS) and Houston, though the results can be a little maddening to work with, Gemini mirrors of web resources (e.g. CNN, Wikipedia), Gemini documentation, and more. It is quite possible to start exploring and get lost in a maze of twisty passages, all different.
In the final analysis, one's interest level in Gemini is likely to depend on whether the current web is meeting your needs—or simply irritating the heck out of you. It is also dependent on the kinds of content available on Gemini and whether it appeals or not. A certain level of curmudgeonliness and/or tendency toward neo-Luddism may cause one to lean toward Gemini as well. None of that is meant to be pejorative, as it can certainly be self-applied; in truth, Gemini seems like something rather fun to mess with when time permits.
Posted Feb 10, 2021 18:36 UTC (Wed)
by sumanah (guest, #59891)
[Link]
Posted Feb 11, 2021 3:26 UTC (Thu)
by intelfx (subscriber, #130118)
[Link]
Posted Feb 11, 2021 7:27 UTC (Thu)
by erwaelde (subscriber, #34976)
[Link] (1 responses)
There was a talk at FOSDEM 2021 about it:
Erich
Posted Feb 11, 2021 10:06 UTC (Thu)
by dragonquest (subscriber, #131210)
[Link]
Posted Feb 11, 2021 10:31 UTC (Thu)
by eru (subscriber, #2753)
[Link] (5 responses)
Posted Feb 11, 2021 13:51 UTC (Thu)
by ratfactor (guest, #132367)
[Link]
Also re: images - they may not display inline, but it's perfectly fine to link to and deliver image files in Gemini, so pictures can still accompany an article.
Posted Feb 11, 2021 15:49 UTC (Thu)
by yann.morin.1998 (guest, #54333)
[Link] (3 responses)
That was tried back then; it did not work:
https://en.wikipedia.org/wiki/Wireless_Application_Protocol
Regards,
Posted Feb 11, 2021 21:39 UTC (Thu)
by grawity (subscriber, #80596)
[Link]
Posted Feb 12, 2021 10:12 UTC (Fri)
by eru (subscriber, #2753)
[Link]
Posted Feb 18, 2021 6:26 UTC (Thu)
by ksandstr (guest, #60862)
[Link]
This made sense when WAP was competing with said operators' own SMS-based weather services. And, honestly, good riddance to both.
Thanks for the explanation!
Visiting another world
Visiting another world
I have joined gemini space a few months ago. For me it is a good fit, ymmv.
https://www.fosdem.org/2021/schedule/event/retro_gemini/
Visiting another world
Visiting another world
Visiting another world
Visiting another world
Yann E. MORIN.
I think I remember how the early black-and-white WAP websites slowly moved to "WAP 2.0" (which was just XHTML)...
Visiting another world
Visiting another world
Visiting another world