阅读更多
引用
为什么依赖开源项目的公司必须坚持强有力的行为准则?因为开源技术也有它的另一面,不同于传统商业环境中雇员的错误行为会受到惩戒,开源社区中的成员通常没有等同的约束,因为没有“开源HR部门”管理这些事务。

曾经饱受嘲笑和法律攻击的开源软件,如今已成为技术产业中的一股势力。诸如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 说,“市场会容纳那些为自己决定负责的公司。”
  • 大小: 25.5 KB
  • 大小: 31.6 KB
  • 大小: 16.7 KB
  • 大小: 243 KB
来自: CODE
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java获取request body_filter得到request的body/content

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;int length = req.ge...

  • Spring Cloud Gateway 打印 Request/Response Body

    记录的内容包括请求信息(请求方式、请求地址、请求头、RequestBody等)、响应信息(响应头、响应码及ResponseBody等); 二、环境及版本 Spring Boot 2.3.5.RELEASE Spring Cloud Gateway 2.2.7.RELEASE 三、...

  • 揭秘 WebFlux 中如何修改 request/response body

    我们的一些企业对于HTTP服务有一些非正常的做法,它们客户端的请求body是加密的,即在服务端需要...首先我们需要知道,WebFlux 的过滤器/拦截器是统一用WebFilter 来表示的,与 Spring MVC 类似,对于 application/js.

  • request body与content-type使用小结

    说明比较常见的Content-Type 1.application/x-www-form-urlencoded 浏览器原生的form表单 形式:key1=value1&key2=value2提交的数据放在body中 取值方式:request.getParameter()、request.getParameterMap() 2....

  • 通过过滤器filter修改request的body请求数据、拦截器进行token登录验证

    通过过滤器filter修改request的body请求数据、拦截器进行token登录验证 过滤器: 1、以stream的方式获取request中body(json)参数。 2、递归获取userIdSet集合并写入request的stream中。 3、重写...

  • nginx使用lua通过request_body按条件开放访问权限

    access_by_lua ' ngx.req.read_body() local data = ngx.req.get_body_data() local match = ngx.re.match(ngx.var.request_body, "balance.query|asset.list") local addr = ngx.re.match(ngx.var.remote_addr, ...

  • ServletRequest的body只能被读取一次的解决,修改Request的body/content的方法

    之前修改参数,现在又有要修改body,然后搜索了很久才找到一些资料,有关content只能被读取一次的资料,转载一下 ServletRequest的说明,如下: /** * Retrieves the body of the request as binary data ...

  • java获取request body_spring cloud gateway 读取request body 数据

    spring cloud gateway为了记录访问记录,需要记录请求体里面的内容,但是 request body是只能读取一次的,如果读取以后不封装回去,则会造成后面的服务无法读取body数据. 在网关里添加一个过滤器RequestRecordFilter类:@...

  • 解决Filter中获取body内容报错,getReader() has already been called for this request

    解决Filter中获取body内容报错,getReader() has already been called for this request

  • Filter 处理 request 和 response

    Filter 处理 request 和 response 背景:在 Filter 根据请求参数,判断用户登陆是否有效。后来是想就请求参数和返回值之间的关系做一个缓存。至于为什么不用 Spring … 因为公司不用。所以项目都是 Servlet + ...

  • SpringBoot 实战:在 RequestBody 中优雅的使用枚举参数(原理篇)

    该图片由Johnnys_pic在Pixabay上...本文就来扒一扒,RequestBody参数中使用枚举参数的原理。 找入口 对 Spring 有一定基础的同学一定知道,请求入口是DispatcherServlet,所有的请求最终都会落到doDispatch方法中的h..

  • SpringBoot 实战:在 RequestBody 中优雅的使用枚举参数

    前文说到 优雅的使用枚举参数 和 实现原理,本文继续说一下如何在 RequestBody 中优雅使用枚举。 本文先上实战,说一下如何实现。在 优雅的使用枚举参数 代码的基础上,我们继续实现。如果想要获取源码,可以关注公...

  • springboot中使用filter来修改body里的参数

    在这里, 以去空格为例来进行说明. 背景:在项目中, 经常会遇到前端往后端传参会有字符串参数首尾有空格的情况, 一般如果字段比较少, 或者接口比较少, 自行在...自定义filter. public class ParamsFilter impl...

  • spring-cloud-gateway修改request param与body

    最近遇到一个新需求,就是需要给全局的请求做一个参数解密,包括request param与body中的参数。 分解下来可以分为三步:实现全局拦截请求、修改request param、修改request body。

  • springBoot修改request的body

    如果过滤器读取了参数,后面拦截器和controler层就读取不到参数了,所以这类参数需要单独获取,可以把request封装一下,copy一份requet,一个用于在拦截器(过滤器)中读取参数,一个放行给controller使用 ...

  • ngx_http_request_body_filter 函数解析

    request body 中的 bufs 是输出用的,如上所述,bufs 中指向的 buf 和 busy 指向的 buf 对象是一模一样的 if (ngx_buf_size(cl->buf) != 0) { break; } if (cl->buf->tag != tag) { // tag 中存储的是 函数指针...

  • nginx收集request_body、response_body

    1、收集request_body: 对于get请求,request_body始终是空,对于post请求,request_body是参数信息。request_body的获取有两种方式: 使用nginx ngx_http_core模块的$request_body; openresty中使用lua脚本。 ...

  • Springboot--springmvc Required request body content is missing异常

    org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing 2.问题复现: @RequestMapping(value = "/somewhere", method = POST) public SomeResponse some

  • 菜鸟学习nginx之HTTP body接收(3)

    上一篇介绍了,Nginx是如何接收body主体流程,但是我们仍然...本篇主要分析ngx_http_request_body_filter函数,该函数会帮助我们解决。 一、ngx_http_request_body_t结构体 typedef struct { ngx_temp_file_t ...

  • Java-美妆神域_3rm1m18i_221-wx.zip

    Java-美妆神域_3rm1m18i_221-wx.zip

Global site tag (gtag.js) - Google Analytics