查看原文
其他

PostgreSQL贡献者指引

中国pg分会 开源软件联盟PostgreSQL分会 2024-01-11


作者:中国pg分会


前言


为开源项目做出贡献可能令人生畏——PostgreSQL也不例外。作为PostgreSQL的长期贡献者,Aleks分享了他来之不易的技巧,以帮助您做出第一次贡献,或做出更多贡献。


PostgreSQL是世界上最受欢迎的数据库之一。我们是PostgreSQL的Timescale扩展功能的忠实粉丝,这已经不是什么秘密了:我们已经在它的基础上构建了TimescaleDB,还聘请了开源PostgreSQL贡献者(像我一样!)。同时,我们开发了一些功能来让 PostgreSQL更好地应用于时序场景(例如Skip Scan,它使PostgreSQL中的某些查询速度提高8000倍)。除了改进数据库本身,我们还致力于PostgreSQL社区的成功


开源不仅仅是我的热情,也是我的职业。自2016年以来,我一直是PostgreSQL贡献者,最近加入Timescale作为全职开源PostgreSQL贡献者。我不仅为PostgreSQL做过贡献,还为Insolar、Sigrok和其他开源项目做过贡献。我是PostgreSQL的pg_protobuf和ZSON扩展和几个STM32微控制器的开源库的作者。


我喜欢开源,因为它能够使我们看到软件的内部,并从中学习改进它。开源软件的质量标准高于专有软件,因为您无法做隐藏和偷工减料。最后但同样重要的是,开源软件不会因为地缘政治事件或诸如此类的事情而拒绝出售或延长许可。(在我的职业生涯中,我至少遇到过两次这种情况。)


今年早些时候,我们开展了“PostgreSQL现状”调查,以了解人们如何使用PostgreSQL,从他们的社区经验到流行的工具和需要改进的领域。


您可以查看2021年PostgreSQL现状报告来探索所有发现和趋势——但有一个结果对我来说很有感触:


85%的受访者没有贡献PostgreSQL的代码库、文档或提交,只有4%的人贡献过几次。


该调查还强调了作为PostgreSQL社区我们可以更欢迎新开发人员,帮助他们使用PostgreSQL和为PostgreSQL做贡献。


例如,一位受访者说:“第一个代码贡献可能会带来创伤……有时我们不太欢迎新开发人员[原文如此]。我们应该改进……



在2021年PostgreSQL现状调查中,85%的受访者没有为PostgreSQL代码库、文档或提交做出贡献。


这让我开始思考,该如何让人们更轻松地克服最初的恐惧和其他障碍——无论是技术的困难、流程的困惑,还是缺乏信息——这些障碍经常围绕着开源项目。毕竟,我们希望更多的人成为PostgreSQL社区的一份子并做出贡献;这就促使我们思考如何让它变得更好。


为了帮助更多想要贡献的人参与,我将分享我的观察、过去5年多学到的东西、希望在开始时就知道的东西,以及给新贡献者的一些建议。


我将使用PostgreSQL作为特定的例子,无论你是想为PostgreSQL做第一次(或第二次,或第三次)的贡献,还是有另一个开源项目的想法,下面的指导是非常通用的。


还介绍了一些回馈社区或代码之外的贡献方法以及建立一个可持续、健康的开源社区的容易被忽视的重要元素。


第1步:确定你的动机


要问的最重要的问题之一是:“你为什么想成为开源贡献者?”


除非你认识到并理解你的动机,否则你很难为项目安排时间,尤其是随着时间的推移。


以下是您可能想要开始从事开源项目的潜在原因列表:


1. 获得独特的体验:如果您是一位有经验的编写微服务后端开发人员,可能会寻找新的挑战。开源软件提出了很多这样的挑战和需要学习的新技术。


2. 了解您最喜欢的操作系统/数据库/语言/编译器的内部结构:通过了解您最喜欢的开源项目的内部结构可以让您更有效地使用它,并了解其局限性。例如,没有多少用户知道运行SELECT查询可能会导致PostgreSQL写磁盘。或者创建多个临时表可能会显著影响整个数据库的性能。或者synchronous_commit = remote_apply在提交事务之前实际上并不等待副本的反馈。(事务是即时提交的。只是没有通知用户这一点,这可能会导致问题。)


3. 与优秀的人一起工作:开源吸引了来自世界各地的一些最有才华的人。总有一些你可以从他们身上学到的东西,无论大小。ZSON扩展的最初想法来自Alexander Korotkov和Teodor Sigaev,我很幸运能作为PostgreSQL提交者与他们一起合作。现在,ZSON是我在GitHub 上最受欢迎的项目(在撰写本文时有390多个星)——并有可能会随PostgreSQL一起发布。


