This site is now live on Geminispace

The future of the web?

Posted on 2021-02-27 22:52:48, Last edited on 2021-03-01 02:56:38, Viewed 6970 times

New Gemini server

Today, I've written a new server that presents all of the text content on this site using the new Gemini protocol. You can access the server at gemini://snowymouse.com from your favorite Gemini browser. Note that conventional web browsers like Firefox or Google Chrome will probably not support the gemini:// protocol, so you may need to download a browser.

There's still some work to do to get everything working. Gemtext does not directly support features like strikethrough, bolding, italics, etc. so some slight reformatting may be necessary for past posts. I also need to set up the server to start it up automatically (currently I have to manually start it - this is just a simple matter of setting up a service).

Also, this server does not currently serve any actual files. It's just a frontend for the database. However, I may later extend it to support serving files such as images over gemini.

What is Gemini?

I suppose the best explanation you can get is from the Project Gemini website.

In a nutshell, Gemini is a new protocol that takes all of the bullshit out of web browsing and web hosting, resulting in a totally pure web experience: an exchange of information. Nothing more. Nothing less. But most importantly, nothing more.

Popups, annoying ads, cross-site tracking, horrible looking stylesheets, really slow JavaScript, and pretty much all other major annoyances of the modern web are removed, and you don't even need a special ad blocking plugin because the whole experience simply doesn't support it.

Gemini also aims to be fairly simple. In a few hours, you can write a basic but useful Gemini server and client. They say "Life has its beauty in its simplicity" and this accurately describes Gemini. Because it's not open to be extended unlike the utter insanity of HTML and HTTP, it should (hopefully) stay this way, too.

Gemtext

Gemtext is a Gemini-specific format and uses the unofficial MIME type text/gemini when sent via Gemini, HTTP, etc. This is a simple Markdown-inspired format with support for lists, blockquotes, preformatted blocks (good for code), links, and three heading levels.

Unlike Markdown, it does not support the embedding of images. Essentially, each page is self-contained. As a result, pages load nearly instantly, and cross tracking is pretty much eliminated. That isn't to say Gemini doesn't support images, but if you want to view an image, you must specifically go to it.

It also does not support inline links. Each link must be its own line like this:

=> http://snowymouse.com   My site on the WWW!
=> gemini://snowymouse.com My site in Geminispace!
=> /                       Root directory!

=> gemini://gemini.circumlunar.space/docs/cheatsheet.gmi

You can use relative URIs and absolute URIs with/without the scheme, thus it follows the same conventions as a link would in HTML (with, again, the inability to inline it). Text after the link is optional, but it's useful if you want to describe where a link will take you.

Most of my articles are written in Markdown, so some conversion is necessary in order to get it to look correct when viewed as gemtext. I've written a converter that takes care of most of the work.

For example:

