项目其实是一组安装和运行后可以解决某个问题的切实可行的软件。它是一种以代码来说话的协作和交流。你需要了解项目不是产品。产品是以解决客户的问题来盈利的东西。虽然很多出色的软件来自于运作良好、为工程技术减少一些工作的开源项目,但是仍有艰巨的工作要做,才能将它变成对客户而言解决问题的产品。比如Linux内核是项目,Fedora是发行版项目,RHEL却是产品。产品以满足客户对价值的期望来盈利。产品可默认安装、运行,附带保证和赔偿,还有服务(支持、升级、培训和咨询)以及针对特定产品的说明文档。它们可能是包括硬件和服务的更庞大产品组合的一部分。

贡献的计划

随着GitHub的出现,我们得到了一个令人难以置信的发布开源软件的工具。我们不仅得到了Git,一个安全贡献代码并且不会覆盖彼此工作的工具。
我们还得到了一个问题跟踪,
维基解释、书写文档和GitHub页面去显示你代码的一个可执行版本。

为了让人们尽可能容易的贡献代码,有如下几项变得很有意义:

  • 很好的readme文件。通常第一件事情就是去读它。首先说明这个项目实现了什么功能,归谁所有。同时列出所有剩余部分的清单和保证有最新的版本更新信息。
  • 如何使用项目的信息说明。大部分开发者贡献的项目都是可以正常运行的。确保你定义了如何运行项目,包括所有的依赖清单和必须的安装环境。
  • 有清晰的版本更新日志。它展示了你如何解决问题,新增的特性和项目的全面节奏。
  • 代码指南。简单的描述你如何编码到产品上,你的设置和环境,保证贡献的代码符合产品需求。这或许会燃起许多要讨论的地方,但是这保证了最终产品更容易维护。
  • 测试。采用多种方式来自动测试你的代码,并且在贡献你的代码之前要运行一系列的测试。在提交代码之前一定要确保贡献者有这么额外一步操作,否则会毁掉整个项目。
  • 反馈的渠道。在正常的开发模式之外给大家提供一个可以联系的机会,这样用户有机会向你报告代码其他不好的行为,向你询问些商业上的协议,或者仅仅向你说声谢谢,这并不会对已经非常忙碌的通信网络添加任何负担。
  • 贡献指南。说明如何写一个请求或问题,这样最有可能让社区成员(最初只有你自己)更好更快的处理它们。没有比一个没有答案或者很多“我们需要更新信息”的问题更糟的了。未解决的问题越少,你的项目越受欢迎。
  • 新手错误/特性。假如你做了像“新手易犯错误”说明那样的工作,把一些简单的问题标记出来,对于加入项目的新人来说这个一个很好的方式,在解决小问题的同时学习它。通过解决问题(或许是很小的问题)的方式加入一个小组这种感觉很好,远远超过在让人窒息的强人中发掘立足点强的多。
  • 考虑确立一个贡献者的行为准则。这个或许听起来有些遥远,但是定义成员之间什么可以说,什么不可以说的原则对于构建一个健康、创造性的社区是一个很好的开始,因为这个清晰的原则,管理员可以屏蔽一些没有价值的贡献代码。

并不是所有都必须这么严格,这样子的话有时候会矫枉过正。通过你的项目对他们的成长和提升有极大的帮助。如果你想在某个地方发现这样子好的示例库,包括所有这些东西,你可以在GitHub上的微软开发工具代码库上找到,假如你正在考虑代码准则的事务,TODO群提供了很好的模板。

Apache
Subversion是众所周知的SVN工具,是一个软件版本和版本控制系统,在一个开源许可下发布。目前,它是由一个Apache软件基金会的项目开发,也是全球性开发者和用户社区的一部分。

第八个文化基因:不混淆客户和社区。

当代码开源时需要准备的事

