开源不仅仅只是向公众提供一些可用的东西。 不但要提供你的代码,而且也是关系到项目权限的管理,以及自己的理解和参与其中,就像“喂养小猫”----换句话说就是还要处理社区相关问题。 在本文中,我们将简要介绍开源你代码的带来的好处和应避免的陷阱。
开源可能是发生在我们的市场中的最令人兴奋的事情,同时也是网络的爆炸性增长的原由。 我们的大多数服务器都是开源技术,很多浏览器代码也是,甚至我们如今使用的编辑器都是用JavaScript编写的。 用尊重和高质量来对待开源代码是我们的责任,而不是轻叩在墙上的代码,并希望魔法发生。
开源是自由‘免费的,就像小狗一样
如下是需要遵循的理念和建议,你或许没有时间或者不愿意全部遵循,没有关系,不好的是在一个开放的世界里教条式的生活。开源已经迅速发展为我们生活巨大的一部分,人们也犯着错误,我们要像我们发布的代码一样开放,我们要像处理程序问题一样处理我们的错误,我们要协作把这些问题解决掉。
开源javascript代码是很棒的,与此同时这也意味着责任。你要像照顾小狗那样,尽管你很忙:喂它食物,带它出去散步,把它收拾的漂亮的,陪它一起玩耍。它长成什么样子依赖于你怎样照顾它,你越像和人类一样待它,和它玩耍起来越容易,并且它会向人类一样保护你和帮助你,开源javascript代码就小狗一样对待我们,两者有个小小的区别是:小狗更加健忘,而代码不会,代码的社会性更少。要完全理解它是有一定的难度,在这里我们将会解决一部分,当我们来到javascript和开源的世界里,我们首先应该声明一件最重要的事。
Javascript 一直是可以被使用的——但是它不是开放的
有些东西是可用的,并不意味着它是免费或开放的。就好像我忘了锁我的自行车,并不意味着你被邀请骑自行车了.就好像我放一个牌子,上面写着“社区自行车,骑自行车,但请保持清洁,并修理它“。我们越来越接近开放和自由的软件时代。 很棒的是软件可以无损耗地被复制。很棒的是javaScript可以在网页上被任何人看到. 许多JavaScript的杰出者都是通过别人的代码来学习它的。 并不意味着你可以复制和粘贴它,调用它 – 除非它的许可证明确允许你这样做。我无数次的在与客户交谈中被问及如何保护JavaScript以免被别人看见。 这就像在要求水不是湿的一样。JavaScript是一个极好的开放源代码的候选语言。 它对你清晰可见,不妨让它合法重用。
代码开源的好处
现在,当保留这些代码可能让你成为百万富翁的时候,为什么你还要费心去与世界分享呢? 这样做有相当多的好处::
- 其他人也有好的想法.通过允许人们做出贡献,我的许多代码都有了很大的提高。 他们提出了我没有想到的解决方案。他们帮我写出更简洁,更容易理解的代码。他们发现了我不曾考虑的问题。而我不需要为此支付任何东西!
- 它是一个代码的试金石. 人们有不同的环境来测试我的代码,告诉我问题, 更有甚者帮我解决它。在普通场景中隐藏草率的代码这是不可能的。总之,我使我的代码有可用,使我更多的关心代码的质量,从而成为一个更好的开发者。
- 你成为更大的一部分. 你的代码被用于其他项目是一件非常激动人心的(有时可怕)事。. 这是一个很棒的感觉授权别人搭建他们自己曾经不能够搭建的东西。 当看到你的作品被你认为比你更好的人使用的.
- 你的工作生活,无论它是什么.如果你不能或不愿继续维护你的代码,你想继续前进, 开源意味着你很幸运. 你与一个社区分享责任,他们从你的最初的工作中受益.
- 你找到一群志同道合的朋友合作. 巨大的代码开源的好处之一是,你找到愿意在你兴奋的事情上和你合作的人. 这是非常有价值的对于寻找新的工作, 想要招聘合适的人或者跳槽到另一家公司。作为一个大公司, 开放源代码意味着你可以选择新的员工从贡献社区. 这些都是已经在了解和对你的产品感兴趣的人。 这减少了数月的入职培训,从而意味着一大笔钱保存。
- 你了解行业的工具。 释放一个JavaScript项目如今已成为更复杂的比提供一个zip的脚本。有各种不同的编辑器的预置文件,包管理器和方法来自动测试您的脚本。如果你不想全身心投入, 你可以寻求贡献者的帮助。 当你分享责任的时候就不需要了解你没兴趣的解决方案的本质了。
正如你已经看到,这些好处很多都与编写代码不相关。它们都源于以尊重和专业的方式与他人打交道。
当代码开源时需要准备的事
虽然这一切听起来不错,但也有开源带来的麻烦需要考虑。 你做你的工作,接着向公众开放你的成果。这意味着你首先需要准备一些可能很难处理的事情。
- 固执己见是很不好的. 当开源你的项目时得到的最初的反馈往往是委婉的,严厉的或是过于简短的。 许多人有着非常明确和有限的意见关于"如何做事情,或不适当的开源” 以及以他们所能指出的所有意见为乐。不要心灰意冷,看看这些和你一样得到残酷回应的人们,你只是他们中的一个,你应该知道的这是由于不同的心理在起作用。
- 每个人都有意见. 一些开源项目的评论是必不可少的,例如通过问题跟踪或拉取请求的方式告诉你,一些事情应该做地不一样。这意味着不要放弃它们,但有时候这是不可能的。处理的技巧是借助于投票,只有当足够多的人同意时,才去实行它们.。不要追逐不断的变化 — 这将是一个你不能摆脱的时间陷阱。
- 这不再是你的了。你很难放下工作,并且会看到它在超出你计划外的多个不同方向上发展。 这就是分叉。对于好的项目,你可能不得不屈服于群众的智慧。如果它能够改变部分项目工作或保持贡献者的数量,这是值得的.。记住通过开源的东西,你未来会验证它。如果你不再继续项目,那么其他人需要去接管它。这可能意味着你需要确定项目可以以不同于你的初始方法来运转.
- 你将写更少的代码和更多的文档. 一旦开放你的项目, 你会花比编码更多的时间在回答问题,评论和查看上。 你的责任开始从写好代码变成审查贡献确保没有添加包括安全或维护的问题。取代与解析器和虚拟机的战斗,你开始处理交际,以换取代码。
- 你不用做每一件事. 试着尽早委托和相信人们在没有你的监督和控制下做部分项目。这起初是艰难的,但可以让你以后做得更多。如果你以一个团队的方式开始项目,那么需要有定义好角色,并坚持下去。
- 这不是嫉妒的地方. 可能发生其中一件事是,你的产品将被用于其他人的产品,而他们取得了一个伟大的成功。甚至可能发生,与你所做不同的并且在你不赞成的方向,却成为了一个更大的成功。 在最坏的情况下,有人会以你的工作为基础做的商业产品赚了很多钱。 或创造的东西被另一家公司用很多钱收购了。 不要气馁。 在这个过程中有很多的随机性,并不是你的错误导致的。 继续保持,为别人的成功而高兴,美好的东西会回到你的身边。
许可事项
关于最后一点,这是开源项目中非常重要的部分。 并且是最难的, 讨论最激烈以及困惑的部分:代码许可证。
作为一个开发者, 我们大多看到法律、许可和协议,都会尽可能的远离。然而,开源代码许可证在许多方面都很重要。
- 自我保护. 一个明确的许可证,不仅确保人们不能在违背你的意愿下使用你的代码。这也意味着基于软件的安全漏洞并不能够送你进监狱, 因为这被清晰的记录在许可证中。
- 您定义二次利用的程度. 根据许可证,你定义人们是否可以根据你的项目搭建商业产品。你定义,人们是否需要列出你作为他们的项目贡献者。你能确定代码的一些使用是非法的, 而其他的则没有问题.
- 你给了一个谁可以作出贡献明确的信息。 开源的核心贡献者不会在具有一定许可证的项目上工作。开源项目的商业用户除非有许可证否则不能使用代码。通过选择正确的许可证,你可以限制或扩展谁能在你的项目上工作。它也保护你以免其他人用你的项目致富而你没有得到分红。
幸运的是,如何选择正确的许可证在开源社区里不断地被讨论。 这里有很多很好的资源, 像 http://choosealicense.com 或者 https://tldrlegal.com 或者 https://tldrlicense.com。
一定要做出明智的选择,更换许可证是很困难的,有时甚至是不可能的。
成为一个好的开源发布者
这听起来有些难以实现,不要绝望。 这并不像听起来那么困难, 我只是想让你为将来做好准备。 同时我想确保发布开源不是为了使其可用。 也不是要你给世界一个礼物。而是你与世界分享你的成果,并在过程中开放式地改变它。
我想确定成为伟大的开源出版商的方式,在你的初始版本中你可以添加一些额外的工作为了确保人们可以帮助你, 以及不会碰到因明显的的错误而导致令人沮丧的回馈。 很多是回答问题之前,他们提出来的。 因此重点来了:
贡献的计划
随着GitHub的出现,我们得到了一个令人难以置信的发布开源软件的工具。我们不仅得到了Git,一个安全贡献代码并且不会覆盖彼此工作的工具。 我们还得到了一个问题跟踪, 维基解释、书写文档和GitHub页面去显示你代码的一个可执行版本。
为了让人们尽可能容易的贡献代码,有如下几项变得很有意义:
- 很好的readme文件。通常第一件事情就是去读它。首先说明这个项目实现了什么功能,归谁所有。同时列出所有剩余部分的清单和保证有最新的版本更新信息。
- 如何使用项目的信息说明。大部分开发者贡献的项目都是可以正常运行的。确保你定义了如何运行项目,包括所有的依赖清单和必须的安装环境。
- 有清晰的版本更新日志。它展示了你如何解决问题,新增的特性和项目的全面节奏。
- 代码指南。简单的描述你如何编码到产品上,你的设置和环境,保证贡献的代码符合产品需求。这或许会燃起许多要讨论的地方,但是这保证了最终产品更容易维护。
- 测试。采用多种方式来自动测试你的代码,并且在贡献你的代码之前要运行一系列的测试。在提交代码之前一定要确保贡献者有这么额外一步操作,否则会毁掉整个项目。
- 反馈的渠道。在正常的开发模式之外给大家提供一个可以联系的机会,这样用户有机会向你报告代码其他不好的行为,向你询问些商业上的协议,或者仅仅向你说声谢谢,这并不会对已经非常忙碌的通信网络添加任何负担。
- 贡献指南。说明如何写一个请求或问题,这样最有可能让社区成员(最初只有你自己)更好更快的处理它们。没有比一个没有答案或者很多“我们需要更新信息”的问题更糟的了。未解决的问题越少,你的项目越受欢迎。
- 新手错误/特性。假如你做了像“新手易犯错误”说明那样的工作,把一些简单的问题标记出来,对于加入项目的新人来说这个一个很好的方式,在解决小问题的同时学习它。通过解决问题(或许是很小的问题)的方式加入一个小组这种感觉很好,远远超过在让人窒息的强人中发掘立足点强的多。
- 考虑确立一个贡献者的行为准则。这个或许听起来有些遥远,但是定义成员之间什么可以说,什么不可以说的原则对于构建一个健康、创造性的社区是一个很好的开始,因为这个清晰的原则,管理员可以屏蔽一些没有价值的贡献代码。
并不是所有都必须这么严格,这样子的话有时候会矫枉过正。通过你的项目对他们的成长和提升有极大的帮助。如果你想在某个地方发现这样子好的示例库,包括所有这些东西,你可以在GitHub上的微软开发工具代码库上找到,假如你正在考虑代码准则的事务,TODO群提供了很好的模板。
用于商业用途
看到你的产品被用在一个商业产品中这是令人兴奋的。如果谷歌、Facebook或微软使用了你的脚本,这是相当有意义的。然而,这也意味着你需要确保某些事情是到位的,否则,这些是没有办法实现的。 这通常是很棒的,他们是一个除非你提供给他们的其他都用于商业用途的公司。
- 确保你的产品支持国际化。 有一个翻译字符串的方法,确保布局可以从左到右变成右到左。允许非ASCII输入支持。
- 确保你的产品可以与各种输入设备搭配。可访问性是一个合理的要求对于大公司来说。
- 确保你的产品不固定在一个环境中。有时一个大玩家会喜欢使用你的产品,但不能在你的电脑上像你一样地开发,并不是因为世界大。
- 确保您的产品有一个允许商业使用的许可证。这应该是显而易见的,但许多产品的初始许可证不能被重用,因为太严格了。
如果你想了解更多关于这个,克里斯·迪亚斯对于Enterprise JS有一个微软Visual Studio如何构建代码的开放源码项目和引起的问题的伟大演讲。
开源是沟通
经过这些,我希望你仍能坚持开源你的项目。这不仅对你的代码有好处,同时你成为一个贡献者对于我们市场也是有巨大效益的。
释放开源意味着你知道并承担更多的责任。有一个成功的开源项目是得到好工作的踏脚石。这表明你关心并且想要做得更过。 为你的项目培养一个社区,处理反馈和贡献是作为开发人员领导者,团队领导或部门主管,一个很好的锻炼。 你让自己成为一个人力开发者而不仅仅是一个代码的开发者。当我雇用从事开源的开发人员时,我会看他们如何与他人互动。 我更喜欢雇用那些和其他人一起工作的人而不是那些创造了最令人惊讶的贡献的人。灵活的团队需要人们彼此合作。这是一个很好的工作方式。
但你呢?你已经参与开源了吗?如果没有,是什么阻止你吗?在下面的评论中让我知道。
- 作者:Christian Heilmann , Rita Zhang
- 链接:http://coyee.com/article/11479-free-as-in-puppy-open-sourcing-your-javascript-code
- 标签: JavaScript
- 版权:本文仅用于学习、研究和交流目的,非商业转载请注明出处、译者和可译网完整链接。