Gemini – A new, collaboratively designed internet protocol
I see that they&#x27;ve specified both a transport protocol, to replace HTTPS, and a document format, to replace HTML.<p>BLUF: They should have just run the text&#x2F;gemini format on top of HTTPS 1.1, make a gemini --&gt; HTML formatter, and maybe a restricted subset of HTTPS, and called it a day. Replacing HTTPS is a waste of time. Also, most of the benefits of the document format could be gotten with a sane subset of HTML. There are no mandatory bad parts to HTTP or HTML.<p>I&#x27;ve seen this &quot;The Web is too complex, we need Gopher&quot; sentiment on the Fediverse a few times and it looks like the same class of thinking as &quot;C++ &#x2F; Rust is too complex, we need C.&quot;<p>They are complaining about how _bad_ parties use HTTP and HTML and concluding that _good_ people should disavow HTTP and HTML as a result. It is like refusing to drive your pickup truck because someone else&#x27;s truck has truck nuts on it.<p>But I&#x27;ve run websites with the &quot;Motherfucking website&quot; HTML style and it&#x27;s fine.<p>All the complexity of the web is opt-in. Switching my site to Gemini wouldn&#x27;t prevent, say, the New York Times from wanting a complex HTML website. All I&#x27;m doing is shooting myself in the foot to spite my enemy. The FAQ says they intend to co-exist with the web, so I&#x27;m sure they agree with me on this. They just want to lead by example. I also don&#x27;t think it&#x27;s a good example.<p>About extensibility, from Section 2.1.2 in the FAQ:<p>&quot;Gemini is designed with an acute awareness that the modern web is a
privacy disaster, and that the internet is not a safe place for
plaintext.  Things like browser fingerprinting and Etag-based
&quot;supercookies&quot; are an important cautionary tale: user tracking can and
will be snuck in via the backdoor using protocol features which were
not designed to facilitate it.  Thus, protocol designers must not only
avoid designing in tracking features (which is easy), but also assume
active malicious intent and avoid designing anything which could be
subverted to provide effective tracking.  This concern manifests as a
deliberate non-extensibility in many parts of the Gemini protocol.&quot;<p>These claims are made:<p>- Privacy violations are inherent to HTTP&#x2F;HTTPS&#x2F;HTML
- Making a protocol non-extensible is feasible<p>But if you&#x27;re specifying a completely new client and server, you could also just refuse to send and accept the ETag and cookie headers that are known to allow privacy violation.<p>And no protocol is non-extensible. They seem to think that software and ideas are controlled and owned by the first people to think of them. But if Gemini catches on, then it can be forked. This should be obvious to people working in FLOSS. I seem to recall it happened to IRC. Designed simple, forked into incompatible competing versions, the official next version is in dev hell, and now it&#x27;s also competing with XMPP and Matrix.<p>Perhaps that belief is why they chose to make a new spec instead of defining a subset of HTTP and HTML. They think that HTTP and HTML are atomic and we must not reuse any good ideas from them, they&#x27;ve been tainted with bad ideas, so we have to change everything all at once.<p>To this end they even made the status codes different from HTTP.<p>&quot;Importantly, the first digit of Gemini status
codes do not group codes into vague categories like &quot;client error&quot; and
&quot;server error&quot; as per HTTP.  Instead, the first digit alone provides
enough information for a client to determine how to handle the
response.&quot;<p>They could have just specified a subset of HTTP status codes, to make it easier to remember which codes are which. Personally I like having 4xx and 5xx separate. Maybe they were really happy to save 33% of status code bytes compared to HTTP.<p>Regarding performance, the spec says, &quot;Connections are
closed at the end of a single transaction and cannot be reused.&quot;<p>I believe there&#x27;s also no inline media, so 1 document == 1 connection == 1 request.<p>Again, this is completely possible with a sane subset of HTML and HTTP - Just write a server that can&#x27;t reuse connections, and write HTML that doesn&#x27;t have inline media. Use a linter or transpiler (from text&#x2F;gemini to HTML) to enforce that.<p>But if you _do_ reuse connections, or use something like QUIC, then you can get better performance. So they are making that impossible. Again, until someone forks it and adds it anyway.<p>I feel like I&#x27;m the crazy one because there&#x27;s clearly a few people working on this project seriously, and I&#x27;m one person writing a rambling comment. But I don&#x27;t see the point. Now I feel like I owe the world a subset of HTTP and HTML to put my money where my mouth is.