虽然这一切听起来不错,但也有开源带来的麻烦需要考虑。
你做你的工作,接着向公众开放你的成果。这意味着你首先需要准备一些可能很难处理的事情。

  • 固执己见是很不好的.
    当开源你的项目时得到的最初的反馈往往是委婉的,严厉的或是过于简短的。
    许多人有着非常明确和有限的意见关于”如何做事情,或不适当的开源”
    以及以他们所能指出的所有意见为乐。不要心灰意冷,看看这些和你一样得到残酷回应的人们,你只是他们中的一个,你应该知道的这是由于不同的心理在起作用。
  • 每个人都有意见.
    一些开源项目的评论是必不可少的,例如通过问题跟踪或拉取请求的方式告诉你,一些事情应该做地不一样。这意味着不要放弃它们,但有时候这是不可能的。处理的技巧是借助于投票,只有当足够多的人同意时,才去实行它们.。不要追逐不断的变化
    — 这将是一个你不能摆脱的时间陷阱。
  • 这不再是你的了。你很难放下工作,并且会看到它在超出你计划外的多个不同方向上发展。
    这就是分叉。对于好的项目,你可能不得不屈服于群众的智慧。如果它能够改变部分项目工作或保持贡献者的数量,这是值得的.。记住通过开源的东西,你未来会验证它。如果你不再继续项目,那么其他人需要去接管它。这可能意味着你需要确定项目可以以不同于你的初始方法来运转.
  • 你将写更少的代码和更多的文档. 一旦开放你的项目,
    你会花比编码更多的时间在回答问题,评论和查看上。
    你的责任开始从写好代码变成审查贡献确保没有添加包括安全或维护的问题。取代与解析器和虚拟机的战斗,你开始处理交际,以换取代码。
  • 你不用做每一件事.
    试着尽早委托和相信人们在没有你的监督和控制下做部分项目。这起初是艰难的,但可以让你以后做得更多。如果你以一个团队的方式开始项目,那么需要有定义好角色,并坚持下去。
  • 这不是嫉妒的地方.
    可能发生其中一件事是,你的产品将被用于其他人的产品,而他们取得了一个伟大的成功。甚至可能发生,与你所做不同的并且在你不赞成的方向,却成为了一个更大的成功。
    在最坏的情况下,有人会以你的工作为基础做的商业产品赚了很多钱。
    或创造的东西被另一家公司用很多钱收购了。 不要气馁。
    在这个过程中有很多的随机性,并不是你的错误导致的。
    继续保持,为别人的成功而高兴,美好的东西会回到你的身边。

TestNG是受到了JUnit的启发开发而成,但同时还具有一些新功能,所以相对而言,TestNG更加强大也更便于使用,如注解(annotations)、灵活的测试配置、数据驱动的测试和参数支持,以及强大的执行模型。它涵盖了单元测试、功能、端到端、集成测试,支持各种工具和插件(Eclipse、IDEA、Maven等)。具体内容可以参考分别使用
Maven Failsafe与 TestNG进行单元测试与集成测试的文章。

译者: 布加迪

开源是沟通

经过这些,我希望你仍能坚持开源你的项目。这不仅对你的代码有好处,同时你成为一个贡献者对于我们市场也是有巨大效益的。

释放开源意味着你知道并承担更多的责任。有一个成功的开源项目是得到好工作的踏脚石。这表明你关心并且想要做得更过。
为你的项目培养一个社区,处理反馈和贡献是作为开发人员领导者,团队领导或部门主管,一个很好的锻炼。
你让自己成为一个人力开发者而不仅仅是一个代码的开发者。当我雇用从事开源的开发人员时,我会看他们如何与他人互动。
我更喜欢雇用那些和其他人一起工作的人而不是那些创造了最令人惊讶的贡献的人。灵活的团队需要人们彼此合作。这是一个很好的工作方式。

