【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

开源成功十法则

  • 2015-10-09
  • 本文字数:1504 字

    阅读完需:约 5 分钟

每个人都想要,不少人都在试,但是创造它的过程,说起来却都是泪。我说的是自由软件,又叫开源软件(译者注:本文重点不是辨析自由软件和开源软件的概念,作者如此说,姑且认为两者是一回事)。今天我要用十条行之有效的法则,来谈谈我三十年的写代码经验。

  1. 先有人,后有代码这是一条黄金定律,Isabel Drost-Fromm 教我的。致力于社区建设,而不是软件本身。没有社区,你的代码解决的可能是错误的问题。这些代码会被废弃、忽略,最终消亡。先吸引人才,再给他们协作的空间。给他们有挑战的工作。不要自己写代码。
  2. 采用强制开源的许可证强制开源(share-alike)的许可证是开源软件的保险带。别夸口说你不需要,总有一天你会被打脸,遍体鳞伤。不要被打脸,使用强制开源的许可证。如果 GPL/LGPL 对你来说政治意味太浓,那么用 MPLv2。
  3. 别指望达成共识做决定前寻求共识,就好像指望能找到理想的人生伴侣一样。有点不切实际。Github 抛弃了共识,他们设计了 fork/pull-request 流程,所以 2015 年你已经没什么借口了。你接受补丁就可以了,就像维基百科会接受增补。先合并代码,再修复问题,最后再讨论。把所有开发工作都放在主分支上。不要让用户等。这样做你才能得到事实上的共识。
  4. 先问题后方案让你自己和你队友们关注问题,而不是功能。每个补丁都必须解决一个实在的问题。欢迎实验性代码,欢迎异想天开的创意。但不要让这些东西过度膨胀。收集好的方案,抛弃坏的。允许失败,各个层面上的失败。这是成长的必经之路。
  5. 先定义后实现积极地为 API 和协议的定义写文档并进行测试。用持续集成来测试公开的 API 和协议。代码覆盖率不重要,代码文档也不重要。重要的是,定义好的东西代码要去实现,并且实现得要好。
  6. 内部挖潜让贡献者(contributor)成为维护者(maintainer),让维护者成为负责人(owner)。平稳地、放松地做这件事,别害怕。保留权力把表现糟糕的人踢出去。鼓励人们创立他们自己的项目,尤其是基于已有的项目开发的新项目,或者与已有项目构成竞争关系的项目。日常表现不好的人,卸下他们的权力。
  7. 写下规则你有了自己的规则,就要写下来,这样大家才能知道。实际上都不用写了,借用我们为 ZeroMQ 设计的 C4.1 规则就行,如果你愿意,也可以简化这些规则。
  8. 公平地执行规则你的权力应该用来执行规则,而不是威逼别人认同项目的愿景。最重要的是,你自己要遵守规则。有这么一小撮维护者,会仅仅因为他们不喜欢一个补丁而枪毙它,而你如果自己不遵守规则,就会助长这类小团体,没什么比这更糟糕了。好吧,这么说有点夸张,更糟糕的事情多着呢。但是这类小团体会对项目造成危害。
  9. 细分项目力争建立一群小型、独立、自组织、互相竞争的小项目。不要搞大项目。这里说的“大项目”是指,有两到三个核心开发者的项目。不要用 submodules(译者注:git 的命令,用于指定外部项目的依赖性)之类的来指定依赖性。让别人自己选择想要集成的项目。这是基本的法则。
  10. 保持快乐的氛围也许你注意到,我并没有提及“创新”。如果要提,创新可能会排在 11 或 12 位。无论如何,你要为社区营造正向快乐的氛围。不要说某个问题愚蠢,不要说某个人愚蠢。社区总有一些人表现糟糕,即使规则很清楚也要违反。除了这些人,其他所有人都值得我们珍惜,我们应该像远道来访的客人一样对待他们。

本文是 pieterh 在其博客上发表的《Ten Rules for Open Source Success》一文的翻译,经作者许可分享至 InfoQ 中文站。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-09 19:001777
用户头像

发布了 77 篇内容, 共 35.2 次阅读, 收获喜欢 25 次。

关注

评论

发布
暂无评论
发现更多内容

预约直播 | 主流视觉算法介绍及在PAI上的应用

阿里云大数据AI技术

机器学习 视觉算法

EMQ携手谐云,打造车联网平台联合解决方案

EMQ映云科技

车联网 物联网 IoT 兼容性测试 6月月更

Salesforce 容器化 ISV 场景下的软件供应链安全落地实践

阿里巴巴中间件

阿里云 容器 云原生

基于STM32设计的蓝牙健康管理设备

DS小龙哥

6月月更

在外企远程办公是什么体验? | 社区征文

翊君

Java 程序员 远程办公 外企 初夏征文

Rxjs mergeMap 的使用场合

Jerry Wang

typescript 响应式编程 angular RXJS 6月月更

Elasticsearch 在地理信息空间索引的探索和演进

vivo互联网技术

elasticsearch 数据分析 数据检索

居家办公竟比去公司上班还累? | 社区征文

架构精进之路

初夏征文

【值得收藏】Centos7 安装mysql完整操作命令

迷彩

MySQL 数据库 centos 6月月更

前端食堂技术周刊第 42 期:Vue 2.7 Beta、TS 4.8 Beta、React 开源奖、ECMAScript 2022

童欧巴

JavaScript typescript Vue 前端 React

政策关注 | 加快构建数据基础制度,维护国家数据安全

青藤云安全

数据治理 数据安全

巅峰小店APP仿站开发玩法模式讲解源码分享

WDL22119

巅峰小店仿站开发 巅峰小店溢价挂售模式开发 巅峰小店APP模式开发 巅峰小店源码搭建

红包雨: Redis 和 Lua 的奇妙邂逅

勇哥java实战分享

SpringCloud - Eureka核心源码解析

码农参上

微服务 SpringCloud Eureka 注册中心

大数据培训Scala 类和对象知识与案例分享

@零度

scala 大数据

java培训redis集群原理详解

@零度

redis java培训

maven编译遇到"编码GBK的不可映射字符"警告的处理

程序员欣宸

Java maven 6月月更

我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!

小傅哥

小傅哥 异常 bug 连接池 面试问题

SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道!

博文视点Broadview

web前端培训组件内部数据state的知识点分享

@零度

前端开发 state

JavaScript 回调函数/Promise/ async/await

源字节1号

软件开发 前端开发 后端开发

TDengine 邀请函:做用技术改变世界的超级英雄,成为 TD Hero

TDengine

数据库 tdengine

Spring Boot零配置启动原理

码农参上

Spring Cloud springboot

Future & CompletionService

Ayue、

多线程 Future接口

Vue3+ElementPlus+Axios实现从后端请求数据并渲染

Python研究所

6月月更

华为开启2022全球校园AI算法精英大赛 百万奖金等你来挑战算法极限

科技汇

面试突击60:什么情况会导致 MySQL 索引失效?

王磊

Java MySQL 面试

centos7防火墙完整操作命令,值得的收藏

迷彩

Linux 运维 Centos 7 防火墙 6月月更

直播电子商务应用程序开发需要什么基本功能?未来发展前景如何?

开源直播系统源码

软件开发 直播源码 带货直播

优博讯出席OpenHarmony技术日,全新打造下一代安全支付终端

Geek_2d6073

Drive to APasS!使用明道云管理F1赛事

明道云

开源成功十法则_语言 & 开发_曹知渊_InfoQ精选文章