在开源领域,有一种长期以来的精英主义信仰,或者认为不管谁贡献它都会有最好的作品脱颖而出。问题在于,精英体制假定社区中每个人的时间分配都是平等的。
开源不是精英主义
我自己错误地做出了这个假设,我说:“开源贡献的唯一真正的限制是你愿意学习”。
今天,我开始明白,不平等使得代表性不足的群体很难有“空闲时间”为开源做出贡献。
例如,研究表明女性做家务或照看孩子等无偿家务的时间是男性的两倍多。我从我的一些同事那里听说,她们需要利用她们不工作的每一分钟,这使得在无偿、自愿的基础上为开源做贡献变得更加困难。
或者,在其他情况下许多人的经济条件要求他们工作更多的时间或几个工作来养活自己或家人。像种族和性别工资差距这样的系统性问题继续困扰着代表性不足的群体,假设这些群体的人有同样多的自由时间来为开源项目做贡献(如果他们有的话)既不公平也不现实。
这些只是自由时间分配不均的几个例子。这意味着开源并不是精英体制。
自由时间是特权的标志,而不是平等的权利。我们应该追求公平,而不是追求不切实际的精英主义。与其认为“每个人都可以为开源做出贡献”,倒不如认为“每个人都应该有贡献的机会”。
时间不平等导致了开放源码缺乏多样性
这种“自由时间”的谬论使得开源社区缺乏多样性。统计数据甚至比整个科技行业还要糟糕:劳动力市场中22.6%的专业计算机程序员是女性(美国劳工统计局),而只有不到5%的开源软件(GitHub)贡献者是女性。34%的程序员认为自己是ethnic或者national minorities(美国劳工统计局),而只有16%的程序员认为自己是开源的(GitHub)。
值得注意的是,时间并不是唯一的因素;有时,敌对文化或无意识的偏见会限制多样性。根据上面提到的GitHub调查,21%经历过负面行为的人完全停止了对开源项目的贡献。最近的另一项研究表明,如果女性的用户名是中性的,那么她们的“pull”请求更有可能被接受。不幸的是,这样的例子很常见。
采取行动:给人数不足的群体时间
虽然不可能用任何单一的行动来解决几十年来的性别和种族不平等问题,但我们必须做得更好。有能力提供帮助的人有义务改善他人的生活。我们不仅应该邀请代表性不足的团体加入我们的开源社区,而且要确保他们受到欢迎、支持和授权。
一种帮助的方法是时间:
作为个人,你要确保你有意地欢迎来自弱势群体的人,无论是通过接触还是行动。如果你在一个社区组织的职位上,鼓励并给那些来自弱势群体的人留出空间,让他们就自己感兴趣的工作发表演讲或发起冲刺。或者如果你被要求指导一个代表性不足的贡献者。
作为开源生态系统中的组织,通过给人们更多的付费时间来做出贡献。
对于没有大量空闲时间的社区成员来说,在检查代码更改时额外帮助新成员或提供额外的细节是非常宝贵的。总的来说,更友善、更有耐心、更支持他人,可以在很大程度上欢迎更多的人使用开源软件。
此外,开源生态系统中能够回馈的组织应该考虑在财务上资助代表性不足的团体,为开源做出贡献。赞助可以是全职工作,也可以是兼职工作,也可以是实习,也可以是给像Girls Who Code,Code2040, Resilient Coders或其他支持技术多样性的组织捐款。对于那些代表性不足的员工来说,即使是工作日中几个小时的带薪工作时间也可以帮助他们为开源做出更多贡献。
将这些经验教训应用到Drupal中
多年来,我从不同的人的角度学到了很多。在户外学习并不总是那么容易,但它一直是我个人旅程的重要组成部分。
知道Drupal是最大的、最有影响力的开源项目之一,我发现以身作则很重要。
我鼓励Drupal社区中的个人和组织强烈考虑为代表性不足的群体提供时间和机会。你可以从以下地方开始:
Drupal Core Mentoring ,以激励、支持和鼓励新的贡献者参与进来。
Drupal多样性和包容性贡献团队
TalentPath 发起的 Drupal Apprentice Initiative 帮助企业通过学徒培训建立一个多样化的人才管道。
当我们有更多不同的人为Drupal做出贡献时,它不仅会注入能量的火花,还会帮助我们为世界上的每一个人开发更好、更容易访问、更包容的软件。
我们每个人都需要决定是否以及如何帮助Drupal中的每个人创造公平。这不仅对企业有好处,对人们也有好处,而且是正确的做法。
特别感谢Drupal多样性和包容小组与我讨论这个主题。
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('g',5)='g
0 0'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('x',0)='x
0 0'and(select+1)>0waitfor/**/delay'0:0:5
0 0'and(select+1)>0waitfor/**/delay'0:0:0
0 0'/**/and(select'1'from/**/pg_sleep(5))::text>'0
0 0'/**/and(select'1'from/**/pg_sleep(0))::text>'0
0 0"and(select*from(select+sleep(5))a/**/union/**/select+1)="
0 0"and(select*from(select+sleep(0))a/**/union/**/select+1)="
0 0'and(select*from(select+sleep(5))a/**/union/**/select+1)='
0 0'and(select*from(select+sleep(0))a/**/union/**/select+1)='
0 0"and"s"="w
0 0"and"n"="n
0 0'and'w'='s
0 0'and'g'='g
0 0