但你呢?你已经参与开源了吗?如果没有,是什么阻止你吗?在下面的评论中让我知道。

  • Free as in Puppy — Open Sourcing Your JavaScript Code /
    像小狗一样自由 —
    开源你的JavaScript代码
  • 作者:Christian Heilmann , Rita Zhang
  • 链接:http://coyee.com/article/11479-free-as-in-puppy-open-sourcing-your-javascript-code
  • 标签:
    JavaScript
  • 版权:本文仅用于学习、研究和交流目的,非商业转载请注明出处、译者和可译网完整链接。

Git是一个免费开源的分布式版本控制系统,能够提高大小事务的速度和效率。相对于其他的配置管理工具,Git的特色在于提供廉价的局部分支、便利的暂存区和多个工作流。每个Git工作目录是一个完整的版本库,有完整历史和完整版本的跟踪能力、独立的网络接入或中央服务器。可以查看更多Git的文章。

第九个文化基因:早在开源定义之前,公司就共享宽松许可证的软件。

开源是自由‘免费的,就像小狗一样

如下是需要遵循的理念和建议,你或许没有时间或者不愿意全部遵循,没有关系,不好的是在一个开放的世界里教条式的生活。开源已经迅速发展为我们生活巨大的一部分,人们也犯着错误,我们要像我们发布的代码一样开放,我们要像处理程序问题一样处理我们的错误,我们要协作把这些问题解决掉。

开源javascript代码是很棒的,与此同时这也意味着责任。你要像照顾小狗那样,尽管你很忙:喂它食物,带它出去散步,把它收拾的漂亮的,陪它一起玩耍。它长成什么样子依赖于你怎样照顾它,你越像和人类一样待它,和它玩耍起来越容易,并且它会向人类一样保护你和帮助你,开源javascript代码就小狗一样对待我们,两者有个小小的区别是:小狗更加健忘,而代码不会,代码的社会性更少。要完全理解它是有一定的难度,在这里我们将会解决一部分,当我们来到javascript和开源的世界里,我们首先应该声明一件最重要的事。

IntelliJ已经引起了开发者的“追捧”,甚至比Eclipse还受宠,有免费版和专业版。IntelliJ为众多Java
EE框架提供了针对框架的编码帮助和提升生产效率的功能,还有大多数应用服务器的部署工具。

第七个文化基因:不混淆产品和项目。

Javascript 一直是可以被使用的——但是它不是开放的

有些东西是可用的,并不意味着它是免费或开放的。就好像我忘了锁我的自行车,并不意味着你被邀请骑自行车了.就好像我放一个牌子,上面写着“社区自行车,骑自行车,但请保持清洁,并修理它“。我们越来越接近开放和自由的软件时代。
很棒的是软件可以无损耗地被复制。很棒的是javaScript可以在网页上被任何人看到.
许多JavaScript的杰出者都是通过别人的代码来学习它的。
并不意味着你可以复制和粘贴它,调用它 –
除非它的许可证明确允许你这样做。我无数次的在与客户交谈中被问及如何保护JavaScript以免被别人看见。
这就像在要求水不是湿的一样。JavaScript是一个极好的开放源代码的候选语言。
它对你清晰可见,不妨让它合法重用。

 

结束语

许可事项

关于最后一点,这是开源项目中非常重要的部分。 并且是最难的,
讨论最激烈以及困惑的部分:代码许可证。
作为一个开发者,
我们大多看到法律、许可和协议,都会尽可能的远离。然而,开源代码许可证在许多方面都很重要。

  • 自我保护.
    一个明确的许可证,不仅确保人们不能在违背你的意愿下使用你的代码。这也意味着基于软件的安全漏洞并不能够送你进监狱,
    因为这被清晰的记录在许可证中。
  • 您定义二次利用的程度.
    根据许可证,你定义人们是否可以根据你的项目搭建商业产品。你定义,人们是否需要列出你作为他们的项目贡献者。你能确定代码的一些使用是非法的,
    而其他的则没有问题.
  • 你给了一个谁可以作出贡献明确的信息。
    开源的核心贡献者不会在具有一定许可证的项目上工作。开源项目的商业用户除非有许可证否则不能使用代码。通过选择正确的许可证,你可以限制或扩展谁能在你的项目上工作。它也保护你以免其他人用你的项目致富而你没有得到分红。

