前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux基金会企业开源指南系列之二 -- 开始创建开源项目(中)

Linux基金会企业开源指南系列之二 -- 开始创建开源项目(中)

作者头像
开源社
发布2019-05-29 00:55:46
4260
发布2019-05-29 00:55:46
举报
文章被收录于专栏:开源社开源社开源社

本期编辑:舒敏

特别声明

本文拥有创作共用授权之相同方式共享授权4.0版国际许可协议(Creative Commons Attribution ShareAlike 4.0 International License)授权许可。 开源之道独立精心翻译分享,欢迎同道中人商讨。

01

创建开源项目

构建业务场景

在已经完成了一个业务场景之后启动开源项目是一个绝佳的时机,正如和市面上的其它产品一样将之打入市场,那么业务场景的实现就是指日可待的。当然了,项目还需要管理层的认同,因为从管理的角度的出发,需要搞清楚几样事情:为什么要开源?目标是什么?需要多少预算?是否有清晰的产品路线图?需要开放那些知识产权?以及那些代码开源?哪些代码不开源?

分配资源

构建完业务场景之后,你还需要决定一些必要的资源,其中包括能够贡献到项目的开发者的时间。开发者的时间在项目初始阶段和企业内部开发所花费的时间是类似的。额外考虑的是开源之后的,为初期的开发者提供资源来让他们在新社区中帮助新来的赶上进度,如时间、材料等。当然还有法律团队也需要资源来参与到创建开源项目中来,因为竞争对手也可能参与近来。市场的投入是必须的了,这样才可能确保项目开源之后的支持和宣传。

另外还需要为项目的启动和维护所支撑的基础设施考虑预算,其中包括:项目托管和源代码版本控制站点,(当然这个可以选择如 GitHub 这样的第三方专门的站点),以及缺陷跟踪、其它必须的工具等。

测试代码质量

作为工程师的你,对于在开源项目中所涉及到的代码考量肯定是完备性和成熟度,肯定是在计划之前就优先做的事情。你打算确保代码拥有优质的形态,正如原先我们所提到的,其实糟糕的代码并不是导致开源社区产生信用危机的原因。

要小心那些诱人的陷阱,比如苛求完美的代码。如果你认为代码必须是完美无缺的,那么你的工作将永远不会开始。承认当下的尽力而为,然后在未来慢慢改善。当然你还需要解决另外一些问题:一定要确保开源的代码中不会包含带有商业机密的代码注释,或者是私有的接口,以及不适合公开的内容,切记要不要将这些东西带入到社区中来。

确保项目是解决了某一具体问题

当你通过一些传统的市场分析等手段,看到那些正在为自己的IT问题寻找答案时,并亲身验证了你的项目对于他们是很有用处的,那么你的项目就算是走入正常轨道了。那么你一定希望确保这些人找对了项目,而且会积极的参与进来,因为只有这样项目才可能成功。现在你明白找到用户们所面临问题的重要性了吧?一定要去做好这方面的工作,仔细的进行研究,并积极的去询问。要去参加一些开源的会议,和开发者们进行积极的探讨,要去领会他们提到的问题以及对项目有何期望。

还有一种情况,那就是如果你发现已经有人启动了类似的项目,解决的问题也极为相似,那么这时你该考虑加入到他们的项目中去,而不是再去重复制造轮子。更有甚者,你可能发现一个极为类似的项目早就存在了,而且拥有很强大的团队,竞争对手在驱动着项目的进展,那么你也要想办法参与进去,因为积极的协作在开源社区中是很重要的一部分。

在开源项目上,和竞争对手一起工作这件事要极为重视。如果贵司所启动的开源项目而且竞争对手也参与进来了,那么你就有责任去构建良好的协作环境和拥有良好的意愿,这样对于项目本身是有益处的,当然要在领导力上下功夫,而不是简单的追随。

为团队做咨询

以上即是我们所考虑到的所有事项,技术团队和和管理团队做出最终的决定,并指导整体的流程,以确保项目最终的成功。开发者和IT人员可以表明哪里以及何时对协作变得有用。

“如果我们找不到我们正在寻找的东西,或者如果我们发现过去发挥作用的东西在我们前进的过程中不再适用于我们,我们将启动一个开源项目。有时这是出于性能的原因。有时候,这只是成本原因,又或是供应商锁定的原因。有的时候是我们正在将一大堆基础架构移植到更为前沿的技术上,有的时候是我们过去使用的一些传统供应商没有跟上节奏,或者不愿意在云或容器化环境中运行他们的软件。”

- Jared Smith, Capital One 开源社区经理

02

启动开源项目

经过了上述的考量,你已经对自己的项目计划做到了胸有成竹,那么接下来要做的事情就是稍微正式一些的对项目进行设置,当然先从法律部门开始,其中包括诸如代码扫描、清理工作,以确保代码是100%安全使用,为项目选择合适的开源许可协议。规划项目治理以在未来平稳的运营它,这部分的工作包括:建立适当的基础设施、准备好开源的代码,最后是向社区传达项目启动的消息,然后就是持续的更新文档。

法律审核

项目可能发生的最糟糕的事情之一就是社区对代码库的法律清白缺乏信任。确保您发布的代码具有明确的许可证和出处是非常重要的。完整的法律审查通常有助于确保获得贡献的内容将被社区中的其他人接受。这个审查的一个重要方面是验证贵公司是否有权发布所有代码。您的法律审查应包括商标尽职调查和注册。请注意,如果您将项目贡献于基金会,请确保您在开源您的代码库之前与商标战略形成一致。

