date = 2022-01-29
tags = ["gemini", "privacy"]
title = "The Gemini protocol"

Featured image (Image Credit: NASA)

Project Gemini is an early NASA human spacefilght program.

The Gemini protocol

is a new internet protocol that takes user privacy seriously.

I came across Gemini when I got distracted and was reading about

the Gopher protocol

. Gopher was interesting to me because I felt the modern web standards were too complicated. From the app developer's perspective, there are so many things you have to be aware of in order to have a website that uses good practices and also meets stakeholders' tastes. It is not that the web standards are bad; I believe the complexity is proportional to how powerful the web platform is. But when all I want to do is publish some tidbits on a personal website, all its complexity is simply unnecessary.

Years ago I looked at the Gopher protocol. It was quite idiosyncratic, which was understandable for such early technology. The text format was not aesthetically pleasing to my 'modern' senses. So I gave it a pass.

The Gemini protocol is a modern evolution of Gopher, called 'Souped-Up Gopher', with aim of user privacy in the age of ubiquitous user tracking. But I am more interested in how simple

the protocol spec

is. A functional Gemini server can be written in about 100 lines of Go code. I am sold.

Into Geminispace

The Gemini web is called Geminispace. Gemini sites are called capsules.

I am using two Gemini clients using and both are great. I did not bother to try others.

Lagrange desktop GUI client

is my go-to client and the experience is almost comparable to using Firefox. I am taken how polished it is, given the nicheness of the protocol. The first time I ran it, Korean texts were not rendered, but there was a helpful guide from the browser about which fonts (Noto) I needed to install. It also supports Gopher.

Amfora terminal client

when I want to browse from terminal for some reason.

Here are some interesting capsules I found:

gemini://mozz.us/

gemini://makeworld.space/

gemini://geddit.glv.one/ - Like Reddit but in Gemini

gemini://tilde.team/ - LEO, webring in Gemini

gemini://communitywiki.org

Making a Gemini calsule

The markup language used to serve over Gemini is called

Gemtext

, which resembles a stripped-down Markdown format. Because I am using

Hugo

for the blog, the content is already in Markdown format. So I thought it would be relatively easy to convert the posts into Gemtext, and that is the case for most part. The result is here:

gemini://jaeyoung.se

Here are some notes:

Lack of inline links

When compared to web, the most striking thing about Gemini is that it has no inline links. Gemtext only lets you put links on a line on their own. I am a person who uses inline links in texts very liberally. Even on Slack messages I plaster them with reference links. I tried to preserve each inline link when converting to Gemtext and the result is acceptable, but a bit awkward. If a link-heavy site like Wikis is to be converted this way, I imagine it would be too cluttered to be viewable.

I get the simplicity rationale. But because hyperlinks are such an important feature, it is what makes the web a web, I think the links are where the spec can expand more on.

TLS

In Gemini, the use of TLS is mandatory and client session/identity is also handled with TLS certificates. From technical standpoint this is great. But I am worried that this will prove a barrier to adaption because handling TLS certificates is not a general skill, even among programmers. In the company I work, only a fraction of the engineers are familiar with TLS. I considered TLS as an Ops detail.

For learning TLS basics, I recommend

TLS Mastery by Michael W Lucas

. This is the book that got me some TLS literacy after years of blindly copying and pasting openssl commands and generally being on state of confusion.

I am using

Smallstep

certificate manager and their tools to generate certificates while writing server. The CLI tool conveniently installs CA root certificates on the system keychain.

Jupyter Notebook

Since

The Jupyter Notebook

is a web-based technology, I imagine converting notebooks to Gemtext will not be simple. I tried

nbconvert's markdown support

to convert one of the notebooks, but the tables outputs are rendered with HTML tags so it is not immediately usable. It will be interesting to see tools to develop in this area.

The Future

I think Gemini will establish as a niche but prominent alternative protocol to the web.

I agree with the points made in

this blog post.

The lack of 'Content-Length' header is a bit strange. It is helpful to know how much content you expect to receive from the receiving end, if only to avoid receiving more than you have space for and crashing.

I may keep maintaining my capsule, because the tech is so simple the upkeep is minimal. I may implement dynamic/interactive content that I think is interesting. Viewership-wise it does not matter which protocol it is in, nobody reads my blog anyways.

Comments

Leave a comment