幸运的是,如何选择正确的许可证在开源社区里不断地被讨论。
这里有很多很好的资源, 像
http://choosealicense.com
或者
https://tldrlegal.com
或者
https://tldrlicense.com。

一定要做出明智的选择,更换许可证是很困难的,有时甚至是不可能的。

Apache
Continuum是一个企业级持续集成服务器。提供的特性包括:自动构建、发布管理、基于角色的权限管理,以及能与其它流行构建工具和源代码管理系统相集成。

林纳斯定律可以笼统地表述为“给予足够的关注,所有代码错误都会浮现出来。”我认为这实际上表明了提交审查过程的重要性。研究表明,审查环节发现的错误比测试环节发现的还多。一个健康的社区势必在代码签入(check-in)方面有一套严格的审查流程。

用于商业用途

看到你的产品被用在一个商业产品中这是令人兴奋的。如果谷歌、Facebook或微软使用了你的脚本,这是相当有意义的。然而,这也意味着你需要确保某些事情是到位的,否则,这些是没有办法实现的。
这通常是很棒的,他们是一个除非你提供给他们的其他都用于商业用途的公司。

  • 确保你的产品支持国际化。
    有一个翻译字符串的方法,确保布局可以从左到右变成右到左。允许非ASCII输入支持。
  • 确保你的产品可以与各种输入设备搭配。可访问性是一个合理的要求对于大公司来说。
  • 确保你的产品不固定在一个环境中。有时一个大玩家会喜欢使用你的产品,但不能在你的电脑上像你一样地开发,并不是因为世界大。
  • 确保您的产品有一个允许商业使用的许可证。这应该是显而易见的,但许多产品的初始许可证不能被重用,因为太严格了。

如果你想了解更多关于这个,克里斯·迪亚斯对于Enterprise JS有一个微软Visual
Studio如何构建代码的开放源码项目和引起的问题的伟大演讲。

质量分析


开源不仅仅只是向公众提供一些可用的东西。
不但要提供你的代码,而且也是关系到项目权限的管理,以及自己的理解和参与其中,就像“喂养小猫”—-换句话说就是还要处理社区相关问题。
在本文中,我们将简要介绍开源你代码的带来的好处和应避免的陷阱。

持续集成

不妨看一下与开源软件的社区方面有关的几个文化基因。

成为一个好的开源发布者

这听起来有些难以实现,不要绝望。 这并不像听起来那么困难,
我只是想让你为将来做好准备。 同时我想确保发布开源不是为了使其可用。
也不是要你给世界一个礼物。而是你与世界分享你的成果,并在过程中开放式地改变它。

我想确定成为伟大的开源出版商的方式,在你的初始版本中你可以添加一些额外的工作为了确保人们可以帮助你,
以及不会碰到因明显的的错误而导致令人沮丧的回馈。
很多是回答问题之前,他们提出来的。 因此重点来了:

Apache
JMeter是开源的Apache项目,实际上是一个专为负载功能测试和性能测试的Java应用。它最初的设计是用于Web应用,但现在已扩展到其他测试功能。它可以测试静态和动态资源性能,模拟一个或多个服务器负载来测试它的强度或者分析不同负载类型下的整体性能。可以查看关于Jmeter的更多详情。

你会补充什么样的文化基因?你有什么样的经验之谈?欢迎留言交流。

图片 1

Apache
Ant是一个开源的Apache项目,经Apache软件许可发布。它由多种内置任务而成,允许开发者编写、装配、测试和运行java应用程序。它的特点是高度灵活,不会严格限制Java项目的编码惯例或目录布局。

