How to Change the World with ChatGPT

Have you ever dreamed of making a positive impact on the world? Do you have a passion for social justice, environmental sustainability, or human rights? If so, you might be interested in learning how ChatGPT can help you achieve your goals. ChatGPT is a powerful natural language generation (NLG) system that can create coherent and engaging texts on any topic. It can also converse with you in a natural and friendly way, using your preferred language and style....

December 12, 2022 · ToBeABetterMan

DPDK社区安全问题处理流程介绍

引言 DPDK作为一个被广泛应用的高性能网络开发套件,用户群体和开发者群体十分庞大。代码一旦出现问题,波及面十分广泛,容易造成重大经济损失。所以及时解决代码bug,是DPDK社区最应该重视的问题之一。一般用户或者开发者碰到有bug都可以向bugzilla提交bug,提交了以后会有专人跟进,及时解决。但是,如果这个问题不是一般的bug,而是容易造成重大影响的安全问题,情况似乎就不再是那么简单。本文把DPDK社区处理安全问题的一般流程给大家介绍一下,让大家心里有数,遇到类似的情况可以比较好地处理。 安全问题的发现与报告 可能这个时候很多人会产生一个疑问:**什么是安全问题?**其实很简单,如果用一句话说,就是如果一个问题能造成重大影响的话,那这个问题就属于安全问题。详细地说就是,如果这个问题造成的影响符合这三点之中的任何一点,则认为这个问题属于一个安全问题。第一,软件的数据不再安全,造成了一定程度的数据泄露;第二,软件的正确性不再得到保证;第三,软件的可靠性受到影响。 第一点很好理解,如果这个bug能造成数据泄露,让用户的数据安全得不到保证,则这个问题肯定是一个安全问题。第二点,软件的行为不再正确,那视程度而定看这个问题能不能带来安全隐患来判定其是否为安全问题。最后一点,如果这个软件提供的是一项服务,这个问题让这个服务不可用,或者不稳定,都是容易造成损失的,所以这也是一个安全问题。一般来说,DPDK社区只认可在主仓库或者DPDK-stable这两个仓库中的安全问题,别的仓库可以认为是临时仓库或者有别的用途的仓库,一般也不会有人会去把它部署在生产环境中,自然也就没必要去细究其中的问题。当然,DPDK-stable中不在维护期的仓库也同样如此。开发者或者用户们,如果不能确认自己发现的问题是不是一个安全问题,也可以先向DPDK的安全团队提交报告,DPDK的安全团队将会接手处理。 **那可疑的安全问题应该怎么报告呢?**安全问题不同于普通的问题,安全问题有可能造成严重的财产损失,所以我们在处理安全问题的时候尤其需要小心谨慎。原本用来报告普通问题的bugzilla是不能用来报告安全问题的,因为bugzilla的公开性,在这里报告问题,有可能让心怀不轨的人提前知道问题从而利用这个问题来达到一些不可告人的目的。报告一个安全问题,我们应该使用GPG加密,将加密后的邮件发送到security@dpdk.org ,任何人都可以向这个邮箱发送他们认为疑似的安全问题。为了将影响降低到最小,这个邮箱列表里的成员规模会控制的很小。不单单是在汇报阶段,在处理和沟通问题的过程中,我们也鼓励全程使用加密邮件沟通。安全问题跟普通问题一样,你提供的信息越多,相关的工作人员就能越快地查清楚问题原因并及时修复好。如果你已经有了这个问题的修复方案,那请你随着报告一起发给DPDK的安全团队,这样能大大加速整个处理过程。值得一提的是,在报告中,请你告知工作人员你需要得到怎么样的嘉奖。 DPDK 安全团队的成员会在收到问题报告后回复报告者,确认报告已经收到。随后他们会和一两个相关领域的专家一起查阅这份报告,如果最后的审查结果发现这不是一个安全问题,那么安全团队会联系报告者让其在bugzilla里报告这个问题。而如果这个问题最后确认是属于安全问题的话,那么安全团队将调查哪些版本的DPDK受到了影响,同时在bugzilla上创建一个私有条目,用以记录完整的处理过程,然后开始后续流程。 安全问题的处理流程 接下来跟报告者相关的事情就不多了,不过既然是科普,那就聊聊安全团队这个时候会有哪些动作。这个时候他们会用一个评分系统来评估这个问题的严重性也就是CVSS calculator。这个系统会根据你的输入信息最终产生一个分数,再根据报告人的意见,最终得出这个问题的严重性分数,也就是CVSS Score。然后再用这个CVSS Score去申请一个CVE (Common Vulnerabilities & Exposures) 号。 在处理安全问题的时候,会牵涉到一个信息解禁时间的概念,这个解禁时间安全团队会根据release时间的安排,报告人的意见,以及问题的严重性综合考量。当然,如果问题十分轻微,那可能也完全不需要解禁时间。信息解禁时间指的是所有的知情人约定一个时间,并在在这一天部署修复问题的补丁,然后公开这个问题的细节。这样就可以在问题曝光的同时修复好问题,尽量减少这个问题被不法分子利用的机会。一般来说解禁时间距离问题确认时间之间不能超过十周。如果这个问题不需要信息解禁时间,那只要按照正常的时间安排处理就行了。 安全团队会制定安全信息文档,这个一般是由安全团队和报告人员一起制定的。当文档完成后,安全团队需要向CAN(CVE Numbering Authority) 请求CVE号,来追踪处理这个问题。关于为什么要CVE号,这个大家可以自行查阅参考资料,有点复杂,本文就不再详细说明了。同样的,安全团队对CVE的请求也应使用GPG加密电子邮件。在走这些流程的同时,安全团队也在和指定的一两个相关领域的专家一起完成问题的修复工作,完成修复补丁后尽快进行测试工作,这样可以最大化地缩短问题修复时间。 安全问题的修复与公开 在修复的补丁准备好后,补丁和关于这个安全问题的相关建议将发送给DPDK社区的利益相关者们 (security-prerelease@dpdk.org),并指定好信息解禁的日期和时间。通知信息的日期与公开日期的间隔应少于一周,以减少信息暴露风险。这些人不能提前部署或公开这个补丁,否则它们将被从利益相关者列表中删除。提前部署修复补丁或者暴露安全问题信息都是一种极其不负责任的行为。可能这里有人会好奇,DPDK社区的利益相关者主要是哪些人。其实他们主要是打包 DPDK软件包的操作系统供应商和DPDK技术委员会认为值得信赖的主要 DPDK 用户这两种群体。于此同时,安全团队的成员也会在信息解禁前一周内联系OSS Security (Open-Source Security) 私人邮件列表,描述漏洞的详细信息并提供修复补丁。发行版和主要供应商收到相应的通知后应有相应的动作,所有的邮件都要使用安全团队的成员GPG密钥签名发送。 在信息禁运期满时,安全团队会将所有安全问题的详细信息公开并将修复补丁推送到对应的分支,对于已修复的稳定分支,应发布新版本。一般来说首选周一至周三发布安全更新,这样各个组织的管理员就不必在周末加班了。一旦补丁被推送到相应的分支,安全团队还会将相应安全公告发布到announce@dpdk.org*和OSS Security安全邮件列表,然后将补丁发送到dev@dpdk.org和 stable@dpdk.org*。到此为止,一个安全问题才算处理完毕。 总结 处理一个安全问题的过程十分繁杂,这都是为了能尽可能地降低问题可能带来的损失。里面牵涉到了很多人,很多部门,甚至很多公司。大家通力合作,为了一个共同的目标。本文只是阐述了一个安全问题的基本处理流程,有很多特别的案例本文就不再啰嗦了,希望能帮助到DPDK社区广大的用户和开发者。 参考文献 1.https://doc.dpdk.org/guides/contributing/vulnerability.html 2.https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures

July 7, 2022 · ToBeABetterMan

Virtio原理有感

从Virtio的原理看去,这种设计说自然也自然,说高明也高明。从低速高代价的手段建立告诉低代价的“信道”。 拓展到生活上其实可能也有类似的例子,寻呼机时代,寻呼机文字交流麻烦且昂贵(单价昂贵),于是我们可以用寻呼机发送电话号码,然后再用电话号码来沟通。这其实跟Virtio的原理时一个意思。 程序员解决的不是技术问题,而是现实问题,学会观察,总结归纳,其实很多问题都是一样的。

April 11, 2022 · ToBeABetterMan

小奖励,小高兴

没想到2021年写了7000多行代码,我自己都没啥感觉,哈哈哈,拿了个小奖励😊。

April 11, 2022 · ToBeABetterMan

所谓的“文档”

你是否曾经遇到过这样的情况:你加入了一个新的项目,想要了解项目的背景、目标、架构和功能,但是却发现项目的文档是一团糟,或者根本就没有文档?你是否曾经花费了大量的时间和精力,去阅读复杂的代码,去询问不耐烦的同事,去搜索零散的邮件和聊天记录,只为了弄清楚项目的基本情况?你是否曾经因为项目的文档不完善,而导致了沟通的障碍、需求的误解、功能的缺陷、测试的困难、维护的麻烦,甚至是客户的不满? 如果你有过这样的经历,那么你一定能够认识到文档在项目中的重要性。在程序员的工作中,文档的重要性很容易被忽视,因为它往往被视为一个次要的任务,而且程序员们通常更喜欢在编写和优化代码上花费时间。但是,文档基本上是任何项目的重要部分,它的作用超过了仅仅是记录代码和过程。文档是项目的灵魂,是项目团队和客户之间的桥梁,是项目成功与否的关键因素。一个完善的文档,可以帮助项目团队更好地理解和实现客户的需求,可以提高项目团队的协作效率和代码质量,可以减少项目风险和成本,可以增加项目的可维护性和可扩展性,可以提升客户的信任和满意度。 文档的价值体现的方面很多: 向他人传达信息 文档是向他人传达信息的最重要的方式之一。程序员编写的代码往往非常技术化,只有专业人士才能理解,但是文档可以帮助任何人理解程序的功能、设计和使用方法。文档可以帮助其他程序员、QA工程师、项目经理和客户了解代码的逻辑和执行过程,也可以让他们更好地使用和操作软件。 提高团队合作 文档可以提高团队合作精神,因为它可以帮助所有团队成员了解代码和项目的细节。当程序员不在现场并需要进行代码维护和改进时,文档尤其重要。如果文档详细记录了项目的进展和详细描述了代码的功能和结构,有助于后续维护人员及时了解项目州。因此,文档不仅可以保证团队的有效通信,也可以提高团队的效率。 记录设计过程 文档可以记录设计过程、决策和辩论。这些信息对项目的长期发展至关重要。当出现问题或需要进行升级时,团队成员可以翻阅文档,了解过去的决策和设计选项,以及后期对他们的修改和改进。 测试和评估的必要条件 文档在软件测试中起到重要作用,因为测试需要明确代码的设计和功能。测试人员可以使用文档了解程序的功能和正确性,以确定测试的方向。在评估和确认产品符合用户要求和规范时,文档也可以提供重要信息。通过技术规格和测试报告,质量保证组可以评估团队的工作并为用户提供报告。 在软件开发流程中,文档不是非常重要而是不可缺少。文档记录软件产品的过程,包括代码、测试、设计和用户要求等多个方面,这有助于保证项目的质量和完整性。因此,程序员必须重视文档的编写并以此作为项目的基础。 ** 除此之外,更广义的写作同样是锻炼人思维能力的必经之路。写作才是真正的思考,这一点我经常有体会,你以为你懂了,写作的时候发现自己差的还挺远,这太正常了。所以文档的完善,其实同样也是项目的完善,更是自己思维模式的完善。**

April 11, 2022 · ToBeABetterMan