Too much magic
--------------

I just wanted to quickly chime in and say that (for what it's worth) I
completely agree with solderpunk's ideas [1-3] for a possible new
protocol and assessment of where the current one falls short.  Not
that I want the existing protocol to go away (definitely not!), but
it's fun to think about what things would be like in the best of all
possible universes and it's useful to try to make explicit some of the
problems with the current one.

One of the things that I take away from these posts is that while the
current protocol seems simple, part of the reason for this is that it
relies on clients doing magic: i.e. performing inference to make
educated guesses about what's being served, whether it be the MIME
type of the content or character encodings.  While I'm new to gopher,
I'm pretty old to programming, and I've always regarded even a little
bit of magic to be too much magic when it comes to parsing input.
Magic never works deterministically and when it inevitably fails it
can be very hard to work out why.  Part of the reason for this is that
the better the inference code is (i.e. the more corner cases it
handles) the harder it becomes to reason about, so we always wind up
with a trade-off.  And at the end of the day we have software whose
parsing behaviour is not defined by the input format, which is a bad
thing for everybody. (See LANGSEC [4].)

I don't think it was mentioned in solderpunk's posts, but for gopher
this isn't confined to the client software either.  The fact that the
server doesn't know what type of selector the client is expecting to
see makes it impossible to send back sensible error messages when the
selector isn't found.  (Again, not without magic on either the client
or server side.)  Being able to include a MIME type tag in the
response would immediately solve this too.

So: while I hope and am sure that RFC 1436 will never go away, I'm
happy about the direction these thought experiments are taking.
I love magic, just not in my parsers if possible. :-)

--
[1]: gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/protocol-pondering-intensifies.txt
[2]: gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/protocol-pondering-intensifies-ii.txt
[3]: gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/protocol-pondering-intensifies-iii.txt
[4]: http://langsec.org