这是社区协作式开发的经济效率。不断贡献可谓是项目软件发展的生命线。贡献者贡献代码或提供修正版没有多大的风险,但是得到的好处是,整个软件可以按贡献者觉得合适的方式来使用。而至于路过式贡献,这可能是开发人员给予的唯一重大贡献,不管他们的经验和专长如何。

代码开源的好处

现在,当保留这些代码可能让你成为百万富翁的时候,为什么你还要费心去与世界分享呢?
这样做有相当多的好处::

  • 其他人也有好的想法.通过允许人们做出贡献,我的许多代码都有了很大的提高。
    他们提出了我没有想到的解决方案。他们帮我写出更简洁,更容易理解的代码。他们发现了我不曾考虑的问题。而我不需要为此支付任何东西!
  • 它是一个代码的试金石.
    人们有不同的环境来测试我的代码,告诉我问题,
    更有甚者帮我解决它。在普通场景中隐藏草率的代码这是不可能的。总之,我使我的代码有可用,使我更多的关心代码的质量,从而成为一个更好的开发者。
  • 你成为更大的一部分.
    你的代码被用于其他项目是一件非常激动人心的(有时可怕)事。.
    这是一个很棒的感觉授权别人搭建他们自己曾经不能够搭建的东西。
    当看到你的作品被你认为比你更好的人使用的.
  • 你的工作生活,无论它是什么.如果你不能或不愿继续维护你的代码,你想继续前进,
    开源意味着你很幸运.
    你与一个社区分享责任,他们从你的最初的工作中受益.
  • 你找到一群志同道合的朋友合作.
    巨大的代码开源的好处之一是,你找到愿意在你兴奋的事情上和你合作的人.
    这是非常有价值的对于寻找新的工作,
    想要招聘合适的人或者跳槽到另一家公司。作为一个大公司,
    开放源代码意味着你可以选择新的员工从贡献社区.
    这些都是已经在了解和对你的产品感兴趣的人。
    这减少了数月的入职培训,从而意味着一大笔钱保存。
  • 你了解行业的工具。
    释放一个JavaScript项目如今已成为更复杂的比提供一个zip的脚本。有各种不同的编辑器的预置文件,包管理器和方法来自动测试您的脚本。如果你不想全身心投入,
    你可以寻求贡献者的帮助。
    当你分享责任的时候就不需要了解你没兴趣的解决方案的本质了。

正如你已经看到,这些好处很多都与编写代码不相关。它们都源于以尊重和专业的方式与他人打交道。

Gradle是一个开源的自动化构建系统。Gradle可以自动构建、测试、发布、部署,还有多种软件包或其他类型项目,如生成静态网站。Gradle结合了Ant的能力和灵活性,以及Maven的依赖管理和约定,形成了一种高效的构建方式。

程序因使用而完善。错误被发现后要加以修复。发现新的用途,从而推动新功能。程序不断得到磨练和加强。程序从一个环境移植到另一个环境。遗憾的是,版权在1980年成了“保护”软件发布管道的机制。人们也许不明白软件的发展有多快、衍生版的开发有多快,或者也许不明白物联网和万维网问世后,这种动态性只会加快。我们共享网络带宽已从磁带大小的口袋、会议日程表和杂志出版延迟变成了全天候的实时全球构建、发布和维护。

开源可能是发生在我们的市场中的最令人兴奋的事情,同时也是网络的爆炸性增长的原由。
我们的大多数服务器都是开源技术,很多浏览器代码也是,甚至我们如今使用的编辑器都是用JavaScript编写的。
用尊重和高质量来对待开源代码是我们的责任,而不是轻叩在墙上的代码,并希望魔法发生。

WildFly,其前身是JBoss
AS或Jboss,是一个由Jboss开发的应用服务器,现在由红帽在开发维护。它是用Java编写的,并且实现了Java平台和企业版(Java
EE)规范。WildFly是可以在多个平台上运行的免费开源工具。

Project
Athena(X11,Kerberos)始于1983年。开放系统基金会(OSF/Motif,OSF /
1)始于1988年。DEC和Sun从早期的BSD版本分别开发出了Ultrix和SunOS。这不是新的行为。