4. 为了让用户更满意:假设您贡献了几行代码,使PostgreSQL速度在某些情况下提高了10%。PostgreSQL被数千家公司使用,其产品被数百万客户使用。令人欣慰的是,您的小补丁让所有这些用户都更快乐了一点,虽然你没有收到他们寄来的感谢信。


5. 提升你的简历:为著名的开源软件做出几年的贡献,无论是技术积累还是社区人脉都能帮你找到更适合的工作,


公平地说,您可能想要开始为开源项目做出贡献的原因可能有很多。这个列表并不详尽,每个案例都是独一无二的,但我试图提炼出我一次又一次看到的一些原因。


一旦你花了一些时间来思考,明确为什么想贡献,下一步就是熟悉该项目的开发过程。


第2步:了解开发过程


在开始新补丁的开发之前,先了解以下内容:


  1. 如何编译代码

  2. 如何运行测试

  3. 如何构建文档

  4. 如何调试/分析/基准测试代码

  5. 如何格式化代码

  6. 如何提交补丁


您通常可以在项目的GitHub README文档中的找到大部分信息。对于PostgreSQL,请查看安装文档。


PostgreSQL是用C编写的,使用GNU Autotools构建系统,并依赖Perl脚本语言进行测试,使用SGML进行文档处理。使用Git作为版本控制系统,并且存储库是自托管的(尽管GitHub上有一个镜像)。


PostgreSQL可以这样编译和测试:


git clone http://git.postgresql.org/git/postgresql.git

cd postgresql

./configure --prefix=/home/user/pginstall --enable-tap-tests --enable-cassert --enable-debug

make world

make check-world


不过细节有点复杂。首先,必须安装几个依赖项,这取决于操作系统。


例如,在Ubuntu 20.04 LTS上,您将需要:


# for basic build

sudo apt install gcc make flex bison libreadline-dev zlib1g-dev


# to build the documentation as well

sudo apt install docbook docbook-dsssl docbook-xsl libxml2-utils \

openjade opensp xsltproc


其次,您可能会犯一些常见错误,例如,make distclean更改头文件后忘记运行。


GitHub上有一组脚本可以帮助您避免这些错误。


以下是使用说明:


# where to install Postgres (you can add this line to your ~/.bash_profile)

export PGINSTALL="/home/user/pginstall"

# build and test Postgres

./full-build.sh

# install it to $PGINSTALL

./single-install.sh

# execute a little more tests on running Postgres

make installcheck-world

# check the documentation:

open ~/pginstall/share/doc/postgresql/html/index.html


此外,PostgreSQL社区使用邮件列表作为讨论、提交和审查补丁的主要沟通渠道。


要了解消息类型,请订阅pgsql-hackers@(请注意,此邮件列表上每天有许多消息)。另外两个重要的邮件列表是pgsql-general@和pgsql-bugs@,还有许多其它的分离主题的邮件列表。


顺便说一句:在浏览PostgreSQL现状调查的匿名调查数据时,许多回复提到邮件列表不是跟踪错误的最友好方式,还可能是参与的障碍。例如,“现在人们认为邮件列表是“困难”的。我认为这不是与社区互动最友好的界面。”


在您熟悉了开发过程之后,是时候开始考虑您的第一个补丁的想法了。


第3步:确定您的第一个补丁


你的第一个补丁不必很花哨。以下是我认为可以作为PostgreSQL第一个补丁的示例: 


1. 查找并修复注释和文档中的错误:从简单的事情开始。根据我的经验,项目在代码注释和文档中肯定会有错别字和错误。使用您最喜欢的文本编辑器和拼写检查器来查找它们。这是一个非常好的开始和克服对贡献恐惧的地方:没有破坏任何东西的风险。有趣的是,这正是我向Linux内核提交第一个(也是目前唯一的)补丁的方式。(我对PostgreSQL的第一个补丁相当复杂,因此不是很有代表性。)


2. 参与代码审查、测试和讨论:许多软件开发人员喜欢编写代码,但很少有人喜欢审查和测试它。对PostgreSQL做出的最有价值的贡献之一就是成为一名审阅者。作为审阅者,您的主要任务是检查补丁是否编译、通过测试、实现声明的功能并记录在文档中。当然,检查它是否有明显的错误会很有价值。


3. 查找并修复错误:检查bugtracker,或者检查pgsql-bugs@邮件列表的存档。尝试重现该错误。如果不能重现,可能已经被另一个补丁修复了,或者重现它的步骤不是很清楚。无论如何,回复邮件列表让社区知道你发现了什么。如果您能够设法重现该错误,从出错的地方更改代码,然后编写相应的测试,使其通过验证。


