为什么依赖开源项目的公司必须坚持强有力且可实施的行为准则?

原作者:Jonathan Vanian

原文链接:https://gigaom.com/2014/10/25/why-companies-that-rely-on-open-source-projects-must-insist-on-a-strong-enforceable-code-of-conduct/

曾经饱受嘲笑和法律攻击的开源软件,如今已成为技术产业中的一股势力。诸如Docker,Hortonworks和Cloudera这些鲜活的例子,证明了与开发者社区合作能够使公司茁壮成长,社区贡献者们能够帮助其核心技术跟上时代,应用最新的功能特性。

许多软件工程师利用他们的空闲时间为开源项目做贡献,产生出了大量的创新和免费的劳动成果。但是开源技术也有它的另一面,不同于传统商业环境中雇员的错误行为会导致受到惩戒,开源社区中的成员通常没有等同的约束,因为没有“开源人力资源部门”这样的部门去负责管理这些事务。

来自Chef公司的工程师Seth Vargo就是一个例子,Seth负责Chef开源配置管理工具的商业化支持,他最近因为收到了某些社区成员的死亡威胁而同时离开了公司和Chef社区,仅仅因为他对开源项目做的一些贡献遭到了某些人的不满。

这种窘境暴露出一个微妙的问题,依赖于开源技术以实现商业成功的这些公司,需要尝试去对那些没有实际控制的开源社区进行合理的管制。

当公司开始管制开源社区行为的时候,他们会非常谨慎,因为这可能会扼杀创新或导致社区成员质疑这帮公司监工的动机。如果形势开始难以控制的时候,对于公司来说明智的方式是行动起来,让开源人才不要离开,避免紧张升级。

有一种能够与错误行为斗争并建立起基本秩序的方法,那就是建立一种强有力的行为准则————一组规定了社区内可接受的行为的指导原则。Ada Initiative是一个支持女性从事开放技术的非盈利组织,针对多起在开源会议中发生的性骚扰和性攻击等严重事件,该组织发展和普及了一套行为准则,以帮助社区成员一致认清不适宜的行为,以及针对一些无法容忍的事情发生后相关的处理方法。

公司对于其开源社区的法律责任

专注于开源许可的法律公司O'Melveny&Myers的合伙人Heather J. Meeker说,开源项目一直以来是由一些自我管理的技术成员构成,它的产生并不依赖于特定公司和组织实体的发起。

“开源社区倾向于非常直接了当和畅所欲言的表述他们的观点,当把这一点和匿名留言结合在一起时,带有强烈观点的声音会表现出来,而这在实名制的情况下可能就不会发生。”

Heather J. Meeker,O'Melveny & Myers

开源组织的创建例如Linux基金会和Mozilla基金会,两者均监管着各自的开源技术,他们认为这类项目只有在离开自己的设备才能成功。而现在,其他公司也开始行动起来,承担起类似的角色以开发利用开源社区的智慧。

出于对法律的考虑,这些开源社区通常会从企业中剥离出来,并且公司喜欢这种方式,Meeker说。从社团中的法律分离使得开源社区从常见的管理问题中解放出来,这些问题包括专利方面的考虑,因为他们不得不根据会计和其他债务事务进行汇报。

由于公司对于开源社区没有法律责任,这也使得,公司“只能以道德劝服作为执行权威的唯一手段”,Meeker说,当社区成员决定制造点小麻烦时,这个问题很容易导致出有趣的窘境。

收到死亡威胁的Chef公司工程师

Seth Vargo后来去了一家做数据中心管理工具的公司HashiCorp,对于社区来说,他的离职让Chef公司脸上无光。Vargo没有详细说明他的忧虑,并且拒绝评论此事。

Chef公司开源社区总监Nathen Harvey说,曾经Chef公司制定了一份类似于行为准则的社区指导规则,其中概述了公司对开源社区所期待的可接受的行为,而Vargo事件让公司重新回来更新了条款以帮助缓和未来可能发生的未知事件。

Chef公司最初的行为准则包含了行为建议,诸如如何对其他人保持尊重,以及认真措辞以避免自己看起来像个性情古怪的人。

而最新的草案除了列出一系列不可接受的行为外,还包含了更多处罚措施,并引入了一个新的由律师、巡视官和决策人组成的社区管理团队;该团队的职责是在邮件列表、GitHub和其他社区成员活跃的地方寻找问题。