集成

我认为,共享归结为这个简单的现实:编写优秀软件很困难。软件开发领域有两大比率:开发人员在一天之内平均可以编写的代码行数,合理开发流程出来的每千行代码的错误数量。从语言进化到架构重复使用的所有软件方面的进展围绕这个中心思想:用更少行的代码编写出更多更优秀的软件。软件构建可靠性、配置管理、审查工具和流程以及测试方面的进步,都旨在减少合理的软件交付流程出来的错误数量。

JUnit是一个Java语言的单元测试框架,用于编写和运行可重复的测试。它为测试预期结果提供断言,为共享的常用测试数据提供测试装置(test
fixtures),以及运行测试的测试者(test
runners)。可以在这里看一下千锋教育官网的免费教程。

上世纪50年代末,IBM开办了一场计算机大会,这个大会一直持续到今天,名叫SHARE。DEC在60年代开办,支持DECUS社区,你可以在其会议上购买装满其他人编写和贡献的软件的磁带。USENIX起源于70年代,当时适逢使用磁带发布早期UNIX版本。但是这种共享的做法完全可以追溯到40年代普林斯顿高级研究所的第一台可编程计算机上的开发工作。

SoapUI是一个免费的开源跨平台的功能测试解决方案。它提供了一个图形界面和企业级功能,允许创建和执行自动化功能、回归、符合性和负载测试。SoapUI在一个测试环境下提供了完整的测试覆盖率,而且支持所有的标准协议和技术。

第四个文化基因:软件天生是动态的。

FindBugs也是开源的工具,在Lesser GNU Public
license许可下发布。它运行在Java字节码上而不是源代码,可以识别和确定潜在错误的严重程度,如空指针引用、无限递归循环、Java库和死锁的错误使用。同时,它还可以作为Eclipse、NetBeans,IntelliJ
IDEA的插件。可以参考FindBugs Eclipse实例。

最后,几个文化基因涉及开源软件方面的许可和法律讨论。

Checkstyle的是一个开发工具,可以帮助程序员坚持按编码标准来编写Java代码,会自动启动Java代码检查。它的配置性很强,能支持几乎任何的编码标准。

出处:51CTO.com 

Apache
Maven是一个非常著名的软件项目管理和综合工具。基于项目对象模型(POM)的概念,它的信息中心管理着项目的构建、报告和文档。Maven提供了一个统一的构建系统、项目信息和最佳的开发实践指导,并且支持新功能的透明迁移。

编写优秀软件离不开章法。如果你看一下作为成功产品或者开源项目的软件,构建时通常会由同行审查,实行版本控制和配置管理,构建自动化和测试框架与软件一同完善。要是没有审查、配置管理以及构建和测试自动化,软件无法在用户社区里面进行扩展,作为一款产品也无法在成千上万的用户当中进行扩展。需要维护软件的核心小组一定要能够回答“软件执行什么”。

Mockito是一个mocking框架,帮助开发者编写具有简洁API的精美测试。其测试的可读性很好,并能产生清晰的验证错误。使用Mockito还能在执行后可以对交互进行问询。Mocks是透明的,所以开发者可以专注于测试选定的行为。更多详情可以参考mockito的相关文章。

试图构建开源项目的公司常常很难了解社区。他们想,有人得为自己提供东西。他们习惯于向社区(比如开发者网站)发号施令,而不是协作。有三个文化基因适用于公司和开源。

Apache
Tomcat是一个开源的Web服务器和Servlet容器,由Apache软件基金会(ASF)开发。它实现了几个Java
EE规范,包括Java Servlet、JavaServer Pages(JSP)、Java
EL和WebSocket,提供了一个可以运行Java代码的HTTP
Web服务器环境。想要了解更多请点击。

第十个文化基因:软件自由和开源许可是不同的讨论话题。

