怎么开源你的项目:不要仅仅是开放仓库
原文链接:How to Open Source Your Project: Don’t Just Open Your Repo!,原文作者:Matthias Meidinger,原文日期:2022-7-25
在4月1日,我们宣布了StackRox社区平台的发布,这是我们团队做了大量工作以转变StackRox知名的专有安全平台为开源的结果。
一个项目从私有转变为公开发展意味着比更改GitHub仓库的可见性要多得多,它必须要有一个转变计划,尤其是目标定为构建一个用户大量增长且利用这个平台的繁荣社区。为了把握住成功机会,项目的目标和社区的目标应尽可能保持一致。
就StackRox团队而言,我们最高目标之一就是为社区贡献者和用户设置尽可能低的入门门槛,我个人已发现这是个重大的挑战。一个重要的事就是为工程师们定制环境,提供一个细致的、有指引的入门体验。为社区的开发者、运营人员和安全人员创建一个论坛形成了一个完全不同的挑战。
第1部分:你的产品和工程团队
1.1 开源什么
如果看看StackRox的GitHub结构,你就会发现一大批组成平台的许多不同组件和特性的仓库可以私有,但是我们选择开放(be thorough and take the extra time)。我们决定开放整个平台和它的依赖,包括安装自带、开箱即用的规则集,以及重新构建的容器镜像和Helm Charts,以便让开源部署尽可能的容易。
1.2 用什么License
在开源你的代码的时候,第一个任务就是选择一个适合你的使用场景的license。大多数情况下,建议把你的法务部拉入讨论,GitHub也有很多好的资源来帮助你。针对StackRox,我们类似于Red Hat和知名的开源项目,合理地选择了Apache 2.0。
1.3 怎么获取
在你决定开放哪部分和怎么开放之后,下一个问题就是,你怎么让它可用?
除了源码,就StackRox而言,还有上面提及的容器镜像,这就意味着我们也面向大众开放了持续集成流程。为了开展这个,我强烈推荐你审视你的持续集成流程,假想任何不安全的配置会被使用。审视内部持续集成流程的通用模式,比如账号密码、服务账号、部署秘钥和存储访问。
同样,应该非常清楚谁可以触发持续集成,因为你的资源通常都比较受限,而持续集成是有被用来挖矿或者运行其他有害软件的。
1.4 怎么管理
StackRox是一个上游的开放构建,而Red Hat Advanced Cluster Security (RHACS)在Red Hat内部构建系统构建。(同时)采用(tending to)两个不同的构建管道自然会带来些开销,因为这个项目的开源和商业各有不同的需要。
如果一切顺利,你的持续集成成功了,大概率的你会有些制品(artifact),一个二进制文件、tgz压缩文件或者容器镜像。
1.5 怎么分发
让这些制品低门槛地开放可用是非常必要的。在StackRox,我们决定发布容器镜像到Quay这个开放的组织,类似地,你可以使用GitHub的发布功能或者其他的开放发布渠道,取决于你的发布制品类型,比如NPM、PyPI和Crates。发布之后,接下来的步骤就是用户下载这些制品并运行你的产品。这就带来了下一个重要的问题。
1.6 怎么记录
项目文档是你项目的公开陈述,用来招待用户、贡献者。潜在的用户通常会首先查阅你的文档,来判断你的项目是否适用于他们的使用场景、知晓怎么最高效地使用。文档理论上来讲是传达信息给社区,用以最小化用户疑惑、澄清GitHub仓库的问题。
请记住,文档之于操作员和开发者是两个非常不同的东西,比如,操作者关注的是部署、配置、平台维护、数据保护、升级和灾备。开发者在乎的是建立开发环境(IDE、本地部署、调试版本等)和查阅具体的API描述。“入门教程”(Getting Started)让两类受众都受益颇多,(借此)搞定(be it)如何搭建和运行(操作者),或者怎么在代码库中完成每天的子线任务(开发者)。
因为StackRox是RHACS的上游,我们决定让文档聚焦于开发者,同时有许多用户文档(user-tailored documenttation)。我们正在计划一个项目,特定于开源的、StackRox冠名的用户文档。
开发文档(developer-tailored documentation)在主项目的README和stackrox/dev-docs中正在扩大,后者是最初为私有Confuence文章的Markdown指南合集,这个合集在不停的增大,特别是因为我们从贡献者那得到了越来越多的关于他们喜欢看哪些文档的反馈。我们将持续努力地搬迁首次搬迁时缺失的、或者因为包含私有信息而尚未发布的指南和操作方法。
1.7 怎么管理隐私
说到隐私信息,因为git的特点,从你发布的仓库的第一个提交(commit)开始,你项目的完整历史将会公开。这个也适用于你项目随着时间推移所收集的任何问题、讨论和拉请求(pull requests)。内部开发时这个不是问题,但开放之后就会。
严重建议你审视在GitHub或者其他git仓库中的所有问题和评论,并剔除项目不公开使用的任何信息或引用的历史记录。这些信息不需要公开为开源,但它却可以为未来的用户增添上下文,所以你可能需要尽可能的保持它的完整。
一个快速而简单的方式就是在GitHub上新建一个项目、废除git历史,然而这个会带来许多问题。你的工程团队会失去工作的历史记录,问题解决和讨论这些价值资源。更进一步的,这个步骤必须要计划好,工程团队必须清清楚楚(be in the know)- 如果一个人推送了git的历史记录到你的新项目,那么整个历史记录又可以被访问到。
1.8 怎么处理CVE(Common Vulnerabilities & Exposures,通用漏洞披露)
就可见性而言,如果你处理CVE/禁令工作,你需要一个适当的工作流。因为你的仓库是公开的,你就不能为了这种工作而简单地使用一个公开的特性分支。而GitHub提供了一个选项,可搞一个临时私有的复制仓库(fork)来解决安全问题。
1.9 怎么照顾团队
最后不得不提的是, 如同之前说到的,在这所有的任务之中,你应该确保你的工程团始终队卷入其中并明明白白。
Red Hat Advanced Cluster Security (RHACS)的工程团队是以设计文档驱动的方式工作,所有的大变动都在整个工程团队中通过共享文档、讨论、写(文档评论)和说(评审会议)的方式来研讨。
在宣布之前的几个月里,我们做了很多的讨论,尝试找到团队喜欢的(was happy with)解决方案、工作流和方法。因为工程团队任将是项目的主要推动力量,他们应该知道一旦开放后日常工作有什么变化。
此外,这对初始的外部开源贡献者是个非常好的机会。如果你在维护关于(with)产品补丁的私有复制仓库(fork),这就是你通过提供变更到原始上游项目来发光的好机会。
对我们工程师来说,变化不大。他们依然主要工作于上游仓库,主要区别在于所有的拉请求(pull requests)和讨论都公开可视。这就意味着团队需要注意他们是怎么沟通的,即使是内部,因为所有的评论都可以被外部那些可能缺少而你的团队却拥有的上下文背景或一致氛围(shared humor)的人看到。
第2部分:社区、协作、上下文
2.1 怎么使能良好的讨论
随着你的受众增加,至关重要的是你要定义清晰的规则来创建一个大家都参与的安全环境。一个通用的方法是定义行为规范(code of conduct),用以设置一些基本的指引,表述什么样的社区互动是被允许的。我们决定坚持早已建立的框架,让行为规范基于贡献者协议。
2.2 怎么保持沟通良好
最好的行为规则如果没人去强制执行那也没什么用,这就意味着我们需要找到行为规范委员会的志愿者,并且对应的训练他们。委员会成员应该公开可见,对沟通开放,这样任何问题都可以找到他们。
我们通过公布行为规则、委员会成员在我们的社区网站上来达成这一点。
2.3 在哪里和社区沟通
在这点上,你应该知道你开源的目标和期望的目标受众,这些问题的答案决定了你如何与社区互动。使用所有渠道,但在当今过剩的沟通媒介上选定一个,比如Slack、Discord、邮件列表、论坛和Matrix。
StackRox社区当前驻扎在CNCF Slack工作空间的#stackrox频道。
2.4 怎么接受贡献
搞清楚你从贡献者那要接受什么。只是讨论中的反馈吗?你接受GitHub上的问题或者拉请求吗?如果这样的话,推荐你使用CONTRIBUTING.md
文档或问题/PR(Problem Request)模板的方式来提供指引。
如果你接受这些,这也有助于大家对你的反射弧(reaction time)有个大致的概念。同样,一定要有流程来决定谁留意新的条目。比如,我们讨论得出一周内分类新问题和PR,在月度会议上作细致讨论和决策。
2.5 怎么和社区见面
定期公开的会议降低了参与的门槛,让问题高效的提上来。任何感兴趣的贡献者都可以快速的停下来并与你的项目取得联系。当前,我们在每月第二个周二的早上9点(PST)、中午12点(EST)和下午5点(GMT)举办StackRox社区会议,你可以添加community@stackrox.com到你的日历来订阅这些事件。
在这些会议中,我们讨论、展示新特性的演示,讨论开放的问题,呈现指引和操作方法,而且还有社区的问答论坛。
第3部分:该你表演了
过去的一年半中,我们一直在努力为你带来一个完全开源的Kubernetes安全平台。我们的下一步是帮助加固尽可能多的容器负载。为了达成这个目标,我们需要用户的反馈。期待你在我们的Slack频道相见、给GitHub仓库标星并成为我们的月度之星“RoxStar”。
如果你有任何疑问或者愿意贡献给StackRox,那么加入CNCF Slack或者参加下一个社区会议吧。
怎么开源你的项目:不要仅仅是开放仓库相关推荐
- [转]6个开源数据科学项目
作者|PRANAV DAR编译|VK来源|Analytics Vidhya 概述 利用这段时间,用这些顶级的开源项目来制作你的数据科学简历 从Facebook AI的计算机视觉框架到OpenAI的GP ...
- 总结人人开源前端renren-fast-vue项目npm install报错
前期准备: 先安装完成 Node.js 这是必须的环境, Node.js 版本的话建议安装 V14 的,尽力少踩坑. 但是,可能你看到这文章时V14已没有问题了,总之:不建议用最新版 ...
- 6个开源数据科学项目
作者|PRANAV DAR 编译|VK 来源|Analytics Vidhya 概述 利用这段时间,用这些顶级的开源项目来制作你的数据科学简历 从Facebook AI的计算机视觉框架到OpenAI的 ...
- 大公司知名开源小组及项目介绍
今日科技快讯 9月27日,有媒体报道称,美团接近敲定至少30亿美元融资,投资者包括美国资本集团(Capital Group).本轮融资后,美团估值将达280亿美元.目前,公司正研究最后的细节,协议可能 ...
- IFTTT 加入开源大家庭,已开源5个项目
IFTTT 刚刚开源了 5个项目,存放在 GitHub 上,这些项目可以被任何人用来集成 IFTTT 的自动化到他们的 apps 和服务上. 上周,微软和谷歌宣布 办公软件在 IFTTT 得到支持,而 ...
- 开源跨平台移动项目Ngui【Action动作系统】
Ngui简介 这是一个GUI的排版显示引擎和跨平台的GUI应用程序开发框架,基于NodeJS/OpenGL,这也是第一个在移动端Android/iOS融合NodeJS的前端GUI项目,至此JavaSc ...
- 想接私活时薪再翻一倍,建议根据这几个开源的SpringBoot项目(含小程序)
作者 | 小柒2012 来源 | 整理自:爪哇笔记 前言 不得不佩服 SpringBoot 的生态如此强大,今天给大家推荐几款优秀的后台管理系统,小伙伴们再也不用从头到尾撸一个项目了. SmartAd ...
- 从头开始 启动开源电商项目jShop
从头开始 启动开源电商项目jShop 1. 引言 干了三年C#, 有了转Java 的念想,所以尝试学习一下java web,java语法本身和C#没有太多的差别,所以打算看看开源的java项目,开源的 ...
- javaaop模式供其他项目调用_Java 分布式架构的 开源的支付项目 调试实战
开源分布式架构的Java 支付项目调试实战 支付项目也有开源的?当然也有,今天就来撸一个gitee上开源的,调试一下.该项目包含微信支付.支付宝支付.银联支付,对于大多数公司来说够用了.而且该项目st ...
最新文章
- [转载]用 grub2 启动 clover.iso 来启动 OS X
- React Native工程中TSLint静态检查工具的探索之路
- 作者:季统凯(1972-),男,博士,中国科学院云计算产业技术创新与育成中心研究员...
- 知道ThreadLocal吗?一起聊聊到底有啥用
- python requests返回值为200 但是text无内容_接口测试入门神器 - Requests
- 三菱数据移位指令_三菱plc移位指令用法详解
- 用指针比较三个数大小_《测量力的大小》教案
- GPS定位可以使用物联卡吗?信号稳定吗?
- BZOJ 1503: [NOI2004]郁闷的出纳员
- 初识Memcache之安装与测试
- python项目需求文档模板_Python+docxtpl+plotly实现模板word文档图表生成
- c语言实验总结200字,数控毕业生自我鉴定200字(精选3篇)
- 重难点详解-关系代数表达式
- [转贴]给想立志入行网络或已经初入行的朋友的建议(一)
- 一年级上册知识点——语文(人教版)
- Check Point R81.10 - 下一代防火墙 (NGFW)
- FPGA设计中,Vivado 调用IP核详细操作步骤
- 我的一加5刷机基本步骤
- Row size too large (> 8126). Changing some columns to TEXT or BLOB… | Mysql / MariaDB
- 犀浦某校一名计算机系大二男生,大学生恋爱的案例分析.docx
热门文章
- matlab电流表怎么连线,数显电压电流表接线图 数显电压电流表电路图
- 网赚项目:表情包项目之抖音表情包的流量变现模式
- 编译原理代码生成器java_浅入浅出Javac编译原理
- NeurlPS‘22 推荐系统论文梳理
- 又一世界级人工智能大会即将开幕!
- android 字符串拼接 drawable文件,【Android】android开发之文字拼接图片,图文混排...
- Flink-Connectors(连接器)(3)RabbitMQ
- Linux基础 ppt pptx
- Golang中os.Reader和ReaderAt的区别,及ReaderAt快速读取日志文件的实现
- Nacos,我也许入门了