4. 找到瓶颈并优化代码:使用某个软件一段时间后,您会发现其性能远非理想的情况。使用合适的工具(例如perf和eBPF)找到瓶颈,然后消除它。在提交补丁之前,请确保在其它一些场景中不会导致性能下降。


5. 编写测试:使用合适的工具来测试代码覆盖率。对于PostgreSQL(C或C++),该工具是lcov。手头如果有代码覆盖率报告,编写一个增加代码覆盖率的测试。


6. 改进文档:理想情况下,文档的结构应该允许用户将其作为PDF下载,并像阅读书籍一样阅读。PostgreSQL文档非常好,涵盖了很多主题内容,但仍然可以受益于更有经验/专注的技术作者(例如,可以添加更多示例场景和插图,以帮助新用户理解抽象的概念)。PostgreSQL共有71章2300+页,主要描述了配置参数和查询语法。如果考虑内容描述如何解决具体任务。FreeBSD手册是一个很好的的例子。


7. 重构代码:重构有一个明确的目标是重写代码,让它做同样的事情,但更具可读性。值得注意的是,有时PostgreSQL社区可能会对此类补丁的价值持怀疑态度。原因是社区支持PostgreSQL的最后5个主要版本。因此,重构会使bug修复的反向移植变得更加复杂。


我建议积累一些小的胜利,在你转向更雄心勃勃的补丁之前,先提交几个“补丁”之类的贡献。将帮助您熟悉贡献流程、工具和社区——更能增加您的信心。


一旦你确定了第一个补丁的想法,就可以开始投入工作了!(我建议先阅读下面关于常见错误的章节:)


第4步:如何避免常见错误


人们在加入开源项目时会犯一些常见的“错误”,因此我整理了以下建议帮助您来避免。


  1. 从简单的事情开始

  2. 你的补丁越小,它被接受的机会就越大

  3. 仔细聆听对补丁的反馈

  4. 始终保持礼貌(包括:永远不要讽刺,拖钓等......)

  5. 并非所有补丁都被接受,不要太在意

  6. 贡献者也是人;大多数人在业余时间从事开源工作

  7. Grammarly对我们这些以英语为第二语言的人有很大帮助


到目前为止,我的讨论主要集中在提供新代码或错误修正的补丁上。但是,提交补丁并不是为开源项目做出贡献的全部内容和最终目的。


接下来,我们将看看如何在不编写代码的情况下为开源项目和周边社区做出贡献。


第5步:考虑在代码之外做出贡献


除了编写代码和文档之外,还有很多方法可以为项目做出贡献——这些非代码贡献是无价的。


以下是我最喜欢的几个想法,尽管该列表并不完整:


1. 帮助新人:总有人最近开始使用某个开源项目(作为参考,在PostgreSQL现状调查中,几乎50%的受访者表示他们是该项目的新手,有0-5年的经验。)通常,有一个邮件列表或Slack(聊天群组),他们可以在那里提问。加入相应频道,帮助新人。

2. 参加会议:就你最近使用、学习或一直在做的事情做一个演示,分享知识。对于PostgreSQL,有几个流行的会议,如PGconf.asia、Postgres London和PGconf.us,以及许多本地聚会。

3. 创建博客/播客/YouTube频道:例如,这篇文章可以被视为对开源的一个小贡献。确保将您的博客、播客等添加到著名的社区新闻聚合器中,以便人们可以了解它。对于PostgreSQL,是PostgreSQL Planet。

4. 写一本书:写一本书是一个雄心勃勃且非常耗时的目标,但有很多方法可以做到。例如,Manning是一家以帮助新技术作家出版他们第一本书而闻名的出版商;或者只是在Google Docs中制作PDF并免费分发。

5. 参加Google Summer of Code或Google Season of Docs:Google Summer of Code(GSoC)是一个专注于让学生软件开发人员参与开源开发的计划。以学生或导师的身份参与。如果您是技术作家,请考虑参加Google文档季(GSoD)。有关更多信息,请参阅PostgreSQL Wiki 上的GSoC和GSoD页面。

6. 为CI系统捐赠硬件。CI代表持续集成——在PostgreSQL世界中,它被称为Buildfarm。社区有兴趣向Buildfarm添加不寻常的平台或架构、操作系统和编译器的组合。例如,目前还没有采用RISC-V架构的服务器。RISC-V是一种开放指令集架构(ISA),得到了许多领先硬件制造商的支持,尤其是在发现Meltdown和Spectre漏洞之后。有关更多详细信息,请参阅加入PostgreSQL Buildfarm的申请。