SonarQube是一个开源的平台,现已成为代码质量管理系统的世界领先者,并且因代码质量的持续检查为众人所知。除了Java外,它还支持大多数的语言,而且可以用作Android开发,它集成了大多数的持续集成工具。SonarQube会为重复代码、编码标准、单元测试、代码覆盖、复杂代码、潜在错误、注释、设计和架构而产生报告。

第六个文化基因:有人吃白食是成功的关键。

Jenkins是一个屡获殊荣的应用程序,能够监视重复的工作,从建立一个软件项目到由cron运行的作业。它的基本功能是不断建立和测试软件项目,使得开发者能更容易地将变更集成到项目中,使用户更容易获得新的构建。Jenkins还可以监控外部运行任务的执行,如cron
jobs,即使是运行在远程计算机上的任务。

公司与相关社区的交流跟其与付费客户的交流不一样。每次交流都有特定的工具和交战规则,以及需要记录和考虑的度量指标。社区成员非常具有价值,但他们不是客户。

GlassFish是由Sun Microsystems的Java
EE平台起步,现在由Oracle公司赞助的开源应用服务器项目。支持的版本叫做Oracle
Glassfish应用服务器。
GlassFish是免费软件,经两个免费的软件许可证批准:通用开发与发布许可(CDDL)和GNU通用公共许可证(GPL)。

上世纪90年代中期至末期,我和同事利用宽松许可证软件开办了一家软件公司,那时候开源软件这个术语还没有问世。这其实没有太大的神秘性可言。我们收集并移植了大约250个采用25个不同许可证的程序包(这些许可证包括伯克利许可证、MIT许可证和GPLv2),并结合我们自己的软件,还有一些重要软件是微软拥有的,其许可证允许我们使用。我们把它开发成了一款我们公司全力支持的产品,这款产品采用了我们自家产品的许可证。我们以不同方式参与了那些不同的协作社区。作为一批工程师和商界人士,我们能够在UNIX系统社区中不断成长,得益于悠久的协作和共享历史。

Oracle WebLogic服务器是一个Java
EE应用服务器,目前由Oracle公司开发,用于构建和部署企业应用Java
EE,支持降低运营成本、提高性能、增强可扩展性和支持Oracle应用组合等的新特性。

为此,我收集了12个文化基因,在我看来它们有助于分享历史、搭建舞台,并为开源的定义以及它对整个软件行业的意义提供上下文。

集成开发环境

原文:12 memes of
open source
software

NetBeans的也属于IDE类,允许开发者快速、简便地开发桌面应用、移动应用和Web应用。NetBeans是免费开源的,还拥有全球性的用户和开发者社区。

第十二个文化基因:基金会有一席之地。

版本控制

这头几个文化基因涉及软件的构建。我认为,它们定义了我们所认为的成功的开源项目,因为它们就是涉及软件本身的基本方面。了解这些文化基因的项目才会成功。采用宽松许可证、注重社区的软件可能是我们用来构建和维护优秀软件的最出色、最高效的软件重复使用机制。

Hudson是一个用Java编写的持续集成(CI)工具,在应用服务器上运行。它支持各种SCM工具,如Subversion、Git,可以执行Apache
Ant和Apache
Maven项目,以及任意shell脚本和Windows批处理命令。它监视重复任务的执行,如建立一个软件项目或由cron运行的作业。

这个文化基因的一个推论可能是:“没有人来为你构建你的产品。”

JDeveloper是Oracle提供的一个免费的集成开发环境,它为Oracle融合中间件和融合应用产品提供完整的端到端开发,支持整个开发生命周期。

如果说第七个文化基因涉及工程技术和商业模式,那么第八个文化基因就涉及讯息和销售。社区和客户的价值观不一样。客户是花钱来加快解决问题,消除风险,而社区(及社区中的个人)通过合作,构建自己的解决方案。使用开源软件的一些公司认为,项目社区是产品管道的一部分;他们在社区论坛中找到客户时,就会进一步这么认为。他们甚至可能认为,社区项目是一种先试后买的东西。可是,这一切都是错误的。

