[tech] [spec] On extending gemini

Sean Conner sean at conman.org
Tue Feb 23 00:16:26 GMT 2021
It was thus said that the Great Drew DeVault once stated:
> This
> historical revisionism about how Gemini is a platform for Gophers to
> feed their creativity into expanding upon Gopher's limitations is
> ridiculous.  

  Michael is correct---you are not.  Gemini *is* an expansion of gopher, not
a reimagining of the web.  Citing primary sources here (Solderpunk himself):

gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/pondering-whats-inbetween-gopher-and-the-web.txt

	It's no secret, of course, that I love gopher.  Some of my reasons
	are outlined in previous writings[2].  And it's neither a secret
	that I hate the web, or at least it's modern incarnation.  Both of
	these things can be, and are, true while I still believe that Gopher
	is not perfect and has shortcomings, and there are things about the
	web experience to miss when one surfs on port 70.  So lately I've
	been thinking about "the space inbetween", about hypothetical dream
	protocols which are more than gopher but less than HTTP.

	...

	As a first contribution to this line of thinking, I have come up
	with a protocol which basically consists of three small changes to
	gopher which address what I *think* I currently believe are its
	three greatest shortcomings.

	The first change is that TLS encryption of all connections is
	mandatory.  No two port cleartext/cyphertext distinction like HTTP
	and HTTPS, no upgrade from cleartext using STARTTLS, just secure
	connections from the get go and that's it. ...

	The second change is that the standard non-directory item type is
	not a plaintext file, but a text file in some very lightweight,
	human-readable markup language which supports inline linking to
	other resources.  ...

	The third and final change is the introduction of an item-type which
	means "interpret this selector and interact with it in some way
	determined by its schema".  The 'h' item-type already plays this
	role for many more advanced clients, if you put a "URL:" in front of
	the selector, but this is IMHO an ugly hack which really spoils the
	clean semantics of the gopher protocol.  And item-type of 'h' is
	supposed to and *should* mean "this is a HTML file", and item-types
	shouldn't do double duty as it defeats the point of them.

gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/why-gopher-needs-crypto.txt

	I'm talking about the fact that my hypothetical new protocol
	operated strictly over TLS connections - plaintext straight up
	wasn't an option.  I am of the opinion that the widespread lack of
	encryption in gopherspace today is the protocol's biggest
	shortcoming, and I actually suspect that this point alone
	discourages some folks who would otherwise be on board from adopting
	it.  But others, including Bongusta overlord Logout, do not see the
	need, so here's my attempt at a justification.

	...

	The web is surely a dumpster fire, but let's not pretend gopher is
	perfect and cannot be improved.  Those of us fleeing the web have
	just fallen back here because it's about the only off-the-shelf
	vaguely web-like thing that there is to fall back to.  Some of us
	may be truly comfy here, and that's absolutely fine.  Increasingly I
	think I'd like to use gopher as a temporary base of operations to
	build something even better.

gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/more-on-gopher-and-crypto.txt

	My recent post[1] about "why gopher needs crypto" received a very
	well-considered response[2] over at The Boston Diaries.  The author
	(do I call you "the conman"?) rightly points out that the true
	challenge is not in actually conducting a gopher request/response
	transaction over a TLS connection, which in relatively trivial and
	has been done before.  Rather, the core difficulty lies in the
	absence of any way to represent in a type-1 response that a
	particular gopher resource is accessible via TLS.

	...

	The conman suggests that creating a new protocol is to risk that we
	"start falling into HTTP territory".  This is of course a very real
	risk, but I also very strongly believe that it is perfectly
	avoidable if we are sufficiently determined from day one to avoid
	it.  To this end, I hope to think and write (and read, if anybody
	wants to join in!) more in the future not just about the
	shortcomings of gopher but very explicitly about what is right and
	what is wrong about HTTP and HTML.  It's vitally important to
	identify precisely what features of the web stack facilitated the
	current state of affairs if we want to avoid the same thing
	happening again.

gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/the-soul-of-gopher.txt

	What is the "true spirit of gopher"?  Its "heart and soul", the
	deep, conceptual commitment which distinguishes it from other
	protocols, in particular from the web?

	...

	Now that we've uncovered the true spirit of gopher, the natural
	question, for those participating in the on-going discussions about
	new gopher-inspired protocols, is whether or not this idea is one
	that the gopher community really cherishes and which should be
	preserved in the Ultimate New Protocol of Truth and Glory.

	...

	... There's plenty of evidence out there that a lot of Gopher
	enthusiasts don't actually *want* a protocol that divides sharply
	between navigation and content.  They just want to be able to serve
	plain-text with hyperlinks anywhere they like, via a bare bones
	protocol that doesn't support tracking and other unpleasantries. 
	Something like "HTML with only the <a href> tag, over HTTP/0.1".  I
	think that's all *I* want.

gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/protocol-pondering-intensifies-ii.txt

	In the previous post in this series[1] I compared request formats
	for gopher and HTTP and thought a bit about what a good anonymous
	document system actually needs.  I ended up deciding that the answer
	was nothing more than gopher already provides.  In this post I'll
	continue that discussion, focussing instead on the response format.

	...

	This protocol is not as simple as gopher, but I would argue its
	power to weight ratio is substantially greater.  ...

gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/protocol-pondering-intensifies-iii.txt


	A standard gopher menu line looks like this:

	...

	An obvious update which could be made here is to take advantage of
	the fact that between now and gopher was first invented, URLs have
	been invented!  We don't need to specify the selector (path), host
	and port separately, we have a standard way to build that into one
	string, and every modern programming language has libraries for
	parsing/buiding them. ...

gopher://zaibatsu.circumlunar.space/0/~solderpunk/gemini/cold-blanketry.txt

	The Gemini project has attracted more attention in a short time
	frame than I expected, and on the whole the project is moving very
	fast!  It's quickly becoming apparent that not everybody is going to
	agree with everybody else about what the best path forward for the
	project is.  If things keep moving this fast, it's going to be very
	hard to keep building and maintaining consensus among the entire
	community.

	I understand that this seems kind of sad and kind of scary, but I
	think (and surely hope!) that it will be okay.

	The worst case scenario as I see it is that the Gemini project
	quickly descends into internal arguments, nobody can agree on
	anything and the whole thing fizzles out in a week.  If that
	happens, we've all still got gopher, which isn't going anywhere. ...

  If you have a rebuttle, fine, but "citation needed."

> The purpose of Gemini has always been crystal clear. 

  Yes, a new gopher.  Ahd simplicity of implementation for both client and
server.

> The
> spec has received only minor clarifications and has always come with the
> following promises:

  No.  The spec has received *major* changes and clarifications since it was
first written.  I've mentioned in other messages the differences from then
and now.  But saying it has only ever had "minor clarifications" is history
revisionism.

  -spc


Archive home | About this archive