GitHub一代:我们都是开源控
我们是新的GitHub一代?GitHub塑造了新式开源文化?嗯,看看十几年开源控、Getable CTO Mikeal Rogers 是怎么说的吧:
GitHub本来想做一个开源软件协作平台,结果做着做着就成了一个兼容并包、不仅仅是照顾程序员的平台。现在,这个平台也成了各类艺术家、建筑生产商、各大公司、甚至各大城市使用的平台。
例如,芝加哥市前阵子就宣布了一项公告:“假如本市出现新的自行车道、公路或建筑物,那么人人都可修改GitHub上的数据。”另外,有些人则将家装项目放到了GitHub上,有家律师事务所也在前几天宣布,他们会将早期创业公司的融资相关法律文件全放到上面——而在去年,另有一个神人甚至将整个德国的法律全搬到了GitHub上。当然了,GitHub现在依然是那些用Node.js做AR无人机、或者是用jQuery做网站的程序员光顾的地方。
去中心化的一场革命
大部分人听到开源的第一反应是“民主、分散、和平等”,想到所有人一起做东西,做出来给所有人用。
但实际情况并非如此。大部分的开源软件都是由那些享有一定特权的一小撮人创建并维护的——即专业的开发人员,而这些人又只会跟同个圈子、同个水平的一帮人互动(后者与前者尽管很像,但又足够不同到可持相异观点供双方争论)。
在GitHub出来以前,我会花很多时间去思考、讨论如何最好地管理开源项目,因为这类项目的协同成本太高了。这个成本高到什么程度呢?当一个项目做得不错,又发展成一个规模不小的社区时,我们发现,最好的办法是让项目继续庞大臃肿下去,而不是拆分成规模更小的项目。但这里面就会有这样一个问题,项目变得越大越复杂,个体就越难对其作出贡献。所以就不得不有特定的一群会员,或者说所谓的“委员会成员”,被任命专门管理和生产项目,这也经常导致项目实际的消费人群和项目创作者之间的信息裂缝和信息断层。
但GitHub的“去中心化”开源模式则让这种裂缝渐渐弥合,让开源不再聚焦“项目”本身,而是越发彰显个体特色。此话怎讲?
GitHub上的整个工作流程设计相当个人化。每个GitHub用户都有一个自己的账号,而他们发布的所有资料都会隶属于这个层级以下。假如某些人需要对某个项目做出修复,他们只要“fork”(将项目分叉),即在自己的名下拷贝一个原项目的副本,进行相应的加工即可。
这种工作流程是非常强大的:因为它鼓励了个体用户去对一个他人已创建的项目做修修补补,而他们对该项目的所有权和控制权丝毫不亚于一个由自己最先创建的项目。在这种新式的开源文化下,所有用户都能拥有自己的身份和定位。而GitHub实际上也已经成为互联网上协作式内容生产(peer-based production)最大的身份提供商,不仅仅是在代码方面。
我自己就做了十多年的开源项目贡献者,但现在的开源文化跟当年的一个很大不同是——我不再是某个项目的“会员”——而仅仅是某个项目的使用者。使用者的一个很大特点就是,人人都可为项目贡献“一点点”自己的力量。在我消费、使用的各种各样的小项目中,我就会跟项目维护者有一些更小层面的互动,而且保持一周几次。
但更大的一种趋势其实来自另一个方向:作为我自己的项目的发起者,现在我会收到有很多闻所未闻的人发来的关于这些项目的小代码。
民主升起在“去中心化”
GitHub的第一版在一件事情上做得很好:他们让个体发布代码——而非雪藏代码——变得比过去简单很多。这也使得很多很有影响力的项目,比如说Ruby on Rails的项目,可以很快地迁移到GitHub上来。
但接下来发生的事情实际更有趣:人们开始在GitHub上发布除代码以外的其他东西,几乎无所不包...不夸张地说,在GitHub上推代码就变得跟发微博一样简单。通过降低用户的进入成本、并让用户在开源项目中更方便地展开协作、贡献力量,GitHub将“协作式生产”(peer production)的范围扩大到普通用户。
所以,GitHub式的开源文化降低了所有人的“创造门槛”——今天,对于那些富有创造力但又不具备深度技术知识的人来说,他们可以使用各类简单又易于理解的软件实现创意。而在过去,他们必须、而且只能具备深度的技术知识以参与到大型开源项目中。
而平台上发起者、贡献者和消费者这三类身份的日益弥合也使得那些更轻巧、更易懂的项目逐渐获得更高的关注度——也催生了一批长尾的内容贡献。举个例子,在2012年9月全月,超过半数的GitHub活跃用户都发布了5次以内的更改,而有22%(约4.4万)用户的更改次数只有一次(明显的长尾趋势)。
这种开源软件“业余化、平民化”的趋势也有明显的好处,如下:
1.让软件变得更易用
不能做到“傻瓜易用”(fit and finish)一直是开源软件的一个问题。这类软件的说明文档和网页设计通常都是乱糟糟的,产品的可用性也很差——尤其是跟很多专有的同类产品相比。
但现在,因为贡献门槛的逐步降低,那些对技术不那么在行的用户就可将上述的几个方面逐渐优化,以方便自己对这类软件的使用。而这就意味着那些原本诡异的报错消息现在变得越来越像人话,简单修改一两行CSS就会让网页在一些更老的浏览器和手机上渲染。
所以说,在新的开源文化下,人们希望自己不用成为技术专家就可方便地使用技术,“易用性”获得了全所未有的关注和重视。
2.规避过度“工程化”
工程师们往往乐于接受挑战,要是能给他们更多的机会解决问题,他们就越有可能想到聪明的解决方案——假如这类解决方案的终端消费者跟这些工程师一样,对技术有很好的理解,又会像他们一样因为有更聪明的方法解决老问题而激动不已,那一切都没问题。
但问题是,业余爱好者只喜欢那些在他们眼中理所当然、显而易见的解决方案,一旦某个问题已经得到解决,他们就很少会回过头去重新审视这个问题。因为业余爱好者只会利用那些最显而易见的解决方案做东西,这就迫使开发人员不得不去寻找简单而接地气的解决方案来解决难题。
3.支持一个更大的生态系统
以我自己频繁使用的Node.js为例,这种编程语言定义了足够简单的语法结构(patterns),使得人人都可以编写独立的小型函数库,并按自己的意愿发布。在这个生态系统中,每个人都可以独立享受当中的价值,无需协作。这就跟一些大型、垂直、拥有大量工具和功能、需要在特定环境下(比如说Cocoa和iOS)使用的栈(比如像ember, Dojo,YUI这样的集成的插件系统)形成了鲜明对比。
但在开源环境下,如之前提到的Node.js,我们就可以看到一些更小的 API空间轻松使用该生态系统中的其他资源,避开协调(比如用jQuery或node的标准回调模式来回调API)。开发者与开发者、库与库之间的协调越少,就越利于我们创造价值。
总结下来就是,GitHub让新一代的年轻人更方便地协作、创造和生产。很多开发者可能会因为过去那种正规开源文化(如“委员会圈子”、需要纠结使用哪种授权模式)的消弭而大唱挽歌——但开源的未来已经掌握在那群无所顾忌、大步向前的新一代人手中。
从这个角度来说,GitHub不仅仅是一个工具,它在创造一种全新的文化。
GitHub一代:我们都是开源控的更多相关文章
- Win10 UWP开发系列——开源控件库:UWPCommunityToolkit
在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...
- 开源整理:Android App新手指引开源控件
开源整理:Android App新手指引开源控件 一个App第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便新用户快速了解操作你的应用功能.新手指引的重要 ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- 2018上半年GitHub上最热门的开源项目
关注GitHub的人都知道,这个平台上面有太多优秀的值得学习的开源项目了,这里总结了2018上半年GitHub上最热门的开源项目. 1: tensorflow https://github.com/t ...
- .Net 开源控件 NPlot使用小结
NPlot是一款非常难得的.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散点图,股票图等,而且它免费又开源,使用起来也非常符合程序员的习惯.授权方式为BSD许可证. 下载链接: http:/ ...
- Android 开源控件与常用开发框架开发工具类
Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...
- [原创][开源]SunnyUI.Net, C# .Net WinForm开源控件库、工具类库、扩展类库、多页面开发框架
SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...
- Android一个炫酷的树状图组织架构图开源控件实现过程
Android一个炫酷的树状图组织架构图开源控件 文章目录 [1 简介] [2 效果展示] [3 使用步骤] [4 实现基本布局流程] [5 实现自由放缩及拖动] [6 实现添加删除及节点动画] [7 ...
- GitHub上不错的Android开源项目(三)
收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) GitHub上不错的Android开源项目(一):http://ww ...
随机推荐
- angularjs http 请求拦截器
/** * Created by oy on 2016/11/29. */ (function() { 'use strict'; // 创建angular模块 angular .module('ap ...
- 算法:Astar寻路算法改进
早前写了一篇<RCP:gef智能寻路算法(A star)> 出现了一点问题. 在AStar算法中,默认寻路起点和终点都是N x N的方格,但如果用在路由上,就会出现问题. 如果,需要连线的 ...
- nginx(1、正向代理)
正向代理是指客户端通过代理服务器访问某一个服务器,最常见的例子是内网用户通过代理访问外网,以及所谓的“FQ”. 在windows下实例如下: 1.下载安装包:nginx-1.7.9.zip: 2.解压 ...
- 在GitHub注册账户的过程
(1)第一步:首先起一个属于自己用户的名字(username),用户名字只能包含字母数字的字符或者单个连字符,不能只用单个连字符开始或者结束(only contain alphanumeric cha ...
- session机制详解以及session的相关应用
session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...
- Python中的几种数据类型
大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"hello" ...
- 《30天自制操作系统》笔记(06)——CPU的32位模式
<30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...
- java内功 ---- jvm虚拟机原理总结,侧重于虚拟机类加载执行系统
参考书籍:<深入理解java虚拟机>,三天时间用了八个小时看完,像读一本武侠小说,挺爽. 另外需声明:图片都是从我自己的csdn博客转载,所以虽然有csdn标识,但都是我自己画的图片. j ...
- webservice5
如何访问webservice . 三种方式我知道, 但是, 方式1 只说明了如何访问wsdl, 不知道如何调用,现在就是需要知道如何像下面url描述一样 , http get .post 方式调用ws ...
- Atitit 编程语言常用算法attilax总结
Atitit 编程语言常用算法attilax总结 1. 编译算法分类and 数据操作算法.1 1.1. Tab driver stat 状态转换表格算法1 1.2. Nest case 词法分析 ...