双子座到底是怎么回事,为什么我会对此感到兴奋?

2020-11-02 09:47:37

在过去的两个月左右的时间里,我一直在写关于双子座领域的一些具体话题,但我仍然没有写出关于双子座的更广泛的介绍,我对双子座做了什么,以及为什么你也应该对此感到兴奋。我们今天就去做吧!

Gemini是一种用于交换超文本文档的网络协议--一般意义上的“超文本”,而不是Web浏览器理解的超文本标记语言(HTML)。它是一个简单的网络协议,允许客户端请求超文本文档(以其自己的文档格式,getext)。从多方面来看,它是地鼠的进化,但更加现代化和流线型。

双子座非常简单。该协议使用TLS建立加密连接(使用自签名证书和豆腐而不是证书授权),并执行一个非常简单的交换:客户端发送它想要检索的URL,并以CRLF终止。服务器用一个信息行响应,该行由数字状态代码和一些附加信息(如文档的mimetype)组成,然后编写文档并关闭连接。如果需要,可以使用客户端证书进行身份验证。如果需要,用户输入是通过响应代码完成的,该代码传递提示字符串和请求用户输入,然后是第二个请求,用户的响应填充到URL的查询字符串中。那可真够受欢迎的!

$openssl s_client-Quiet-crlf\-servername drewdevault.com\-connect drewdevault.com:1965\|awk';{print";response:";$0}';Gemini://drewdevault.comresponse:20 text/uginiresponse:`火箭的ASCII艺术旁边";Drew DeVault";在样式化字体响应中:/\响应:||_\_\__\\//_||_/||_响应:/||\|。\__\_/__\\/\/||\_/_\Y/\__\||\|\__\响应:/:||:\|`\|\|\/\__/\/|`\__/\//__||/|_||响应:|:||:|/_/__|\_>;\/\_//_/\_>;\_/(_/_/|_/__|响应:|/||\|\/\/响应:**响应:**响应:`[...]。

我对Web浏览器的鄙视是有据可查的:1.Web浏览器非常复杂,任何试图构建新浏览器的尝试都将是一项艰巨的任务。如果成功完成该实现,即使有可能,也必然会产生Lovecraftian式的混乱:无法维护,充满安全漏洞,占用GB的RAM和编译时间数小时。考虑到所有实现了足够有用的web标准子集的当代web浏览器都是蠢货,我们应该做什么呢?

这个问题是无法解决的。我们不可能在没有所有这些问题的情况下拥有“网络”。但是我们可以拥有一些不同的东西,比如双子座。双子座并没有解决网络的所有问题,但它解决了部分使用案例--比网络做得更好,这让我很兴奋。我想丢弃双子座做得更好的网络部分,并探索其他解决方案来解决网络上剩下的任何值得保留的东西(提示:大部分都不是)。

非常简单。客户端或服务器实现可以由一个人在一两个下午的时间内从头开始编写。一个新的网络浏览器可能需要数亿名工程师数百万小时才能完成。

它是不可扩展的。双子座被设计成在不突破向后兼容性的情况下很难扩展,几乎所有邮件列表上的扩展建议最终都被否决了。这是一件好事:可扩展性通常不是一个好主意。扩展最终会导致更复杂的情况,如果不是因为双子座对扩展不屑一顾,双子座可能会遭受与网络相同的命运。

它对文档格式固执己见。没有内联链接(每个链接都在自己的行上),没有格式,也没有内联图像。双子座严格分离了内容和展示的责任。提供内容是服务器的独家角色,提供演示文稿是客户端的独家角色。没有样式表,作者对如何呈现其内容几乎没有发言权。作者仍然可以在这些约束中表达自己-就像其他任何约束一样-但它允许客户更简单,更多地充当用户代理,而不是供应商代理。

有些人认为,我们应该拥有的是“网络,但少一些”,即网络标准的“合理”子集。我不同意(首先,我不认为这些标准中有一个“合理”的子集),但我会把这一点留到另一篇博客文章中去说。双子座是一种新的媒介,它与网络不同。任何检查它的人都应该为此做好准备,并开放地在它的限制下工作。限制会滋生创造力!

就我而言,我一直在做一些双子座的项目。首先,这个博客现在可以在双子座上使用,我已经开始为它写一些双子座独家的内容。我还写了一些软件,欢迎您使用:

Gmni和gmnlm是我的Gemini客户端软件套件,都是用C11编写的,只依赖于类似POSIX的系统和OpenSSL。Libgmni是一个接口简单的通用双子客户端库。Gmni是一个类似acURL的命令行工具,用于执行Gemini请求。最后,gmnlm是一个具有丰富功能集的行模式浏览器。这些工具加起来不到4000行代码,其中大约1600行是cURL供应商提供的URL解析器。

Gmnisrv是一个高性能的Gemini服务器,也是用C11为带有OpenSSL的POSIX系统编写的。它支持零配置TLS、CGI脚本、自动索引、正则表达式路由和URL重写,我还计划在1.0中做更多事情。它大约有6,700条线路,其中相同的1,600条线路是从cURL提供的,另外2,800条线路是由Fabrice Bellard的Quickjs regex实现提供的。

Kineto是一个HTTP-to-Gminigateway,在~adnano的Go-Gemini库的帮助下实现为单个GO文件(不超过500行)。如果你想浏览的话,我的双子座博客可以通过这个门户网站访问。

那就跳进水里去探索吧!在您的服务器上安装gmnisrv,并为您自己设置一个Gemini空间。阅读Capcom的摘要。写一些你自己的软件吧!

⇒这篇文章也可以在双子座上找到。对我的一篇帖子有什么评论吗?通过发送电子邮件至~sircmpwn/[email protected][邮件列表礼仪],在我的公共收件箱中开始讨论