了解更多信息资源


在为PostgreSQL做贡献的背景下,推荐以下材料用于自学:

C in a Nutshell,第2版by Peter Prinz, Tony Crawford

Autotools Mythbuster by Diego Elio Pettenò, David J. Cozatt

Randal L. Schwartz等人的《学习Perl和中级Perl》。

Martin Fowler等人的重构。

系统性能,第二版Brendan Gregg

Brendan Gregg的BPF性能工具

Hector Garcia-Molina等人的数据库系统实现。

培养新的PostgreSQL开发人员,作者是Anastasia Lubennikova和我自己。请参阅附有推荐白皮书的附赠幻灯片。


以下资料为了容易检索保留原文或相关链接


C in a Nutshell, 2nd Edition by Peter Prinz, Tony Crawford

Autotools Mythbuster by Diego Elio Pettenò, David J. Cozatt

Learning Perl and Intermediate Perl by Randal L. Schwartz, et al.

Refactoring by Martin Fowler, et al.

Systems Performance, 2nd Edition by Brendan Gregg

BPF Performance Tools by Brendan Gregg

Database System Implementation by Hector Garcia-Molina, et al.

Growing up new PostgreSQL developers, by Anastasia Lubennikova and myself. See the bonus slides with recommended white papers.


最后的想法


这篇文章只是我多年来观察到的建议、最佳实践和其他各种事情的集合,以帮助潜在的贡献者从“从不贡献”到“贡献一两次”(最终,希望有些人让它“多次贡献”)。


还有更多的技术和社区体验的话题,没有在这里介绍。如果您想了解更多有关内容(例如,调试、分析和基准测试,或者关于编写扩展),请联系我和团队:aleksander@timescale.com。


我们也在寻找方法来帮助社区、分享知识并为社区成员已经在做的事情做出贡献。


最后,如果我没有提到我们正在通过多个团队招聘人才,那就是我的失职了。TimescaleDB是领先的时间序列数据开源关系数据库。它被打包为PostgreSQL扩展(类似于CREATE EXTENSION的扩展,不是分叉,也不是一组补丁)


如果您了解C和SQL,有使用PostgreSQL的经验,并且想成为一名全职数据库开发人员,我鼓励您考虑加入Timescale作为核心数据库开发人员。


Timescale是一家偏远地区人才优先的公司,员工分布在各大洲(南极洲除外——但如果是您,我们很乐意为您的家庭办公室配备空间加热器)。


如果您想与我、Timescale工程师以及其他开发人员和社区成员讨论技术主题,您可以在TimescaleDB Slack(6K+成员)中找到我们。


我们正在愉快的贡献中……



作者:亚历山大·阿列克谢耶夫(Aleksander Alekseev)


自2016年以来,Aleksander专门从事开源项目。他是PostgreSQL的pg_protobuf和ZSON扩展的作者。Aleksander于2021年作为PostgreSQL贡献者加入Timescale。



译者:魏波


多年的数据库技术从业经验,曾服务于中国移动、中央电视台、民生银行的数据库管理项目;自2017以来,一直致力于PostgreSQL在中国的推广与发展,是中国PostgreSQL培训认证项目负责者。



预告 | 2021 PG亚洲大会12月与您相约
PG ACE计划的正式发布
三期PostgreSQL国际线上沙龙活动的举办
六期PostgreSQL国内线上沙龙活动的举办

中国PostgreSQL分会与腾讯云战略合作协议签订

中国PostgreSQL分会与美创科技战略合作协议签订
中国PostgreSQL分会与中软国际战略合作协议签订
中国PostgreSQL分会“走进”北京大学
中国PostgreSQL分会“走进”深圳大学
PGFans社区核心用户点亮计划

PostgreSQL 14.0 正式发布

深度报告:开源协议那些事儿

从“非主流”到“潮流”,开源早已值得拥有

Oracle中国正在进行新一轮裁员,传 N+6 补偿

PostgreSQL与MySQL版权比较

新闻|Babelfish使PostgreSQL直接兼容SQL Server应用程序

四年三冠,PostgreSQL再度荣获“年度数据库”

中国PostgreSQL分会入选工信部重点领域人才能力评价机构


更多新闻资讯行业动态技术热点,请关注中国PostgreSQL分会官方网站

https://www.postgresqlchina.com

中国PostgreSQL分会生态产品

https://www.pgfans.cn

中国PostgreSQL分会资源下载站

https://www.postgreshub.cn


点赞在看分享收藏

继续滑动看下一个

PostgreSQL贡献者指引

中国pg分会 开源软件联盟PostgreSQL分会

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存