您还需要为您的项目选择许可证。记录所有许可证或知识产权的要求是很重要的。知识产权政策可以成为创建的一个有用的文件,以明确所有许可证和贡献要求。此外,请确保您的代码具有嵌入每个文件中的许可证标题或 SPDX 许可证标识符。另一个最佳实践是在每次提交时都要求开发者原产地证书(DCO)‘签名’,以帮助改进代码的出处。例如,GitHub 已经构建了一个要求用于所有存储库的工具,该工具在 https://probot.github.io/apps/dco 上获取。

熟悉常见的开源许可证及其交易是很重要的。一些有明确的专利授权,一些有防御性的终止权利,一些保护用户的权利,一些提供措施条款,有些只是在您的行业中更简单或更普遍地被接受。您还需要为了您的依赖性考虑您的软件可能与其相结合或与之整合的其他代码库中正在使用的许可证。

除了软件源代码之外,还应考虑项目其他方面的许可证要求。如果您预计需要公司对专利授权的承诺,或者稍后重新授权项目的能力,那么您可能需要查看一些更常见的贡献者许可协议(通常称为 CLA)。并非所有的CLAs(贡献者许可协议)都是相似的,所以仔细考虑这个选项。还要注意,-CLAs(贡献者许可协议)可能成为参与的障碍,因为开发人员通常需要经过艰苦的审批流程才能签署协议。

您的项目也可能产生不是软件的交付物。如果您的项目正在生成文件,请讨论您是否应该为文件使用特定的许可证。例如,许多开源项目将开源许可证用于软件,而将 Creative Commons license( 创作共用授权)用于文件。此外,有些项目寻求创建可能由其他人以各种方式实施的规范。这些项目应考虑使用规格许可证的选项。其中一个例子就是开放容器倡议(OCI),它使用了 OWFa 1.0 版 —— 专利专用许可证,以及他们正在构建的开源软件实施的 Apache 许可证2.0版。

许可证的另一个常见问题是在著作权许可和许可证许可之间进行选择。著作权通常用于描述需要相互共享的许可证,并且通常试图保证用户接收他们被提供的软件的源代码的权利。许可证许可倾向于使其他人无需履行下游义务即可轻松参与和分享贡献。这特别有利于软件部分,这些软件部分要求软件生产商能够基于开源代码库分发专有软件,而不泄露其变更。

每种许可方式都有其优点和缺点,但要注意分裂项目的潜在风险,这是要求互用性或为各种供应商解决方案提供可移植性的软件的一个特殊问题。如果商业解决方案通过了社区创建的测试或一组要求,那么通常会通过创建允许使用项目商标的一致性程序来解决此问题。预先考虑这一点将有助于预示您的法律审查和项目计划。(有关开源法律问题和注意事项的更多信息,请参阅我们推荐的阅读清单。)

总结一下,法律上的审核流程可以包括下面几步:

[1]请慎重思考开源对于贵公司的知识产权影响

[2]确保完全符合开源许可证

[3]为源代码的发布选择一个开源的许可证,要对项目所有许可证要求作出清晰的说明

[4]如果需要一份贡献者意向书的话,也请考虑

[5]考虑社区可能提供的非软件输出和适当的许可证,例如文档和规范

[6]考虑所有和商标有关的事情

[7]决定是否还有其他因素可以纳入您的生态系统计划中,例如一致性测试

技术审核

技术审核是验证源代码中不可以包含其它内部代码的依赖,或者是开发实践,当然更加不能含有第三方的其它公司的代码,这些都是在项目发布时绝不允许出现的。

你要确保所要开源的项目中没有任何部分是违反了其它公司的诸如专利之类的知识产权的。有大量的以专利诉讼为“饭碗”的人在瞅着这一块了,他们就是以发现人们非法使用他人的专利而生存,所以你要特别的小心,这对于贵司来说是一个不容忽视的大问题,必须要在项目启动之前就将之消除。为此,公司可以选择一些专门的扫描工具来进行扫描,确保代码是”干净的”。确保添加了诸如许可协议、版权申明、以及该项目是干什么的、如何使用等文档。

技术审核须包括验证所有的许可协议、版权声明、以及是否有私有的代码注释未清理,其步骤包括:

[1]将严重依赖但不能公开的组件去掉

[2]请提供文档和案例

[3]删除内部的注释、引用、以及其他内部的代码等等

[4]确保代码风格的一致

[5]在源代码文件中更新版权所有的信息

[6]在源代码文件中更新许可证信息

[7]在仓库的根目录中添加许可证文件

未完待续!

这些资源是与TODO(公开对话,开放式开发)小组 – Linux基金会的专业开源程序网络小组合作创建的。特别感谢那些贡献自己的时间和知识来制作这些综合指南的开源项目经理。参与的公司包括Autodesk,Comcast,Dropbox,Facebook,Google,Intel,Microsoft,Netflix,Oath(Yahoo + AOL),Red Hat,Salesforce和Samsung。要了解更多信息,请访问 todogroup.org。我们邀请您在GitHub上下载、传播,如果可以请积极的参与这些指南。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-02,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 开源社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com