You can use the [filesystem library](https://en.cppreference.com/w/cpp/filesystem) to query files on a filesystem as well as [parse file paths](https://en.cppreference.com/w/cpp/filesystem/path).

gets converted to this in HTML:

You can use the <a href="https://en.cppreference.com/w/cpp/filesystem">filesystem library</a> to query files on a filesystem as well as <a href="https://en.cppreference.com/w/cpp/filesystem/path">parse file paths</a>.

and this in gemtext:

You can use the filesystem library[1] to query files on a filesystem as well as parse file paths[2].

=> https://en.cppreference.com/w/cpp/filesystem #1: filesystem library
=> https://en.cppreference.com/w/cpp/filesystem/path #2 parse file paths

This is sort of like linking to references, but rather than putting them at the end of the page, the links are put immediately below the paragraph so they're easy to find.

In most cases, this is fine, but some pages had to be converted by hand to gemtext, such as my "Why I usually say "no" to relicensing my GPL code" article due to how I link things.

Is it better than HTTP/HTML?

It depends. For looking at articles, news, weather, stories, poetry, tutorials, photography, etc. Gemini and Gemtext are a bit nicer to deal with than HTTP and HTML because it doesn't have all of the annoying cruft. I think this makes it a much more pleasant experience overall. So, I wouldn't say "Which is better?" but "Which is better for ____?" There are, of course, some cases where you'd want to use HTML and HTTP. The thing is, Gemini and Gemtext, by design, do not let you do a lot of things that HTTP and HTML let you do, as it's mainly intended for getting information rather than sending it, and all of the presentation is done on the client.

Here's an example: a basic form that takes multiple inputs - something extremely simple in HTML with just a few HTML tags - is not something you can accomplish with Gemtext. Gemini does support text input through the protocol (e.g. gemini://domain/page?input), but each prompt is limited to 1024 characters and one line, and you can't go back and update something once you've submitted it. This is fine for searching for things, making simple comments on things, or even playing a simple text-based adventure game, but you're not going to be writing articles like these on it, uploading images, etc. Heck, I use an HTML control panel to edit articles on here and will probably continue to do so while this site is running.

This is fine, though! Gemini is not trying to replace the World Wide Web or even HTML or HTTP. It's just trying to provide a quieter alternative to it.

Gemini also does not support cookies. However, I would argue that this turns out to be a good thing for privacy. In order for a server to properly identify a client, the client will have to provide a certificate of its own during the TLS handshake. Otherwise, besides using the client's IP address (which isn't very good for anything outside of rate limiting since multiple people and/or devices may use the same public IP), the server will not be able to associate the client with anything. The client also can choose to not share its certificate.

What should I view this site with?

Currently, I plan to keep both sites in parity with each other. Using either should be fine. I may make some pages exclusive to one format or the other, but probably only if the experience of viewing that particular page is significantly and negatively impacted. For example, extremely image-heavy content may be best served on an HTML page. There may also be some posts that may have to be significantly altered for both HTML and Gemtext formats, so making two separate posts may be necessary.

Since Gemini doesn't support inline images (after all, these are notorious for being used to track users, and a bunch of them can make a simple page take a million years to load), I've also redrawn my mouse logo by hand in ASCII (with some slight changes to the tail so it stays within 80 characters of width) and so it's probably 100x cuter now. Honestly, I'm quite proud of this one, and I assure you, this mouse will neither track you nor make your page take longer to download, slow your browser down, etc.

 _                                                           _.----__
| |                                   ,.--^^^^^^^--.,       /        \
| |                               ,.-^               ^^-., |          |   _  _
| |                              /                                    |  / \/ \
\ \                          ,.--                                    /   \    /
 \ ^-.,_                   /                                         \_   \  /
  ^^^-. \                 |  /|                                        \_  \/
       \ \_              |  | |                                  /\      \
        \_ \             / |  |                                 /  \      \
          \ ^-_        _/ /   \                                            \_
           ^-__^^^^^^^^_/      \                                             |
               ^^^^^^^^         ^^-._          _____             ________---^
                                     ^^^------>     ^^^---------->    // ||
                                                                     //  ||

If you're interested in a GUI Gemini client, there are quite a few to choose from, and I personally use Kristall. However, I am considering later writing my own Qt-based Gemini client, myself, as there is a specific featureset I'd like (zooming in/out, better integration with Qt themes, file downloads, etc.).

My overall opinion of it

The WWW in its current state kinda sucks. Regardless, I don't expect most people in the world will ever use Gemini or even be aware it exists, but I'm sure there are plenty of people with misgivings with the current state of the World Wide Web (and not just including myself), and if there's plenty of content on Gemini, then there's reason to use it!

Even so, I think most people who use Gemini will probably still continue to use the World Wide Web in its annoying, contrived state (thanks modern web browsers!). I sure will, even if I'd rather content not be served in such a stupid way.

So, overall, I think Gemini is a REALLY cool new technology, even if it'll probably only be used by a very niche group of people. Of course, as extremely unlikely as it is, it could take off as something more (regular) people use.

Edits