如果律师或者巡查官(Harvey目前担任此职责)发现了负面行为,全体团队成员会尽全力检查事件发生的环境并找到谁应该对煽动此事负责。如果有必要的话,Chef公司的CTO兼合伙人Adam Jacob会来决定下一步怎么做,包括可能会删除该用户在Chef社区上的在线空间。

在该草案实践中,一位社区成员感觉到自己的安全受到损害,这个指导原则看上去更像是强制性的法律。

“我们并没有说这是我们的社区准则”,Harvey说,“我们和社区是一起协作来制定这些准则的。”

社区自我调节和外部介入的重要性

Ada Initiative合伙人Valerie Aurora认为,即使一家公司在开源社区上没有法律权力,建立一个委员会以监管社区成员之间的交流也变得越来越重要,尤其要在一个固执己见的文化中制造出礼貌的氛围。

“许多公司目前采取的是不干涉的方式”,Aurora提到一些公司为什么认为不能监管太多,“他们会停止为自由生产价值。”

Rackspace软件开发者Alex Gaynor(Python软件基金会总监,Django软件基金会前任总监,OpenStack的开源贡献者)认为,Django开源项目极大的受益于采用仲裁者授权采取行动的行为准则。

“‘嘿,这话在这说不对,’”,Gaynor描述了仲裁者需要对行为不端的成员说的话,“你警告后如果他们看起来不当回事,你可以升级惩戒例如临时甚至永久禁言。”

Aurora建议公司应该为开源提交者支付一定的费用,让其检查社区中恶毒的行为,因为她相信让某人去免费承担这个工作很困难。

“我认为有一种道德责任去确保这些社区不是毒气制造组。”

Russell Keith-Magee,Django软件基金会主席

在Chef公司的例子中,Harvey主张他们的仲裁者做这件事是因为热爱,他说:

“在Chef公司的现实情况是,没有一个人的工作是去监控IRC,没有人是付费去在StackOverFlow上面回答问题。在Chef的人们做这些事是因为他们关心社区和项目。”

行为准则是否有效?

现在依然需要时间去检验Chef公司新制定的行为准则是否能防止类似Seth Vargo这样的事件再次发生,但是对于Django项目和Ada Initiative这样的组织来说,包含相关强制性政策的行为准则已经避免了一些特殊情况的爆发。

在Ada Initiative发展出他们的行为准则后,Aurora表示她看到女性参与开源会议呈现上升势头,这些女性感觉和之前相比,她们在各种会议过程中不再缺乏安全感。同时在这些会议中的侵犯行为(例如有人在PPT里插入色情图片)也出现了下降。

如果对于管理开源社区有一件事可以确定的,那就是这不是一个轻松的工作。甚至Linux领袖Linux Torvalds(他自己也因为攻击性评论成为争议的目标)最近承认他在他自己的Linux社区中也犯过错误。

“问题倾向于离间用户或开发者,并且我非常擅长这个,” Torvalds在LinuxCon Europe 2014上提到,“我使用措辞强烈的语言,但是再说一遍我不打算修正任何一条语句。”

开源社区中强烈的个性和缺乏任何法律的保护,介入开源项目的公司可能得到的不仅仅是约定中的内容,甚至会有纠纷甚至死亡威胁的发生。但是也许在这种情况下,有一个行为准则以及一些强制性规范应该能在事件发生之前就缓和并处理掉。

“Chef社区不是一个实体,它是一群人的集合,”Harvey说,“行为准则可能是能够将我们和软件本身绑定在一起的最强的东西”。

所以这件事给我们上了一课,天底下没有什么东西是免费的,包括从事于开源项目的劳动。如果你是一家想要涉足开源社区的公司,将自己从任何法律责任中分离出来固然是好事,但是这并不意味着当一些不走运的事情发生时你可以完全免责。当社区中发生坏的事情却无人来管的时候,社区里那些积极贡献的成员们将远离这里,关于项目的负面影响将导致没有软件工程师愿意再参与进来。那就只能跟你的免费创新说再见了。

“一个负责人的公司实体无法撇清所有责任,”,Keith-Magee说,“市场会容纳那些为自己决定负责的公司。”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结