Prosody开发人员如何度过2020年

2021-01-11 17:33:14

这里没有人完全知道2020年将会是什么!然而,尽管有流行病和封锁,我们仍继续致力于Prosody。这篇文章总结了该项目的运作方式以及过去一年的发展。

在我们开始之前,有个简短的说明:Prosody是一个独立的开源项目,之所以存在,只是因为开发人员有幸能够从事此工作。当前有几个核心团队成员正在寻找自由职业者。如果您有需要Prosody专家的项目,请查看此帖子的底部以获取更多详细信息!

Prosody不会以任何方式“打电话回家”,这意味着我们对有多少人正在使用Prosody没有足够的了解。但是,有些指标可以用来至少查看项目的增长。

多年前,大约在2014年,我正在填写一张表格,询问该项目有多少用户。我经过漫长而艰苦的思考,但不知道如何衡量,我只凭直觉就写下了“ 500”的估算值。仅仅几周后,我得知XMPP天文台已经看到超过2200个正在运行Prosody的域提交了,由于大多数部署不太可能提交给xmpp.net,因此我的估计显然很遥远。这些天来,我有很大的机会来估计我们的用户群。它有助于我们知道人在外面!

Shodan是一种有用的工具。这个项目扫描整个互联网,只是看它能找到什么,并记录结果。学者和安全研究人员经常使用这个免费帐户,任何人都可以使用一个免费帐户对收集到的数据进行简单查询。

2017年对Shodan的搜索发现了近7000个Prosody部署。 8个月后,相同的搜索结果返回了16000多个。今天,我们拥有52000多个Prosody服务器!并且这仅统计使用端口5269且可访问Internet的实例。这些数字中还没有包括许多Prosody的私有/内部部署。不幸的是,我们并没有在2019年发布报告,但这是我们之前运行的报告的图表:

Shodan报告在端口5269上总共有超过85000个联合XMPP服务器,基于此,Prosody构成了公共XMPP网络的44%。那真是一项成就!

通过Debian的“人气竞赛”服务,可以轻松了解Prosody部署的一个领域。这是Debian服务器管理员可以选择选择的自动调查。它匿名向Debian报告已安装和正在使用哪些软件包。尽管它仅反映了Debian安装的一小部分,但查看趋势还是很有用的。

尽管我们不确定,但我们怀疑这是由对自托管视频会议软件Jitsi Meet的兴趣激增引起的。 Jitsi Meet与Prosody集成,后者用于增强视频会议的身份验证,信令和聊天功能。 Jitsi的Videobridge组件处理媒体路由。他们在一起构成了一个功能强大且灵活的通信系统,当人们对远程工作进行大规模调整而在线会议取代了实际会议时,今年的兴趣激增就不足为奇了。

在2020年(查看开发分支),我们添加了597个提交,更改了191个文件。所做的更改添加了9872行代码,并删除了3637行代码。

新生产线的很大一部分都在我们的单元测试和集成测试中(2200条生产线,约占22%),在过去的几年中,我们一直在努力扩展。

如果您使用Prosody,您就会知道我们非常重视模块化和可扩展性。无论是与其他系统集成还是疯狂的实验,我们都希望尽可能轻松地为Prosody开发插件。

允许Prosody服务器作为另一个XMPP服务器的(XEP-0114)外部组件运行。

2020年,我们在社区存储库中发布了37个新模块,来自19个贡献者的499个提交。他们一起添加了10,000行以上的代码(并删除了728行)。这是我们自2018年以来最活跃的一年!

在Prosody开发团队之外,最活跃的贡献者是Seve,他在今年也做出了首次贡献,总共增加了四个新模块。欢迎加入!

但是最重​​要的部分是……我们一直在努力开发哪些功能?所有这些东西都计划在0.12版本中发布(稍后会有更多介绍)。

我们一直在进一步完善插件安装程序,并为其建立基础架构。这是JoãoDuarte的Google Summer of Code项目。它利用Lua软件包管理器LuaRocks来下载,安装和管理社区模块。

尽管安装程序已于2019年完成,但要使其能够普遍使用,我们还必须确保社区存储库中的每个模块都可以由我们的服务器打包并以自动化方式提供服务。我们现在有这项工作。

telnet控制台是Prosody最好的功能之一,我们一直在努力开发Prosody。 prosodyctl shell的早期版本已经可以在树干夜间版本中试用。

使用prosodyctl可使我们更轻松地支持高级功能,例如行编辑和历史记录(以前是使用第三方实用程序rlwrap可获得的)。它还允许一些更丰富的UI,并且在共享服务器上更安全(它使用unix套接字而不是TCP)。

由于Prosody需要以异步方式解析特殊的DNS记录类型(例如SRVrecord),因此内置的操作系统API通常是不够的。

长期以来,我们一直在使用采用的库(简称为“ dns.lua”)并结合我们自己的异步包装器。尽管它并不可怕,但是它仍然存在一些问题,尤其是在一些不常见的环境中。它还不支持许多高级功能,例如DNSSEC。

