河套 IT TALK——TALK 4:开源的价值观
开源社区完整的价值观和价值主张,是议事规则和项目协作的核心指引。这是由开源参与者和开源社区在长期技术开发协作中形成的共同价值观。以开源价值观为核心的开源方法论不仅应用于开源技术的研究和发展,也在解决社会复杂问题的实践过程中发挥着重要的作用。开源价值观的内涵主要体现为透明、独立、公约、开放、务实五大方面。
透明
透明作为开源实践中发展出来的价值观,这是在软件工程领域内为所有工程领域开创一个新的、可被复制的、且符合科学发展观的价值观,是社会协作领域内又一新的文明象征。
源代码是软件工程的过程产物、产品的载体和媒介。透明价值观提倡将这种载体的真实情况公之于众,以便于软件领域的复用、改造和改进。
这种循环迭代的过程,在一个独立软件工程项目内是符合科学规律的,开源将这个过程扩大到了整个社会层面,超越了原来狭窄的工程范围。进一步,工程开发循环往复的基本特征,需要一种好的运作机制来保证项目的持续活力。
这种运作机制的基石,就是信任的建立。在开源项目中,项目贡献者之间的关系是松散的,甚至是陌生的。透明能最大程度减少成员之间的猜忌,有效地沟通,达到相互信任的默契。
在透明价值观的倡导下,一个开源软件确定里程碑或版本内的目标、决策、技术选型等等信息,都必须公开、可追溯。在这一原则下:专业人员可以获悉项目目标和项目能力;运营人员可以洞悉项目的关键瓶颈,从而避免投资浪费。倡导生产过程透明的价值观,就是倡导工程领域的新的社会文明。
独立
确保开源参与者独立开发并维护该项目。这是我们在定义开源社区时所遵循的最重要原则之一,即社区成员享有完全控制权,以确保其持续发展并为公众所用。这一点与确保开源社区与现有合作伙伴(或其他组织)之间不存在产权上的冲突密切相关。这是一个需要考虑而且必须被遵守的基本原则之一。
在这里,人们往往会看到“开源社区”这一术语对于解决“谁是开源项目贡献者”最具挑战性的问题具有独特的作用。但是如果所有参与其中的人都遵守了这些准则或原则并得到了充分考虑的话,那么“开源社区”这一术语可以真正发挥作用。此外,这里还包括:“代码公开”“开源项目独立”“保持开源系统稳定”等原则与“独立代码贡献者”一词相关联的含义;所有这些都意味着我们不仅需要使用与该社区无关的手段来维护开发者,而且也需要采取同样的方式来维护该团体内部所拥有的良好传统和价值观,并在相应场景中发挥作用;否则我们就有可能失去开源社区。
对独立性的理解不应被僵化或理想化。任何一个开源项目的代码贡献必然是不均衡的。某些贡献者群体,或者独立代码贡献者可能是某个开源项目的主要贡献者,但并不会因此,我们就认为此项目的独立性不够。开源项目会通过机制来避免贡献者群体或者个体被歧视,确保在开源项目中的技术中立性,以及在许可证设计中保证未来生态场景应用中的独立性,避免开源软件被单一产品所垄断。在“独立”的内涵里,“自由”的作用大于“平等”。
公约
与文明相伴相随,契约体系一直努力为文明的发展,提供了一个执行的准则。开源社区作为开源项目的知识产权方,但它又不是一个有效的法律实体,如何将其纳入契约体系,体现契约精神?我们创造性地推出了开源许可证。开源许可证,用于申明知识产权、申明发行规则,并强调不针对任何个人、实体作特殊条款。这使得开源项目的产出,有机会成为人类的共识。
开源项目对于自身开源代码的契约体系维护,除了上述的保护性公约之外,也应该进行自我审查,避免开源项目代码本身的契约风险,特别是防范来自于闭源项目的知识产权方面的攻击,因为开源项目中由于某些项目贡献者的不专业性,可能使用了商业公司闭源项目的专利。这种状况,需要花费巨大的时间及精力来逐步解决。
开放
开放作为一个重要的开源社区原则,使开发者社区能够在一个新的环境中实现合作开发。由于用户在开源社区中经常可以使用其当前设计的软件,此原则至关重要。就目前而言,开放性是一个较为复杂、且较为难以实现的概念。这意味着每个软件开发者都应该理解自己开发程序所需的“初始”软件特性及“功能”。因为不开放可能会导致开发资源的大量浪费,如果没有理解开源的开放精神并以此为基本原则,根本无法实现有价值的投资回报。
在开放过程中理解回馈也非常重要,往往在公约中也有相关的约定。如果只鼓励开放,而对开源贡献的公司或者机构没有进行对等回馈,可能会侵蚀开源项目生态的健康发展。
务实
一个项目是否值得推广,是否可持续改进,是否具有价值及可持续发展的前景,这取决于该开源项目的实施过程是否足够务实。但是,这并不意味着参与者在他们的软件开发中不能自由发挥。
务实,更注重项目本身是否能引起开发者群体的共鸣。当某一开源项目能解决很多共建者的痛点问题,将会增加大家协作的意愿。这说明,该项目也更为务实。