应用服务器

坊间传闻,在一个开源项目的每1000个用户中,有100人可能报告软件错误,其中10人贡献潜在的修正版,其中只有1人仔细阅读贡献准则。实际上,社区成功有三条途径(社区成功的衡量标准是代码贡献)。一个是软件需要异常容易安装和使用,那样项目才会获得大量用户。二是用户群当中会有开发者。软件需要异常容易构建和测试,那样想要更改(为了自己的私利)的开发者很容易更改。三是需要异常容易能够回过头来向项目贡献变更,那样贡献才会源源不断。有大量吃白食的人意味着你干得不赖。这样,如果有大量用户,对开发者来说会大有潜力,贡献的可能性也会随之而来。但是项目的责任是确保容易。

Web应用测试

得到的回报大于贡献既适用于个人,也适用于公司。来自红帽、英特尔和IBM等几家大公司的专用资源和投入让它们得以借助整个Linux操作系统来实行不同的商业战略。公司可以将优秀的软件项目变成解决客户问题的产品。

测试

作者: Stephen R. Walli

PMD是一个源代码分析器。它可以检测到常见的编程错误,如未使用的变量、空的catch块、不必要的对象创建等等。它支持除了包括Java的大多数语言,还包含CPD、复制粘贴探测器。

许可证定义了别人可以如何使用软件。软件受版权法保护,需要选择经OSI批准的许可证[1]。你选择的许可证声明了你在社区中想要的那种社会契约。虽然近年来,很多人默认选择Apache软件许可证为“对商业友好”的许可证,但它未必就是如此。互惠许可证还是随意许可证并不是谈论免费软件还是开源软件。互惠许可证也许是对生态系统友好的最佳许可证。

 

争论软件自由与开源软件就好比争论民主主义是否比资本主义更好,或者争论言论自由是否比自由市场更重要。它们本身都是重要的讨论,人们往往对于某个主题有天然的倾向性,但它们是不一样的讨论。软件自由语言由用户权利来界定,开源软件语言则由许可证的属性来界定。这些是不同的讨论。

Apache Ivy是一种流行的依赖管理工具,注重灵活性和简单性。它是Apache
Ant项目的一个子项目,而Ivy用来解决项目依赖项。外部的XML文件定义项目依赖项,并列出构建项目的所需资源。然后Ivy从artifact存储库(artifact
repository)中下载资源,它具有良好的灵活性和可配置性。Apache
Ivy是由Apache Apache Ant集成的,因此将使Apache
Maven的依赖管理优势也带到Apache Ant构建文件中,为那些已经使用Apache
Ant且不想迁移到Apache Maven的开发者提供了便利。

回头看看这些文化基因,我认为它们与我在20年前会写下来的文化基因一模一样。

Arquillian是一个Java和JVM的测试平台,主要侧重于集成和功能测试。它去掉了单元测试,重点关注真正实时环境下的程序代码的相互作用。Arquillian为测试配备了容器生命周期管理和典型测试精选。

开源软件意味着什么?当你需要向别人解释时,如何省心又省力地传达开源的价值和精髓?自从开源这个短语在1997年首次提出以来,业界在开源方面已经获得了许多来之不易的经验教训,我们不应该忘记这些经验教训。

Eclipse是最有名也最广泛使用的Java集成开发环境(IDE),允许开发者结合语言支持和其他功能到任何的默认包中,而且Eclipse市场有许多定制和扩展的插件。

第一个文化基因:自我们编写软件以来就共享软件。

非营利性组织可提供公平的竞争环境和IP(知识产权)所有权的中立性,从而让公司能够专门致力于一家运行良好的开源项目。

第十一个文化基因:每个开源项目都需要许可证。

第三个文化基因:没有毫无章法的规模扩展。

第五个文化基因:你得到的总是多过给予的。

第二个文化基因:编写优秀软件是艰苦的工作。