现在,我们要迁移到libunbound,这是unboundproject的一部分。这是领先的DNS实施方案之一,将是对我们当前DNS库的重大改进。要进行尝试,您可以简单地安装luaunbound(已经在luacks,Debian测试,AUR和其他工具中提供了-如果还没有,请戳一下您的发行人!)。

我们并没有开始编写HTTP服务器,但是最终还是有了一个结果!最初是为了使我们可以原生支持BOSH(基于HTTP的XMPP)客户端,它逐渐支持Websockets,现在各种模块都提供了HTTP API进行集成在Prosody和其他系统之间。

一个大问题是,原始实现仅设计用于少量数据。自从XEP-0363被广泛采用以来,人们现在希望能够使用Prosody的internalHTTP服务器上传文件,图片和视频。我们有适当的限制来防止拒绝服务攻击,但这些限制可以防止从受信任的用户上传大量文件。

我们在支持“流上传”方面做了一些工作,可以将传入数据直接保存到磁盘而不是RAM中。这意味着在不打开服务器来增加RAM使用率和拒绝服务攻击的情况下,增加文件上传限制是安全的。

不过,总的来说,我们建议在生产或高流量部署中使用真实的外部HTTP服务器(使用mod_http_upload_external)。

密码是当今在XMPP中对服务器进行身份验证的基本方法。 XMPP在这方面非常擅长,它采用了强大的标准身份验证机制,例如SCRAM,远远早于行业其他机构。但是,其他行业在许多地方也正在远离密码。我们的目标也是也要跟上这一步。并不是说我们会大量废弃密码,而是使提供替代方法更加容易。

Prosody实际上已经具有许多非密码身份验证模块,例如mod_auth_oauthbearer(OAuth2令牌),mod_auth_ccert(客户端证书)和mod_auth_token(基于HMAC的令牌)。但是大多数模块都有局限性,并且没有很好地集成(例如,您可以将Prosody设置为接受密码,也可以将其设置为接受令牌,但是您不能同时提供两种方法。

一个重要的相关方面是授权。在大多数系统中,通过令牌进行身份验证还提供了对帐户的有限访问权限(例如,如果密码与帐户相关联,则不应允许使用令牌登录的会话重置密码)。

我们一直在做两件事。首先,一个内置的授权系统(比当前的admins配置选项更灵活),其中的用户和会话可以与特定的权限和角色相关联。

其次,我们使用此授权层为OAuth2样式的身份验证和授权添加内置支持。

出于多种原因,这令人兴奋。例如,它将允许专门的客户端请求和接收(在用户授予权限时)受限的帐户访问权限,而无需提供密码。一些示例场景可能是:

允许第三方服务通过您的帐户发送消息,但不访问您的联系人或消息历史记录

可以授予专门的客户端访问特定类型的传入消息的权限。例如,使用您的XMPP帐户与远程玩家进行交流但无法阅读您的IM消息的国际象棋游戏。

我们现在仍在研究细节,但可以预期的是,其中某些功能可能需要XMPP协议的扩展,或者可能需要扩展。一旦有了一些实施经验,我们将标准化诸如XEP的扩展。这样,我们可以为每个XMPP客户端不需要密码且不会自动获得对您帐户的完全访问权限的世界打开大门。

以上所有工作已在我们的树干分支中进行(顺便说一句,nightlybuilds可用!)。但是,我们还通过错误修复来维护我们的0.11稳定分支。

2020年,我们对0.11分支进行了98次提交,并发布了4个版本。最新版本是0.11.7,即将推出0.11.8。

我们还有另外两个分支开放-0.9(旧的旧稳定版)和0.10(旧的稳定版)。我们有一个软性政策,可以在分支机构发布活跃的Debian版本时继续为其提供支持。 Debian稳定版位于0.11.x上,而先前的Debian发行版(拉伸)位于0.9.x上,并于7月停止接收来自核心Debian团队的安全更新。因此,我们不久将正式弃用这些分支。

到2020年,我们将大量注意力投入到帮助增加XMPP的采用并帮助其吸引新用户的角度。这包括启动我们的姊妹项目Snikketat FOSDEM,以及将Snikket基于邀请的注册反向移植到通用Prosodydeployments。

我们目前正在努力开发Prosody的下一个主要版本。完善所有新功能并对其进行充分的测试和记录是一项艰巨的工作。在未来的几个月中,我们很可能会开始使用Betaor版本。

非常感谢Prosody干线每晚构建的所有测试人员,他们提供了宝贵的反馈和部署经验。

韵律已经积极发展了十多年。 在这段时间里,我们一直致力于使核心项目不受任何商业影响或活动的影响。 我们认为,这有助于使项目始终专注于社区的需求,而不是仅仅关注有钱人的需求:) 也就是说,我们还需要支付账单,以便我们可以继续从事Prosody。 目前,开发团队的两名成员可以全职或兼职地从事任何规模的项目。 我们非常喜欢与Prosody / XMPP相关的项目,并且尽可能使用开源。 无论您是想雇用我们将Prosody与您的应用程序集成,查看您的体系结构还是在Prosody本身中开发新功能,都可以使用。 您可以通过[email protected]与我们联系。 最后,我们希望每个人在新的一年都有一个良好的开端。 目前为止就这样了。 保持健康!